main00.c 2.9 KB
/*============================================================================

		NINTENDO64 TECHNICAL SUPPORT CENTER 
		
		    NINTENDO64 SAMPLE PROGRAM 2

		Copyright (C) 1997, NINTENDO Co,Ltd.

============================================================================*/

#include <ultra64.h>
#include <PR/ramrom.h>
#include <assert.h>

#include "def.h"
#include "vram.h"
#include "segment.h"
#include "message.h"
#include "nnsched.h"
#include "main.h"
#include "audio.h"
#include "controller.h"
#include "graphic.h"


ModelMtx mtx_cont[4];


/*--------------------------
  main00 test stage

  return: next stage no
--------------------------*/
int main00(NNSched* sched)
{

  OSMesgQueue msgQ;
  OSMesg      msgbuf[MAX_MESGS];
  NNScClient client;

  u32  pad_no = 0;
  u32  endFlag = 0;

  /* create message queue for VI retrace */
  osCreateMesgQueue(&msgQ, msgbuf, MAX_MESGS);

  /* add client to shceduler */
  nnScAddClient(sched, &client, &msgQ);



  /* 変数の初期化 */
  mtx_cont[0].pos_x = 0.0;
  mtx_cont[0].pos_y = 0.0;
  mtx_cont[0].pos_z = 400.0;
  mtx_cont[0].size =  2.0;
  mtx_cont[0].rot_x = 0.0;
  mtx_cont[0].rot_y = 0.0;
  mtx_cont[0].rot_z = 0.0;


  /* ディスプレイリストの読み込み */
  auRomRead((u32)_lodmodelSegmentRomStart, gfx_dlist_buf[0],
	    (u32)_lodmodelSegmentRomEnd - (u32)_lodmodelSegmentRomStart);

  /* シーケンスデータの読み込み */
  auSeqPlayerSetFile(1,0);
  auSeqPlayerPlay(1);

  /* 接続されているコントローラの数だけ、コントローラを表示する */
  graphic_no = GFX_00;




  while(!endFlag){
    (void) osRecvMesg(&msgQ, NULL, OS_MESG_BLOCK);

    /*
       オブジェクトの移動
       視点から離れる方へオブジェクトを移動する
       視界から消えたら元の位置に戻す
     */
    mtx_cont[0].pos_z -=5.0;
    if(mtx_cont[0].pos_z <( 600-2000)){
      mtx_cont[0].pos_z = 600.0;
    }

    /* 十字キー上 */
    if(controllerdata_ptr[0]->button & U_JPAD){
      mtx_cont[0].pos_z-=10.0;
    }
    
    /* 十字キー下 */
    if(controllerdata_ptr[0]->button & D_JPAD){
      mtx_cont[0].pos_z+=10.0;
      
    }

    /* 十字キー左 */
    if(controllerdata_ptr[0]->button & L_JPAD){
      mtx_cont[0].pos_x-=1.0;
    }
    
    /* 十字キー右 */
    if(controllerdata_ptr[0]->button & R_JPAD){
      mtx_cont[0].pos_x+=1.0;
    }
    
    /* START BUTTON */
    if(controllerdataTriger[0].button & START_BUTTON){
	endFlag++;
    }

    /* 3Dスティック */
    mtx_cont[0].rot_x += controllerdata_ptr[pad_no]->stick_y/8;
    mtx_cont[0].rot_y += controllerdata_ptr[pad_no]->stick_x/8;
    mtx_cont[0].rot_x += 1.0;
    mtx_cont[0].rot_y += 1.0;


  }


  /* シーケンスの停止 */
  auSeqPlayerStop(1);

  graphic_no = GFX_NULL;


  /* グラフィックタスク・オーディオタスク終了待ち */
  while((auSeqPlayerState(0) != AL_STOPPED) || (pendingGFX != 0)){
    (void) osRecvMesg(&msgQ, NULL, OS_MESG_BLOCK);
  };

  /* remove client to shceduler */
  nnScRemoveClient(sched, &client);
  
  /* exit label */
  return MAIN_00;
}