Mercurial > hg > old > magoroku_racing.bad
view schedule.c @ 58:1cccf6d964b7
*** empty log message ***
author | gongo |
---|---|
date | Thu, 09 Nov 2006 01:43:07 +0000 |
parents | 8cef655f3bf9 |
children | 4f977a556ba7 |
line wrap: on
line source
/* * $Id$ */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "libps2.h" #include "ps2util.h" #include "field.h" #include "car.h" #include "gSprite.h" #include "gFont.h" #include "game.h" #include "controler.h" #include "camera.h" #include "light.h" #include "title_scene.h" #include "game_time.h" #include "schedule.h" #define MAXCAR 3 // 選択可能機体 #define MAXFIELD 2 // 選択可能コース #define MAXRAP 3 // ラップ数 #define SP_SEL_CAR 50 #define SP_SEL_COURSE 80 /* --- car.c --- */ extern void car_update(CarPtr); /* --- carNode.c */ extern void carNode_append(CarPtr); extern void carNode_draw(); extern void carNode_destroy(); /* --- fielc.c */ extern void field_update(CarPtr); /* --- mytype.c --- */ extern void wait_init(); extern Bool wait(double); extern void time_RaceStart(); extern double time_RaceTime(); /* --- linda.c --- */ extern void linda_env_init(); /* timer */ static int start_time,time_count; static int RUNNIG=0; char raptime[10]; static int ranking = 0; static LIGHT l; static int i=0; static void *sche_func_assumption; static void *sche_func = &sche_game_init; static int change_state = 0; static void set_schedule_assumption(void *_func) { sche_func_assumption = _func; change_state = 1; } static void set_schedule() { sche_func = sche_func_assumption; change_state = 0; } static void graphic_init() { gSprite_Init(); // グラフィック関連の初期化 gFont_Init(); // フォント関連の初期化 } static void play_init() { game.jiki = car_init(game.car_id); carNode_append(game.jiki); field_init(game.course_id); } static void game_env_init() { game.car_id = 1; game.course_id = 1; game.camera_type = 0; game.rap = 1; game.jiki = NULL; ranking = 0; wait_init(); linda_env_init(); } void sche_game_init() { game_env_init(); graphic_init(); camera_init(); #ifdef LINDA set_schedule_assumption(sche_game_wait); #else set_schedule_assumption(sche_game_opening); #endif } /** * 通信対戦専用 * 全ユーザが接続するまで待つ */ static void sche_game_wait() { gFont_SetString("WAITING...", 200, 100); if (game.linda_exec() == TRUE) set_schedule_assumption(sche_game_wait_ready); } /** * 通信対戦専用 * 全ユーザの接続を確認したら呼び出す */ static void sche_game_wait_ready() { gFont_SetString("CONNECT OK!!", 170, 300); if (game.play_id == 1) { gFont_SetString(" PUSH START ", 170, 400); if (pad.st != 1) { goto WAIT_READY; } } if (game.linda_exec() == TRUE) set_schedule_assumption(sche_game_opening); WAIT_READY: return; } void sche_game_opening() { static int blink_count = 0; if (game.play_id==1){ if (blink_count < 35) { gFont_SetString("PUSH START !!", 170, 380); } blink_count = (blink_count > 70) ? 0 : blink_count + 1; if (pad.st != 1) { goto OPENING; } } if (game.linda_exec() == TRUE) set_schedule_assumption(sche_game_select_car); OPENING: return; /* if (game.play_id == 1) { if (title_scene() < 0){ } } else if (game.play_id == 2) { if (i==0){ title_init_call(); i=1; } } */ } void sche_game_select_car() { if (i==1){ title_finish_call(); i=2; } gSprite_PutSpriteEx(SP_SEL_CAR+game.car_id, 190, 200, 1.5, 1.5); gSprite_PutSprite(24, 460, 300); gSprite_PutSprite(25, 120, 300); gFont_SetString("SELECT CAR", 180, 50); if (pad.right == 1) { game.car_id = (game.car_id > MAXCAR-1) ? 1 : game.car_id + 1; } if (pad.left == 1) { game.car_id = (game.car_id < 2) ? MAXCAR : game.car_id - 1; } if (game.play_id == 1) if (pad.circle != 1) { goto SELECT_CAR; } if (game.linda_exec() == TRUE) set_schedule_assumption(sche_game_select_course); SELECT_CAR: return; } void sche_game_select_course() { gSprite_PutSpriteEx(SP_SEL_COURSE+game.course_id, 190, 200, 1.7, 1.8); gSprite_PutSprite(24, 460, 300); gSprite_PutSprite(25, 120, 300); gFont_SetString("SELECT COURSE", 150, 50); if (game.play_id == 1) { if (pad.right == 1) { game.course_id = (game.course_id > MAXFIELD-1) ? 1 : game.course_id + 1; game.linda_exec(); goto SELECT_COURSE; } if (pad.left == 1) { game.course_id = (game.course_id < 2) ? MAXFIELD : game.course_id - 1; game.linda_exec(); goto SELECT_COURSE; } if (pad.circle != 1) { goto SELECT_COURSE; } } if (game.linda_exec() == TRUE) set_schedule_assumption(sche_game_ready); SELECT_COURSE: return; } void sche_game_ready() { static int blink_count = 0; gSprite_PutSprite(27+game.play_id,265,10); gSprite_PutSpriteEx(SP_SEL_CAR+game.car_id, 50, 120, 1.5, 1.5); gSprite_PutSpriteEx(SP_SEL_COURSE+game.course_id, 340, 120, 1.7, 1.8); /* 点滅 */ if (blink_count < 35) { gFont_SetString("GAME START !!", 170, 380); } blink_count = (blink_count > 70) ? 0 : blink_count + 1; if (game.linda_exec() == TRUE) set_schedule_assumption(sche_game_main_init); /* if (pad.st == 1) { set_schedule_assumption(sche_game_main_init); } if (pad.cross > 0) { set_schedule_assumption(sche_game_select_car); } */ } extern FILE *main_fp; void sche_game_main_init() { if (!game.jiki) play_init(); RUNNIG=0; set_schedule_assumption(sche_game_main); } void sche_game_main() { /** begin: dispaly RAP TIME **/ if(RUNNIG==0){ start_time = game_time_get_msec(); RUNNIG=1; } time_count = game_time_get_msec() - start_time; game_time_set_raptime(raptime,time_count); gFont_SetString("TIME",300,20); gFont_SetString(raptime,400,20); /** end: dispaly RAP TIME **/ light_init(&l); set_light(&l); car_update(game.jiki); field_update(game.jiki); camera_update(game.jiki->body->transfer); carNode_draw(); gFont_SetStringInt(game.rap, 50, 100); /* スピードメーター */ gSprite_DefSprite(23, 1, 1,(int)(106.0*(game.jiki->speed/game.jiki->speed_max)), 34); gSprite_PutSprite(23, 400, 400); /* km/h */ gSprite_PutSprite(26, 470, 350); /* Rap */ gSprite_PutSprite(27, 80, 100); if (game.rap > MAXRAP) { ranking = 1; set_schedule_assumption(sche_game_main_goal); } gFont_SetStringInt((int)(100.0*game.jiki->speed), 380, 350); if ((pad.right > 0) && ((game.jiki->speed != 0) || (pad.circle > 0))) { car_swerve(game.jiki, 1); } if ((pad.left > 0) && ((game.jiki->speed != 0) || (pad.circle > 0))) { car_swerve(game.jiki, -1); } if (pad.circle > 0) { car_accelerate(game.jiki, 1); } if (pad.cross > 0) { car_accelerate(game.jiki, -1); } game.linda_exec(); if (pad.r1 == 1) { game.camera_type = !game.camera_type; } if (pad.st == 1) { set_schedule_assumption(sche_game_main_pause); } } void sche_game_main_pause() { static int select = 0; field_update(game.jiki); carNode_draw(); if (game.play_id == 1) { /* 選択マーク */ gSprite_PutSprite(17, 100, 190+select*100); gFont_SetString("BACK TO GAME", 200, 200); gFont_SetString("GO TO TITLE", 200, 300); } else { gFont_SetString("Pause ...", 200, 200); } if (pad.circle == 1) { if (select == 0) { set_schedule_assumption(sche_game_main); } else { set_schedule_assumption(sche_game_main_finish); } } else if (pad.st == 1) { set_schedule_assumption(sche_game_main); } else if (pad.up == 1 || pad.down == 1) { select = !select; } } void sche_game_main_goal() { /** dispaly TOTAL TIME **/ game_time_set_raptime(raptime,time_count); gFont_SetString("TOTAL TIME",150,20); gFont_SetString(raptime,400,20); gFont_SetString("GOAL !!", 220, 150); #ifdef LINDA if (ranking == 1) gFont_SetString("You WIN!!", 200, 250); else gFont_SetString("You Lose...", 200, 250); #endif car_update(game.jiki); field_update(game.jiki); carNode_draw(); camera_update(game.jiki->body->transfer); if (pad.st == 1) { set_schedule_assumption(sche_game_main_finish); } } void sche_game_main_finish() { field_destroy(); carNode_destroy(); game_env_init(); set_schedule_assumption(sche_game_main_finish2); } void sche_game_main_finish2() { gFont_SetString("GAME OVER ...", 200, 200); if (pad.st == 1) { set_schedule_assumption(sche_game_opening); } } void schedule() { sche_func(); if (linda_update(change_state) == TRUE) set_schedule(); wait_sync(); swap_dbuff(); sjoy_poll(); ps2util_sprite_Draw(); gSprite_Draw_Reset(); gFont_Draw_Reset(); }