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()
{
}