Esempio n. 1
0
 /// <summary>
 /// ダイスを配列に格納する処理
 /// </summary>
 /// <param name="_storage_dice">格納するダイス</param>
 private void Storage_Dices()
 {
     //現在保持している子オブジェクトの数分繰り返す
     for (int i = 0; i < g_work_children.Length; i++)
     {
         //ダイスを格納する配列のサイズを増やす
         Array.Resize(ref g_undo_dices, g_undo_dices.Length + 1);
         //保持中のダイスを配列に格納
         g_undo_dices[g_dice_pointer] = g_work_children[i];
         //ダイスのスクリプトを取得
         g_squares_Script = g_undo_dices[g_dice_pointer].GetComponent <Dice_Squares>();
         //指標を進める
         g_dice_pointer++;
         //取得したスクリプトから・縦・横・高さの3つの指標を取得
         (g_work_ver, g_work_side, g_work_high) = g_squares_Script.Get_Dice_Pointer();
         //取得した指標を配列に格納
         Storage_Dice_Pointer(g_work_ver, g_work_side, g_work_high);
         //ダイスの現在のマス目を取得
         g_work_before_squares = g_squares_Script.Get_Dice_Squares();
         //ダイスのマス目を保持
         Storage_Dice_Squares(g_work_before_squares);
     }
 }
Esempio n. 2
0
    /// <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();
    }