diff gFont.cc @ 99:c534f339ee8b

change c++
author e085768
date Thu, 02 Jun 2011 17:51:41 +0900
parents gFont.c@0b65ca27f113
children e5f2eb98b575
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gFont.cc	Thu Jun 02 17:51:41 2011 +0900
@@ -0,0 +1,169 @@
+/*
+ * $Id$
+ * 
+ * フォント表示。といっても結局スプライトです。
+ * gSprite.c と一緒にしてもよかったんだけど
+ * 文字は文字でいろいろあるので分けてみる
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include "libps2.h"
+#include "ps2util.h"
+#include "gSprite.h"
+
+#define DEFOBJ 120
+#define SPRITE_COL 0x4f
+#define SCREEN_HALF_W 320
+#define SCREEN_HALF_H 240
+#define CHAR_W_SIZE 17
+#define CHAR_H_SIZE 34
+
+static SpriteTable   sptable[DEFOBJ];
+static ps2utilSprite sp[DEFOBJ*2]; // 表示スプライト用スタック
+static unsigned int  sp_counter;
+static bool          flag_spriteInited = false; // スプライトロードフラグ
+
+static TEXTURE *font_tex;
+
+static void
+gFont_Init_Png(char *texname)
+{
+  if (!(font_tex = read_png_file(texname))) {
+    fprintf(stderr,
+	    "cannot creat texture - gFont_Init_Png().\n");
+    fflush(stderr);
+    exit(EXIT_FAILURE);
+  }
+
+  if (ps2util_tex_Set(font_tex) == -1) {
+    fprintf(stderr,
+	    "cannot set texture - gFont_Init_Png().\n");
+    fflush(stderr);
+    exit(EXIT_FAILURE);
+  }
+}
+
+static void
+gFont_Create()
+{
+  int i;
+  for (i=0; i<DEFOBJ; i++) {
+    if (ps2util_sprite_Create(&sp[i], font_tex) == -1) {
+      fprintf(stderr,
+	      "cannot create sprite - gFont_Create()\n");
+      fflush(stderr);
+      exit(EXIT_FAILURE);
+    }
+    ps2util_sprite_Unuse_alpha(&sp[i]);
+  }
+
+
+  flag_spriteInited = true;
+}
+
+static void
+gFont_DefSprite(int number, int x, int y, int w, int h)
+{
+  sptable[number].tx = x;
+  sptable[number].ty = y;
+  sptable[number].tw = w;
+  sptable[number].th = h;
+}
+
+void
+gFont_Init()
+{
+  int i, j;
+  int number = 0;
+
+  gFont_Init_Png("img/font.png");
+  gFont_Create(); // スプライト生成
+
+  for (i=0; i<7; i++) {
+    for (j=0; j<15; j++) {
+      gFont_DefSprite(number, j*17, i*34, 17, 34);
+      number++;
+    }
+  }
+}
+
+
+static void
+gFont_PutSprite(int number, int x, int y)
+{
+    ps2utilSprite *p = &sp[sp_counter];
+
+    // ushortってなんですか?:miya
+    /*
+    ps2util_sprite_Set_basicAttribute(
+	p,
+	(ushort)x, (ushort)y,
+	(ushort)sptable[number].tw*1.5, (ushort)sptable[number].th*1.5,
+	(ushort)sptable[number].tx, (ushort)sptable[number].ty,
+	(ushort)sptable[number].tw, (ushort)sptable[number].th,
+	SPRITE_PRIO_FOREGROUND);
+    */
+
+    ps2util_sprite_Request(p);
+    sp_counter++;
+}
+
+
+static void
+gFont_Clear()
+{
+    int i;
+
+    for (i=0; i<DEFOBJ; i++) {
+   	sprite_disappear(&sp[i].attribute);
+    }
+    sp_counter = 0;
+}
+
+void
+gFont_Draw_Reset()
+{
+    if (flag_spriteInited == true) {
+     	gFont_Clear();
+    }
+}
+
+static int
+get_number_char(char a)
+{
+    return (int)a-32;
+}
+
+/*
+ * str をスプライド表示
+ */
+void
+gFont_SetString(char *str, int x, int y)
+{
+  int number;
+
+  while (*str != '\0') {
+    number = get_number_char(*str);
+    gFont_PutSprite(number, x, y);
+    str++;
+    x += (int)CHAR_W_SIZE*1.5;
+  }
+}
+
+/*
+ * numを文字列に変換してSetStringに渡す
+ */
+void
+gFont_SetStringInt(int num, int x, int y)
+{
+  char bufp[256];
+
+  snprintf(bufp, 256, "%d", num);
+  gFont_SetString(bufp, x, y);
+}
+
+void
+gFont_SetFont_OP()
+{
+}