/************************************************************
  Ninja Sample
  COPYRIGHT (C) SEGA ENTERPRISES, LTD.

  タイトル ： スプライトの表示
  編集履歴 ： 98-04-20 製作開始
              98-06-18 SET5対応
              98-07-13 ｐａｕｓｅ機能(Fadeを使用)、
                       焼付き防止追加
              98-09-16 テクスチャバッファ確保のサイズ変更
************************************************************/
#include <shinobi.h>
#include <njdef.h>

void main(void)
{
	njSetBorderColor( 0x00000000 );
        njUserInit();
        while (njUserMain() == NJD_USER_CONTINUE) {
                njWaitVSync();
        }
        njUserExit();
}

#define MAX_VERTEXES 10000
#define SPRITE_Z -1500.0F
/*旧型のメイプルボックス用！*/
#define OLD_PAD pdSetMode(PDD_MODE_TYPE_A);

NJS_TEXNAME texname[1] ;
NJS_SPRITE sprite;
NJS_TEXLIST texlist = {texname, 1};
static NJS_VERTEX_BUF *vbuf;
NJS_TEXANIM anim[] = {{128, 128, 64, 64, 0, 0, 255, 255, 0, 0}};
NJS_TEXMEMLIST  texmemlist[1];

/*----------------------------------------------------------------------
           初期化
----------------------------------------------------------------------*/
void njUserInit(void)
{
    /* システムの初期化 */
    sbInitSystem(NJD_RESOLUTION_320x240_NTSCNI, NJD_FRAMEBUFFER_MODE_RGB565, 1);
    /*vertexバッファの確保*/
    vbuf = (NJS_VERTEX_BUF *)syMalloc(sizeof (NJS_VERTEX_BUF) * MAX_VERTEXES);
    /* 背景色の設定 */
    njSetBackColor(ARGB(0, 0, 0, 0), ARGB(0, 0, 0, 0), ARGB(0, 0, 0, 192));
    /* テクスチャバッファの確保 */
    njInitTextureBuffer((Sint8 *)vbuf,0x800*10);
    /* 頂点格納バッファの確保 */
    njInitVertexBuffer(MAX_VERTEXES * 64 / 4, 0, MAX_VERTEXES * 64 / 4, 0, 0);
	njInitPrint( NULL, 0, NJD_TEXFMT_ARGB_1555 );

    njInitTexture(texmemlist, 1);
    /*一枚のテクスチャーを設定*/
    njSetTextureName(&texname[0], "frog.pvr", 0, NJD_TEXATTR_TYPE_FILE | NJD_TEXATTR_GLOBALINDEX);
    njLoadTexture(&texlist);
    njSetTexture(&texlist);
    njSetTextureNum(0);

    /*焼付き防止*/
    njPrintColor(0xffc0c0c0);
}

/*----------------------------------------------------------------------
         メイン
----------------------------------------------------------------------*/
Sint32 njUserMain(void)
{
    static PDS_PERIPHERAL *input;
    static Bool pause = FALSE;  /*flag for pausing*/
    static float fade_val = 0.5F;   /*value to fade*/
    Uint32 fade_col = 0xffc0c0c0;   /*fade color*/
    static Uint32 print_col = 0x11c00000;

    input = (PDS_PERIPHERAL *) pdGetPeripheral(PDD_PORT_A0);   /*get key state*/
    /*checking key*/
    if (input->press & PDD_DGT_ST){
        pause = !pause;
    }
    njPrintSize(8);
    njPrintColor(0xffc0c0c0);
    /* サンプル名の表示 */
    njPrintC(NJM_LOCATION(10, 5), "Ninja Sample SPRITE");

    if(pause) {     /*ポーズ中ならフェードしていく*/
        njPrintSize(20);
        njPrintColor(print_col);
        njPrintC(NJM_LOCATION(6, 5), "PAUSE");
        njExecuteFade(fade_val);
        njFadeEnable();
        if (print_col < 0xffc0c0c0) {   /*文字色の更新*/
            print_col += 0x03000000;
        }
        if (fade_val < 0.7F) {         /*フェード値の変更*/
            fade_val += 0.01F;
        }
    } else {
        /*文字size/色とフェード値を戻す*/
        print_col = 0x11c00000;
        fade_val = 0.F;
        njFadeDisable();

        sprite.tlist = &texlist;
        sprite.ang = 0x0000;
        sprite.sx = 1.0F;
        sprite.sy = 1.0F;
        sprite.p.x = 160.0F;
        sprite.p.y = 120.0F;
        sprite.tanim = anim;
    }
    njDrawSprite2D(&sprite, 0, SPRITE_Z, NJD_SPRITE_ANGLE );

    return NJD_USER_CONTINUE;
}

/*----------------------------------------------------------------------
         終了処理
----------------------------------------------------------------------*/
void njUserExit(void)
{
    /* テクスチャの開放 */
	njExitPrint();
    njExitTexture();
    /*vertexバッファの開放*/
    syFree(vbuf);
    /* システムの終了 */
    sbExitSystem();
}
