#include "AnimationEditor_AnimSelect.h" #include "AnimationEditor_EventEdit.h" #include "AnimationEditor_CharaSelect.h" #include "AnimationEditor.h" #include "ToolLib.h" // 「戻る」ボタンの位置 #define BACK_BUTTON_X (0) #define BACK_BUTTON_Y (4 + TOPSPACE + g_ASData.TopSpace.SpaceStart) // 「戻る」ボタンを表示する範囲の高さ #define BACK_BUTTON_H (30) // アニメーションリストの座標と幅と高さ #define LIST_X (4) #define LIST_Y (0) #define LIST_W (256) #define LIST_H (328) // アニメーション選択処理のボタンの基準座標 #define BUTTONS_X (0) #define BUTTONS_Y (4 + TOOL_SCROLLBAR_WIDTH + g_ASData.ButtonSpace.SpaceStart) // アニメーション選択処理のボタンを配置する範囲の高さ #define BUTTONS_H (30) // アニメーション選択処理情報 typedef struct _SAnimSelectData { // 表示状態情報ハンドル int TVisible; // スペース管理情報ハンドル int TSpaceManage; // 説明文を表示するためのスペース情報 SToolSpace TopSpace; // 「戻る」ボタンのハンドル int BackTButton; // アニメーションリスト表示用ウインドウのハンドル int ListTWindow; // アニメーションリストのハンドル int TList; // 操作ボタン部分用のスペース情報 SToolSpace ButtonSpace; // アニメーション選択ボタンのハンドル int ChoiceTButton; } SAnimSelectData; SAnimSelectData g_ASData; // アニメーション選択処理の初期化を行う // 戻り値 : 処理が正常に終了したかどうか(true:正常に終了した false:エラーが発生した) bool AnimSelect_Initialize( void ) { // スペース管理情報の作成 g_ASData.TSpaceManage = ToolSpaceManage_Create( SCREEN_HEIGHT ); if( g_ASData.TSpaceManage == -1 ) { return false; } // 説明文を表示するスペース用のスペース情報を追加 if( !ToolSpaceManage_AddSpace( g_ASData.TSpaceManage, &g_ASData.TopSpace, TOPSPACE + BACK_BUTTON_H, true ) ) { return false; } // 「戻る」ボタンの作成 g_ASData.BackTButton = ToolButton_Create( false, "戻る", BACK_BUTTON_X + 4, BACK_BUTTON_Y, 50, BUTTON_H ); if( g_ASData.BackTButton == -1 ) { return false; } // アニメーションリスト表示用ウインドウの作成 g_ASData.ListTWindow = ToolWindow_Create( g_ASData.TSpaceManage, false, true, false, "アニメーション一覧", LIST_X, LIST_Y, LIST_W, LIST_H, LIST_W, LIST_H ); if( g_ASData.ListTWindow == -1 ) { return false; } // アニメーションリストの作成 g_ASData.TList = ToolList_Create(); if( g_ASData.TList == -1 ) { return false; } // アニメーションリストを初期化 ToolList_Initialize( g_ASData.TList, g_ASData.ListTWindow ); // 操作ボタン部分用のスペース情報を追加 if( !ToolSpaceManage_AddSpace( g_ASData.TSpaceManage, &g_ASData.ButtonSpace, BUTTONS_H, true ) ) { return false; } // アニメーション選択ボタンの作成 g_ASData.ChoiceTButton = ToolButton_Create( false, "決定", BUTTONS_X + 4, BUTTONS_Y + 0, 50, BUTTON_H ); if( g_ASData.ChoiceTButton == -1 ) { return false; } // 表示状態情報の作成 g_ASData.TVisible = ToolVisible_Create(); if( g_ASData.TVisible == -1 ) { return false; } // アニメ選択処理で使用するウインドウやボタンと表示状態情報ハンドルを関連付ける ToolButton_SetVisibleHandle( g_ASData.BackTButton, g_ASData.TVisible ); ToolWindow_SetVisibleHandle( g_ASData.ListTWindow, g_ASData.TVisible ); ToolButton_SetVisibleHandle( g_ASData.ChoiceTButton, g_ASData.TVisible ); // 正常終了 return true; } // アニメーション選択処理のアニメーションリストをセットアップする bool AnimSelect_SetupList( void ) { int i; SCharaBaseInfo *CBInfo; const SCharaAnimFileInfo *CAFInfo; int NextAnimListTList; // アニメーション選択処理を表示状態にする ToolVisible_SetVisible( g_ASData.TVisible, true ); // アニメーションリストを初期化 ToolList_Initialize( g_ASData.TList, g_ASData.ListTWindow ); // イベント編集処理で使用するアニメーションキャンセル後に再生する // アニメーションのリストも初期化する EventEdit_InitializeNextAnimList(); // イベント編集処理で使用するアニメーションキャンセル後に再生する // アニメーションのリストのハンドルを取得する NextAnimListTList = EventEdit_GetNextAnimListTListHandle(); // 有効なアニメーションをリストに追加する g_AEData.EnableAnimNum = 0; CBInfo = CharaBase_GetInfo( g_AEData.TargetChara ); for( i = 0; i < ECharaAnim_Num; i++ ) { // アニメーションファイルが無い場合は次のループへ if( CBInfo->AnimInfo[ i ].Handle < 0 ) { continue; } CAFInfo = CharaBase_GetAnimFileInfo( ( ECharaAnim )i ); // アニメーション選択リストに追加 if( !ToolList_AddObj( g_ASData.TList, "No:%d Name:%s", g_AEData.EnableAnimNum, CAFInfo->FileName ) ) { return false; } // イベント編集処理で使用するアニメーションキャンセル後に再生する // アニメーションのリストにも追加する if( !ToolList_AddObj( NextAnimListTList, "No:%d Name:%s", g_AEData.EnableAnimNum, CAFInfo->FileName ) ) { return false; } // 有効なアニメーションを配列に記憶しておく g_AEData.EnableAnimList[ g_AEData.EnableAnimNum ] = ( ECharaAnim )i; g_AEData.EnableAnimNum++; } // 有効なアニメーションが一つでもあったら、アニメーションリストの中の // 選択されているアニメーションの行を選択状態にする if( g_AEData.EnableAnimNum > 0 ) { for( i = 0; i < g_AEData.EnableAnimNum; i++ ) { if( g_AEData.EnableAnimList[ i ] == g_AEData.TargetAnim ) { break; } } ToolList_SetSelectIndex( g_ASData.TList, i == g_AEData.EnableAnimNum ? 0 : i ); } // 正常終了 return true; } // アニメーション選択処理の状態推移処理を行う // 戻り値 : 処理が正常に終了したかどうか(true:正常に終了した false:エラーが発生した) bool AnimSelect_Step( void ) { // 「戻る」ボタンが押されたらキャラ選択に戻る if( ToolButton_GetClick( g_ASData.BackTButton, true ) ) { // キャラ選択・アニメーション選択・イベント編集の表示をOFFにする MainUIHide(); // キャラ選択モードに変更する g_AEData.Mode = EEditMode_CharaSelect; // 選択アニメとアニメキャンセル後に再生するアニメの情報も初期化 g_AEData.TargetAnim = ( ECharaAnim )0; g_AEData.NextAnim = ( ECharaAnim )0; // キャラ選択処理のキャラリストをセットアップする CharaSelect_SetupList(); // キャラクターモデルにアタッチするアニメーションをセットアップする SetupAttachAnim(); // 正常終了 return true; } // アニメーションリストの状態が変化した場合は選択アニメーションを変更する if( ToolList_GetChange( g_ASData.TList, true ) ) { g_AEData.TargetAnim = g_AEData.EnableAnimList[ ToolList_GetSelectIndex( g_ASData.TList ) ]; // アニメーションキャンセル後に再生するアニメーションを初期化 g_AEData.NextAnim = g_AEData.EnableAnimList[ 0 ]; // キャラクターモデルにアタッチするアニメーションをセットアップする SetupAttachAnim(); // アニメーションの再生を開始する AnimPlay(); } // アニメーション選択ボタンが押されたらイベント編集モードに変更する // 尚、アニメーションが一つも無い場合は何もしない if( ToolButton_GetClick( g_ASData.ChoiceTButton, true ) && g_AEData.EnableAnimNum > 0 ) { // キャラ選択・アニメーション選択・イベント編集の表示をOFFにする MainUIHide(); // イベント編集モードに変更する g_AEData.Mode = EEditMode_EventEdit; // イベント編集処理のイベントリストをセットアップする if( !EventEdit_SetupList() ) { return false; } // メインウインドウへのファイルのドラッグ&ドロップを有効にする SetDragFileValidFlag( TRUE ); // キャラクターモデルにアタッチしたアニメーションの再生時間をセットアップする SetupAttachAnimTime(); } // 正常終了 return true; } // アニメーション選択処理の描画処理を行う void AnimSelect_Render( void ) { // アニメーション選択処理の説明文を描画する DrawString( 0, 0, "編集するアニメーションを選択してください", GetColor( 255,255,255 ), GetColor( 0,0,0 ) ); } // アニメーション選択処理の表示状態を変更する void AnimSelect_SetVisible( // 新しい表示状態( true:表示する false:表示しない ) bool Visible ) { ToolVisible_SetVisible( g_ASData.TVisible, Visible ); }