Mercurial > hg > old > magoroku_racing
view gFont.cc @ 122:5219bf3d5e71
title_draw
author | e085768 |
---|---|
date | Mon, 27 Jun 2011 19:44:46 +0900 |
parents | f2e2460b4011 |
children | 4f50f5a3b363 |
line wrap: on
line source
/* * $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(const 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].mx = x; sptable[number].my = y; sptable[number].w = w; sptable[number].h = h; } void DefSprite(int number, const char *name, float w, float h, int color, OBJECT *obj) { SpriteTable *m = &sptable[number]; m->w = w; m->h = h; m->color = (color & 32); m->mx = w / 2; m->my = h / 2; m->tex_w = power_of_two(m->w); m->tex_h = power_of_two(m->h); m->texture = (int *)name; } 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(const 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() { }