Mercurial > hg > old > magoroku_racing
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() +{ +}