Mercurial > hg > old > magoroku_racing.bad
view gFont.c @ 21:447281fe6845
*** empty log message ***
author | gongo |
---|---|
date | Sat, 04 Nov 2006 12:32:49 +0000 |
parents | 3780d1b2943e |
children | ce9ef7dcf2f0 |
line wrap: on
line source
/* * $Id$ * * フォント表示。といっても結局スプライトです。 * gSprite.c と一緒にしてもよかったんだけど * 文字は文字でいろいろあるので分けてみる */ #include <stdio.h> #include <stdlib.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]; 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() { }