0
|
1 /*
|
|
2 * 2006/07/24 16:46:19 sugiyama
|
|
3 *
|
|
4 * フォント表示。といっても結局スプライトです。
|
|
5 * gSprite.c と一緒にしてもよかったんだけど
|
|
6 * 文字は文字でいろいろあるので分けてみる
|
|
7 */
|
|
8 #include <stdio.h>
|
|
9 #include <stdlib.h>
|
|
10 #include "libps2.h"
|
|
11 #include "ps2util.h"
|
|
12 #include "gSprite.h"
|
|
13
|
|
14 #define DEFOBJ 120
|
|
15 #define SPRITE_COL 0x4f
|
|
16 #define SCREEN_HALF_W 320
|
|
17 #define SCREEN_HALF_H 240
|
|
18 #define CHAR_W_SIZE 17
|
|
19 #define CHAR_H_SIZE 34
|
|
20
|
|
21 static SpriteTable sptable[DEFOBJ];
|
|
22 static ps2utilSprite sp[DEFOBJ*2]; // 表示スプライト用スタック
|
|
23 static unsigned int sp_counter;
|
|
24 static Bool flag_spriteInited = FALSE; // スプライトロードフラグ
|
|
25
|
|
26 static TEXTURE *font_tex;
|
|
27
|
|
28 static void
|
|
29 gFont_Init_Png(char *texname)
|
|
30 {
|
|
31 if (!(font_tex = read_png_file(texname))) {
|
|
32 fprintf(stderr,
|
|
33 "cannot creat texture - gFont_Init_Png().\n");
|
|
34 fflush(stderr);
|
|
35 exit(EXIT_FAILURE);
|
|
36 }
|
|
37
|
|
38 if (ps2util_tex_Set(font_tex) == -1) {
|
|
39 fprintf(stderr,
|
|
40 "cannot set texture - gFont_Init_Png().\n");
|
|
41 fflush(stderr);
|
|
42 exit(EXIT_FAILURE);
|
|
43 }
|
|
44 }
|
|
45
|
|
46 static void
|
|
47 gFont_Create()
|
|
48 {
|
|
49 int i;
|
|
50
|
|
51 for (i=0; i<DEFOBJ; i++) {
|
|
52 if (ps2util_sprite_Create(&sp[i], font_tex) == -1) {
|
|
53 fprintf(stderr,
|
|
54 "cannot create sprite - gFont_Create()\n");
|
|
55 fflush(stderr);
|
|
56 exit(EXIT_FAILURE);
|
|
57 }
|
|
58 ps2util_sprite_Unuse_alpha(&sp[i]);
|
|
59 }
|
|
60 flag_spriteInited = TRUE;
|
|
61 }
|
|
62
|
|
63 static void
|
|
64 gFont_DefSprite(int number, int x, int y, int w, int h)
|
|
65 {
|
|
66 sptable[number].tx = x;
|
|
67 sptable[number].ty = y;
|
|
68 sptable[number].tw = w;
|
|
69 sptable[number].th = h;
|
|
70 }
|
|
71
|
|
72 void
|
|
73 gFont_Init()
|
|
74 {
|
|
75 int i, j;
|
|
76 int number = 0;
|
|
77
|
|
78 gFont_Init_Png("img/font.png");
|
|
79 gFont_Create(); // スプライト生成
|
|
80
|
|
81 for (i=0; i<7; i++) {
|
|
82 for (j=0; j<15; j++) {
|
|
83 gFont_DefSprite(number, j*17, i*34, 17, 34);
|
|
84 number++;
|
|
85 }
|
|
86 }
|
|
87 }
|
|
88
|
|
89
|
|
90 static void
|
|
91 gFont_PutSprite(int number, int x, int y)
|
|
92 {
|
|
93 ps2utilSprite *p = &sp[sp_counter];
|
|
94
|
|
95 ps2util_sprite_Set_basicAttribute(
|
|
96 p,
|
|
97 (ushort)x, (ushort)y,
|
|
98 (ushort)sptable[number].tw*1.5, (ushort)sptable[number].th*1.5,
|
|
99 (ushort)sptable[number].tx, (ushort)sptable[number].ty,
|
|
100 (ushort)sptable[number].tw, (ushort)sptable[number].th,
|
|
101 SPRITE_PRIO_FOREGROUND);
|
|
102
|
|
103 ps2util_sprite_Request(p);
|
|
104 sp_counter++;
|
|
105 }
|
|
106
|
|
107
|
|
108 static void
|
|
109 gFont_Clear()
|
|
110 {
|
|
111 int i;
|
|
112
|
|
113 for (i=0; i<DEFOBJ; i++) {
|
|
114 sprite_disappear(&sp[i].attribute);
|
|
115 }
|
|
116 sp_counter = 0;
|
|
117 }
|
|
118
|
|
119 void
|
|
120 gFont_Draw_Reset()
|
|
121 {
|
|
122 if (flag_spriteInited == TRUE) {
|
|
123 gFont_Clear();
|
|
124 }
|
|
125 }
|
|
126
|
|
127 static int
|
|
128 get_number_char(char a)
|
|
129 {
|
|
130 return (int)a-32;
|
|
131 }
|
|
132
|
|
133 /*
|
|
134 * str をスプライド表示
|
|
135 */
|
|
136 void
|
|
137 gFont_SetString(char *str, int x, int y)
|
|
138 {
|
|
139 int number;
|
|
140
|
|
141 while (*str != '\0') {
|
|
142 number = get_number_char(*str);
|
|
143 gFont_PutSprite(number, x, y);
|
|
144 str++;
|
|
145 x += (int)CHAR_W_SIZE*1.5;
|
|
146 }
|
|
147 }
|
|
148
|
|
149 /*
|
|
150 * numを文字列に変換してSetStringに渡す
|
|
151 */
|
|
152 void
|
|
153 gFont_SetStringInt(int num, int x, int y)
|
|
154 {
|
|
155 char bufp[256];
|
|
156
|
|
157 snprintf(bufp, 256, "%d", num);
|
|
158 gFont_SetString(bufp, x, y);
|
|
159 }
|
|
160
|
|
161 void
|
|
162 gFont_SetFont_OP()
|
|
163 {
|
|
164 }
|
|
165
|
|
166
|
|
167
|
|
168
|
|
169
|