/// <summary> /// 操作中のダイスを移動先に格納する /// </summary> private void Dice_Storage() { //ダイスの個数分だけ処理を繰り返す for (int dice_count = g_zero_Count; dice_count < g_work_dices.Length; dice_count++) { //ダイスのスクリプト取得 g_child_Script = g_work_dices[dice_count].GetComponent <Dice_Squares>(); //ダイスの現在位置取得 (g_dice_ver, g_dice_side, g_dice_high) = g_child_Script.Get_Dice_Pointer(); //現在の位置―移動回数をして移動先の高さを計算 int fall_high = g_dice_high - g_min_counter; //ダイス格納 g_game_Con_Script.Storage_Obj(g_dice_ver, g_dice_side, fall_high, g_work_dices[dice_count]); //ダイスのタイプ格納 g_game_Con_Script.Storage_Obj_Type(g_dice_ver, g_dice_side, fall_high, 100); //格納先のポジション取得 Vector3 dice_pos = g_game_Con_Script.Get_Pos(g_dice_ver, g_dice_side, fall_high); //ダイス移動 g_work_dices[dice_count].transform.position = dice_pos; //子オブジェクトが保持している指標を更新する g_child_Script.Storage_This_Index(g_dice_ver, g_dice_side, fall_high); //全方位を調べて、くっつくダイスがあるか調べる g_child_Script.All_Check(); } }
/// <summary> /// 移動前を空にして移動先にオブジェクトとタイプを格納する処理 /// </summary> /// <param name="ver">縦</param> /// <param name="side">横</param> /// <param name="high">高さ</param> /// <param name="pointer">子オブジェクト配列の指標</param> public void Reset_And_Storage_Obj() { //動かすダイスの個数分繰り返す for (int child_pointer = g_zero_Count; child_pointer < g_work_children.Length; child_pointer++) { //ダイスのスクリプト取得 g_child_Script = g_work_children[child_pointer].GetComponent <Dice_Squares>(); //移動前の位置を取得 (g_child_Ver, g_child_Side, g_child_High) = g_check_Script.Get_Before_Pointer(); //移動先の位置を取得 (g_next_ver, g_next_side, g_next_high) = g_check_Script.Get_After_Pointer(); //元々格納されていたオブジェクトを空にする g_game_Con_Script.Storage_Reset(g_child_Ver, g_child_Side, g_child_High); //子オブジェクトを回転に格納 g_game_Con_Script.Storage_Obj(g_next_ver, g_next_side, g_next_high, g_work_children[child_pointer]); //タイプを回転先に格納 g_game_Con_Script.Storage_Obj_Type(g_next_ver, g_next_side, g_next_high, 100); //移動先のポジション取得 Vector3 pos = g_game_Con_Script.Get_Pos(g_next_ver, g_next_side, g_next_high); //ポジション移動 g_work_children[child_pointer].transform.position = pos; //子オブジェクトが保持している指標を更新する g_child_Script.Storage_This_Index(g_next_ver, g_next_side, g_next_high); //サイコロのマス目を変更 g_child_Script.Change_Squares(g_now_para); //ダイスの全方向を調べて、くっつくダイスがあるか調べる g_child_Script.All_Check(); } //ダイス落下処理 g_dice_fall_Script.All_Dice_Fall(g_work_children, g_center_Dice); }
/// <summary> /// 指定したパラメータと位置に応じてプレイヤーを移動させる /// </summary> /// <param name="ver">縦</param> /// <param name="side">横</param> /// <param name="high">高さ</param> /// <param name="para">移動方向パラメータ</param> public void PlayerMove(int para) { if (g_play_con_Script.Get_MoveFlag()) { return; } //プレイヤーの現在のポインター取得 (g_player_ver, g_player_side, g_player_high) = g_play_con_Script.Get_Player_Pointer(); //移動前のプレイヤーの向きを取得(ジャンプ判定用) int before_direction = g_direction_Script.Get_Player_Direction(); //プレイヤーオブジェクトの向きをパラメータに応じて変更する g_direction_Script.Player_Direction_Change(para); //移動後のプレイヤーの向きを取得(ジャンプ判定用) int after_direction = g_direction_Script.Get_Player_Direction(); //移動する向きに応じて処理を変える switch (para) { //縦プラス方向 case g_ver_plus_Para: g_player_ver = g_player_ver + 1; break; //縦マイナス方向 case g_ver_minus_Para: g_player_ver = g_player_ver - 1; break; //横プラス方向 case g_side_plus_Para: g_player_side = g_player_side + 1; break; //横マイナス方向 case g_side_minus_Para: g_player_side = g_player_side - 1; break; } //移動が可能か調べる g_is_move = Move_Check(g_player_ver, g_player_side, g_player_high); //移動不可状態なら if (!g_is_move) { //移動処理中止 return; } //移動先に格納されているオブジェクトのタイプ int type = g_game_con_Script.Get_Obj_Type(g_player_ver, g_player_side, g_player_high); //取得したオブジェクトのタイプに応じて処理 //空白の時 //プレイヤーを移動させる if (type == 0) { //落下可能か調べる g_is_move = Fall_Check(g_player_ver, g_player_side, g_player_high); //落下不可能の時 if (!g_is_move) { //移動処理中止 return; } //移動先が今と同じ高さなら if (g_player_high - g_check_high == 0) { //移動アニメーション再生 g_anim_Script.Player_Move_Anim(); } //移動先が自分のいる場所より低い位置なら else if (g_player_high - g_check_high != 0) { //落下モーションを再生 g_anim_Script.Player_Jump_Anim(); } //移動先の高さの指標を変更する g_player_high = g_check_high; //移動先のポジション取得 Vector3 get_pos = g_game_con_Script.Get_Pos(g_player_ver, g_player_side, g_player_high); //取得した位置にプレイヤーを移動させる g_appearance_move_Script.Player_Move(get_pos); //プレイヤーの現在地を更新する g_play_con_Script.Storage_Player_Pointer(g_player_ver, g_player_side, g_player_high); } //移動先が移動前の向いている方向と同じなら //ジャンプするか調べる else if (before_direction == after_direction) { //ジャンプできるか調べる //条件を満たせばジャンプさせる Jump(); } }
/// <summary> /// 保持している情報をもとに一手前の状態に戻す /// </summary> public void Undo_Play() { if (!g_is_undo) { return; } if (g_player_con_Script.Get_MoveFlag()) { return; } g_is_undo = false; //プレイヤーの移動先取得 Vector3 _player_pos = g_game_con_Script.Get_Pos(g_player_ver, g_player_side, g_player_high); //プレイヤー移動 g_player_obj.transform.position = _player_pos; //プレイヤーの保持する指標変更 g_player_con_Script.Storage_Player_Pointer(g_player_ver, g_player_side, g_player_high); //プレイヤーの向きを変更 g_direction_Script.Player_Direction_Change(g_player_direction); //ダイス配列用の指標 int _dice_pointer = 0; //縦・横・高さ配列用の指標 int _point_pointer = 0; //保持している親の数分繰り返す for (int i = 0; i < g_undo_parents.Length; i++) { //親オブジェクト取得 GameObject _work_parent = g_undo_parents[i]; //親の子オブジェクトの数取得 int _work_count = g_undo_dice_counters[i]; //子オブジェクトの数分繰り返す for (int j = 0; j < _work_count; j++) { //子オブジェクト取得 GameObject _work_dice = g_undo_dices[j + _dice_pointer]; //子オブジェクトの親を今保持している親に変更 _work_dice.transform.parent = _work_parent.transform; //縦の指標取得 g_work_ver = g_dice_pointers[_point_pointer]; //横の指標取得 g_work_side = g_dice_pointers[_point_pointer + 1]; //高さの指標取得 g_work_high = g_dice_pointers[_point_pointer + 2]; //元に戻す位置を取得 Vector3 _undo_pos = g_game_con_Script.Get_Pos(g_work_ver, g_work_side, g_work_high); //子オブジェクトを移動 _work_dice.transform.position = _undo_pos; //ダイスのスクリプト取得 g_squares_Script = _work_dice.GetComponent <Dice_Squares>(); //ダイスの移動前の指標取得 (g_before_ver, g_before_side, g_before_high) = g_squares_Script.Get_Dice_Pointer(); //オブジェクトの種類を取得 int _type = g_game_con_Script.Get_Obj_Type(g_before_ver, g_before_side, g_before_high); //大元の配列からダイスを除去 g_game_con_Script.Storage_Reset(g_before_ver, g_before_side, g_before_high); //移動後の縦・横・高さの指標に変更 g_squares_Script.Storage_This_Index(g_work_ver, g_work_side, g_work_high); //大元の配列にダイス格納 g_game_con_Script.Storage_Obj(g_work_ver, g_work_side, g_work_high, _work_dice); //大元の配列に種類格納 g_game_con_Script.Storage_Obj_Type(g_work_ver, g_work_side, g_work_high, _type); //ダイスの移動後のマス目を取得 g_work_after_squares = g_squares_Script.Get_Dice_Squares(); //配列に保持しているマス目を取得する g_work_before_squares = Get_Dice_Squares(); //ダイスが保持しているマス目を保持していたマス目に変更する g_squares_Script.Storage_Squares(g_work_before_squares); //変更後のマス目に応じてダイスを回転させる g_dice_create_Script.Undo_Squares_Change(_work_dice, g_work_before_squares, g_work_after_squares); //縦・横・高さ配列の指標を3つ進める _point_pointer += 3; } //ダイス用の配列の指標を取り出した個数分進める _dice_pointer += _work_count; } //手数を戻す g_trouble_Script.Trouble_Plus(); //保持する変数を全て初期化 Array_Reset(); }
/// <summary> /// オブジェクトを指定した位置に生成して、配列に格納 /// </summary> /// <param name="ver">縦</param> /// <param name="side">横</param> /// <param name="high">高さ</param> /// <param name="type">種類</param> public void Spawn_Block(int ver, int side, int high, int type, int[] json_dices) { //タイプに応じて生成するプレハブを変更する switch (type) { //空白 case g_null_para: g_block_Obj = BlockCreator(g_null_Prefab); break; //スタート case g_start_para: g_block_Obj = BlockCreator(g_start_Prefab); Vector3 player_pos = g_game_Con_Script.Get_Pos(ver, side, high); GameObject player = g_player_sporn.PlayerCreator(player_pos); g_player_sporn.GetComponent <Player_Direction>().Start_Direction(player); break; //ゴール case g_goal_para: g_block_Obj = BlockCreator(g_goal_Prefab); break; //床 case g_ground_para: //g_block_Obj = BlockCreator(g_floor_Prefab); g_block_Obj = BlockCreator(Ground_Creator(ver, side, high)); break; //ダイス case g_dice_para: g_block_Obj = Dice_Creator(g_dice_Prefab); //生成した位置をダイスが保持 g_block_Obj.GetComponent <Dice_Squares>().Storage_This_Index(ver, side, high); //生成段階のマス目をダイスが保持 g_block_Obj.GetComponent <Dice_Squares>().Storage_Squares(json_dices); //生成時のマス目になるようにダイスを回転させる g_dice_create_Script.Start_Squares_Change(g_block_Obj, json_dices); break; #region 全面同じ数字のダイス生成 case g_dice_1_para: type = 100; g_block_Obj = Dice_Creator(g_all_dices[0]); //生成した位置をダイスが保持 g_block_Obj.GetComponent <Dice_Squares>().Storage_This_Index(ver, side, high); break; case g_dice_2_para: type = 100; g_block_Obj = Dice_Creator(g_all_dices[1]); //生成した位置をダイスが保持 g_block_Obj.GetComponent <Dice_Squares>().Storage_This_Index(ver, side, high); break; case g_dice_3_para: type = 100; g_block_Obj = Dice_Creator(g_all_dices[2]); //生成した位置をダイスが保持 g_block_Obj.GetComponent <Dice_Squares>().Storage_This_Index(ver, side, high); break; case g_dice_4_para: type = 100; g_block_Obj = Dice_Creator(g_all_dices[3]); //生成した位置をダイスが保持 g_block_Obj.GetComponent <Dice_Squares>().Storage_This_Index(ver, side, high); break; case g_dice_5_para: type = 100; g_block_Obj = Dice_Creator(g_all_dices[4]); //生成した位置をダイスが保持 g_block_Obj.GetComponent <Dice_Squares>().Storage_This_Index(ver, side, high); break; case g_dice_6_para: type = 100; g_block_Obj = Dice_Creator(g_all_dices[5]); //生成した位置をダイスが保持 g_block_Obj.GetComponent <Dice_Squares>().Storage_This_Index(ver, side, high); break; #endregion } if (type > 110) { g_block_Obj = Dice_Creator(g_dice_Prefab); //生成した位置をダイスが保持 g_block_Obj.GetComponent <Dice_Squares>().Storage_This_Index(ver, side, high); //生成段階のマス目をダイスが保持 g_block_Obj.GetComponent <Dice_Squares>().Storage_Squares(json_dices); //生成時のマス目になるようにダイスを回転させる g_dice_create_Script.Start_Squares_Change(g_block_Obj, json_dices); if (g_hintScript.GetHint()) { switch (type) { case g_yellow_dice_para: g_block_Obj.GetComponent <Renderer>().material = g_dice_sprite_array[0]; break; case g_green_dice_para: g_block_Obj.GetComponent <Renderer>().material = g_dice_sprite_array[1]; break; case g_orange_dice_para: g_block_Obj.GetComponent <Renderer>().material = g_dice_sprite_array[2]; break; case g_purple_dice_para: g_block_Obj.GetComponent <Renderer>().material = g_dice_sprite_array[3]; break; case g_blue_dice_para: g_block_Obj.GetComponent <Renderer>().material = g_dice_sprite_array[4]; break; case g_green_yellow_dice_para: g_block_Obj.GetComponent <Renderer>().material = g_dice_sprite_array[5]; break; } } type = 100; } //ポジション取得 Vector3 g_sporn_Pos = g_game_Con_Script.Get_Pos(ver, side, high); //生まれたブロックのポジションを変更する g_block_Obj.transform.position = g_sporn_Pos; //配列にオブジェクトを格納する g_game_Con_Script.Storage_Obj(ver, side, high, g_block_Obj); //配列にタイプを格納 g_game_Con_Script.Storage_Obj_Type(ver, side, high, type); }