#include "StageEditor_ClearCondition.h" #include "StageEditor_TopButton.h" #include "StageData.h" #include "ToolLib.h" // クリア条件リストの座標と幅と高さ #define LIST_X (4) #define LIST_Y (TOPBUTTON_Y + TOPBUTTON_H + TOOL_WINDOW_NAME_HEIGHT + 4) #define LIST_W (256) #define LIST_H (32) // クリア条件情報操作ボタンの基準座標 #define BUTTONS_X (0) #define BUTTONS_Y (4 + g_CCEData.ButtonSpace.SpaceStart) // クリア条件情報操作ボタンを配置する範囲の高さ #define BUTTONS_H (42) // クリア条件編集情報 typedef struct _SClearConditionData { // スペース管理情報ハンドル int TSpaceManage; // 編集モード切替ボタン部分用のスペース情報 SToolSpace TopSpace; // クリア条件リスト表示用ウインドウのハンドル int ListTWindow; // クリア条件リストのハンドル int TList; // 操作ボタン部分用のスペース情報 SToolSpace ButtonSpace; // 倒す必要がある敵の数操作用ボタン int CharaCountPlusTButton; int CharaCountMinusTButton; // 倒す必要がある敵の番号操作用ボタン int CharaNoPlusTButton; int CharaNoMinusTButton; } SClearConditionData; SClearConditionData g_CCEData; // クリア条件の表示情報をセットアップする // 戻り値 : 処理が正常に終了したかどうか(true:正常に終了した false:エラーが発生した) static bool StageEditor_ClearCondition_SetupInfo( void ); // クリア条件情報編集処理の初期化を行う // 戻り値 : 処理が正常に終了したかどうか(true:正常に終了した false:エラーが発生した) bool StageEditor_ClearCondition_Initialize( void ) { int VisibleHandle; // スペース管理情報の作成 g_CCEData.TSpaceManage = ToolSpaceManage_Create( SCREEN_HEIGHT ); if( g_CCEData.TSpaceManage == -1 ) { return false; } // 編集モード切替ボタン部分用のスペース情報を追加 if( !ToolSpaceManage_AddSpace( g_CCEData.TSpaceManage, &g_CCEData.TopSpace, TOPSPACE, true ) ) { return false; } // クリア条件リスト表示用ウインドウの作成 g_CCEData.ListTWindow = ToolWindow_Create( g_CCEData.TSpaceManage, false, true, false, "クリア条件一覧", LIST_X, LIST_Y, LIST_W, LIST_H, LIST_W, LIST_H ); if( g_CCEData.ListTWindow == -1 ) { return false; } // クリア条件リストの作成 g_CCEData.TList = ToolList_Create(); if( g_CCEData.TList == -1 ) { return false; } // クリア条件リストを初期化 ToolList_Initialize( g_CCEData.TList, g_CCEData.ListTWindow ); // 操作ボタン部分用のスペース情報を追加 if( !ToolSpaceManage_AddSpace( g_CCEData.TSpaceManage, &g_CCEData.ButtonSpace, BUTTONS_H, true ) ) { return false; } // 倒す必要がある敵の数操作用ボタンの作成 g_CCEData.CharaCountPlusTButton = ToolButton_Create( false, "キャラ数+", BUTTONS_X + 4, BUTTONS_Y + 0, 70, 20 ); if( g_CCEData.CharaCountPlusTButton == -1 ) { return false; } g_CCEData.CharaCountMinusTButton = ToolButton_Create( false, "キャラ数-", BUTTONS_X + 74, BUTTONS_Y + 0, 70, 20 ); if( g_CCEData.CharaCountMinusTButton == -1 ) { return false; } // 倒す必要がある敵の番号操作用ボタンの作成 g_CCEData.CharaNoPlusTButton = ToolButton_Create( false, "キャラNO+", BUTTONS_X + 4, BUTTONS_Y + 26, 70, 20 ); if( g_CCEData.CharaNoPlusTButton == -1 ) { return false; } g_CCEData.CharaNoMinusTButton = ToolButton_Create( false, "キャラNO-", BUTTONS_X + 74, BUTTONS_Y + 26, 70, 20 ); if( g_CCEData.CharaNoMinusTButton == -1 ) { return false; } // クリア条件編集処理用の表示状態情報ハンドルを取得 VisibleHandle = StageEditor_TopButton_GetEditModeVisibleHandle( EEditMode_ClearConditionEdit ); // クリア条件編集で使用するウインドウやボタンと表示状態情報ハンドルを関連付ける ToolWindow_SetVisibleHandle( g_CCEData.ListTWindow, VisibleHandle ); ToolButton_SetVisibleHandle( g_CCEData.CharaCountPlusTButton, VisibleHandle ); ToolButton_SetVisibleHandle( g_CCEData.CharaCountMinusTButton, VisibleHandle ); ToolButton_SetVisibleHandle( g_CCEData.CharaNoPlusTButton, VisibleHandle ); ToolButton_SetVisibleHandle( g_CCEData.CharaNoMinusTButton, VisibleHandle ); // 正常終了 return true; } // クリア条件情報編集処理のステージ読み込み後の初期化処理を行う // 戻り値 : 処理が正常に終了したかどうか(true:正常に終了した false:エラーが発生した) bool StageEditor_ClearCondition_StageLoadInitialize( void ) { // クリア条件の表示情報を更新する return StageEditor_ClearCondition_SetupInfo(); } // クリア条件情報編集処理の状態推移処理を行う // 戻り値 : 処理が正常に終了したかどうか(true:正常に終了した false:エラーが発生した) bool StageEditor_ClearCondition_Step( void ) { // クリア条件リストの状態が変化した場合は変更を反映する if( ToolList_GetChange( g_CCEData.TList, true ) ) { g_StageData.Header.StageClearCondition = ( EStageClearCondition )( ToolList_GetSelectIndex( g_CCEData.TList ) ); // クリア条件の表示情報を更新する if( !StageEditor_ClearCondition_SetupInfo() ) { return false; } } // 倒す必要がある敵の数操作ボタンが押された場合は数を変更する if( ToolButton_GetClick( g_CCEData.CharaCountPlusTButton, true ) ) { g_StageData.Header.KillCharaNum++; // クリア条件の表示情報を更新する if( !StageEditor_ClearCondition_SetupInfo() ) { return false; } } if( ToolButton_GetClick( g_CCEData.CharaCountMinusTButton, true ) ) { if( g_StageData.Header.KillCharaNum > 0 ) { g_StageData.Header.KillCharaNum--; } // クリア条件の表示情報を更新する if( !StageEditor_ClearCondition_SetupInfo() ) { return false; } } // 倒す必要がある敵の番号操作ボタンが押された場合は番号を変更する if( ToolButton_GetClick( g_CCEData.CharaNoPlusTButton, true ) ) { g_StageData.Header.KillTargetChara++; if( g_StageData.Header.KillTargetChara == g_StageData.Header.CharaInfoNum ) { g_StageData.Header.KillTargetChara = 0; } // クリア条件の表示情報を更新する if( !StageEditor_ClearCondition_SetupInfo() ) { return false; } } if( ToolButton_GetClick( g_CCEData.CharaNoMinusTButton, true ) ) { g_StageData.Header.KillTargetChara--; if( g_StageData.Header.KillTargetChara < 0 ) { g_StageData.Header.KillTargetChara = g_StageData.Header.CharaInfoNum - 1; } // クリア条件の表示情報を更新する if( !StageEditor_ClearCondition_SetupInfo() ) { return false; } } // 正常終了 return true; } // クリア条件の表示情報をセットアップする // 戻り値 : 処理が正常に終了したかどうか(true:正常に終了した false:エラーが発生した) static bool StageEditor_ClearCondition_SetupInfo( void ) { // クリア条件リストを初期化する ToolList_Initialize( g_CCEData.TList, g_CCEData.ListTWindow ); // リストにクリア条件を追加する if( !ToolList_AddObj( g_CCEData.TList, "%d 体キャラクターを倒す", g_StageData.Header.KillCharaNum ) ) { return false; } if( !ToolList_AddObj( g_CCEData.TList, "キャラクターNo:%d を倒す", g_StageData.Header.KillTargetChara)) { return false; } // 現在のクリア条件の行を選択状態にする ToolList_SetSelectIndex( g_CCEData.TList, g_StageData.Header.StageClearCondition ); // 正常終了 return true; }