/*****************************************************************************/
/* Disp for WonderWitch                                                      */
/* ディスプレイ関連を扱うクラス                                              */
/*****************************************************************************/

#ifndef _Disp_h_INCLUDED_
#define _Disp_h_INCLUDED_

typedef struct _Disp * Disp;

#include <stdio.h>
#include <sys/disp.h>
#include <sys/key.h>

#define DISP_DISPLAY_WIDTH  LCD_PIXEL_WIDTH
#define DISP_DISPLAY_HEIGHT LCD_PIXEL_HEIGHT
#define DISP_PICTURE_TICS_X 8
#define DISP_PICTURE_TICS_Y 8

#define DISP_BAR_WIDTH  DISP_DISPLAY_WIDTH
#define DISP_BAR_HEIGHT DISP_PICTURE_TICS_Y

#define DISP_GAME_WIDTH  DISP_DISPLAY_WIDTH
#define DISP_GAME_HEIGHT (DISP_DISPLAY_HEIGHT - DISP_BAR_HEIGHT)

#define DISP_GAME_X 0
#define DISP_GAME_Y 0

#define DISP_BAR_X 0
#define DISP_BAR_Y (DISP_GAME_Y + DISP_GAME_HEIGHT)

#define DISP_BAR_CHARACTER_X (DISP_BAR_X / DISP_PICTURE_TICS_X)
#define DISP_BAR_CHARACTER_Y (DISP_BAR_Y / DISP_PICTURE_TICS_Y)
#define DISP_BAR_CHARACTER_WIDTH  (DISP_BAR_WIDTH  / DISP_PICTURE_TICS_X)
#define DISP_BAR_CHARACTER_HEIGHT (DISP_BAR_HEIGHT / DISP_PICTURE_TICS_Y)

#define DISP_GAME_CHARACTER_X (DISP_GAME_X / DISP_PICTURE_TICS_X)
#define DISP_GAME_CHARACTER_Y (DISP_GAME_Y / DISP_PICTURE_TICS_Y)
#define DISP_GAME_CHARACTER_WIDTH  (DISP_GAME_WIDTH  / DISP_PICTURE_TICS_X)
#define DISP_GAME_CHARACTER_HEIGHT (DISP_GAME_HEIGHT / DISP_PICTURE_TICS_Y)

#define DISP_TEXT_X 0
#define DISP_TEXT_Y 0
#define DISP_TEXT_WIDTH  TEXT_SCREEN_WIDTH
#define DISP_TEXT_HEIGHT TEXT_SCREEN_HEIGHT

#define DISP_SCREEN_WIDTH  SCREEN_PIXEL_WIDTH
#define DISP_SCREEN_HEIGHT SCREEN_PIXEL_HEIGHT

#define DISP_SCREEN_CHARACTER_WIDTH  SCREEN_CHAR_WIDTH
#define DISP_SCREEN_CHARACTER_HEIGHT SCREEN_CHAR_HEIGHT

#define DISP_BUTTON_START KEY_START
#define DISP_BUTTON_A     KEY_A
#define DISP_BUTTON_B     KEY_B
#define DISP_BUTTON_UP    KEY_UP1
#define DISP_BUTTON_RIGHT KEY_RIGHT1
#define DISP_BUTTON_DOWN  KEY_DOWN1
#define DISP_BUTTON_LEFT  KEY_LEFT1

int Disp_GetRollX(Disp disp);
int Disp_GetRollY(Disp disp);

/*---------------------------------------------------------------------------*/
/* オブジェクトの作成                                                        */
/*---------------------------------------------------------------------------*/

Disp Disp_Create(Disp disp);

/*---------------------------------------------------------------------------*/
/* オブジェクトの削除                                                        */
/*---------------------------------------------------------------------------*/

Disp Disp_Destroy(Disp disp);

/*---------------------------------------------------------------------------*/
/* 使用可能なスプライト番号を取得する                                        */
/*---------------------------------------------------------------------------*/

int Disp_GetSpriteNumber(Disp disp);

/*---------------------------------------------------------------------------*/
/* スプライト番号を返却する                                                  */
/*---------------------------------------------------------------------------*/

int Disp_ReturnSpriteNumber(Disp disp, int number);

/*---------------------------------------------------------------------------*/
/* 使用可能なキャラクター番号を取得する                                      */
/*---------------------------------------------------------------------------*/

int Disp_GetCharacterNumber(Disp disp);

/*---------------------------------------------------------------------------*/
/* キャラクター番号を返却する                                                */
/*---------------------------------------------------------------------------*/

int Disp_ReturnCharacterNumber(Disp disp, int number);

/*---------------------------------------------------------------------------*/
/* キー入力                                                                  */
/*---------------------------------------------------------------------------*/

int Disp_GetButtonStatus(Disp disp);

/*---------------------------------------------------------------------------*/
/* 指定した座標を画面の中央にもってくる                                      */
/*---------------------------------------------------------------------------*/

int Disp_PutPointAtCenterOfScreen(Disp disp, int x, int y);

/*---------------------------------------------------------------------------*/
/* グラフィックスクリーンに切替え                                            */
/*---------------------------------------------------------------------------*/

int Disp_GraphicScreen(Disp disp);

/*---------------------------------------------------------------------------*/
/* テキストスクリーンに切替え                                                */
/*---------------------------------------------------------------------------*/

int Disp_TextScreen(Disp disp);

/*---------------------------------------------------------------------------*/
/* テキストスクリーンクリア                                                  */
/*---------------------------------------------------------------------------*/

int Disp_ClearTextScreen(Disp disp);

/*---------------------------------------------------------------------------*/
/* 文字描画                                                                  */
/*---------------------------------------------------------------------------*/

int Disp_PutCharacter(Disp disp, int x, int y, unsigned int c);

/*---------------------------------------------------------------------------*/
/* 文字列描画                                                                */
/*---------------------------------------------------------------------------*/

int Disp_PutString(Disp disp, int x, int y, char * s);

/*---------------------------------------------------------------------------*/
/* 数値描画                                                                  */
/*---------------------------------------------------------------------------*/

int Disp_PutNumber(Disp disp, int x, int y, int len, int number);

/*---------------------------------------------------------------------------*/
/*                                                                           */
/*---------------------------------------------------------------------------*/

int Disp_ClearBar(Disp disp);

/*---------------------------------------------------------------------------*/
/*                                                                           */
/*---------------------------------------------------------------------------*/

int Disp_PrintScore(Disp disp, int hi_score, int score);

#endif

/*****************************************************************************/
/* End of File.                                                              */
/*****************************************************************************/
