示例#1
0
    private void UpdateGridInternalData()
    {
        // Set game object to it's new tile position
        for (int i = 0; i < tile_gos_to_update.Count; ++i)
        {
            TileGameObjectToMove curr = tile_gos_to_update[i];

            GameGridInstance.GridTile to_swap = grid_inst.GetTileByGridPos(curr.new_tile_pos);

            to_swap.go = curr.tile_go;
        }

        // Set old tile game object references to null
        for (int i = 0; i < tile_gos_to_update.Count; ++i)
        {
            TileGameObjectToMove curr = tile_gos_to_update[i];

            GameGridInstance.GridTile to_swap = grid_inst.GetTileByGridPos(curr.new_tile_pos);

            if (to_swap.go == curr.tile.go)
            {
                curr.tile.go = null;
            }
        }
    }
示例#2
0
    private void Move(MoveDirection dir)
    {
        if (!moving)
        {
            List <GameGridInstance.GridTile> tiles = grid_inst.GetTiles();

            for (int i = 0; i < tiles.Count; ++i)
            {
                GameGridInstance.GridTile curr_tile = tiles[i];

                if (curr_tile.go != null)
                {
                    Vector3 target_pos = curr_tile.pos;

                    bool can_move = CheckMovementTile(curr_tile, dir);

                    if (can_move)
                    {
                        Vector2Int grid_pos_to_offset = GetOffsetByDirection(dir);

                        Vector2Int grid_pos_to_check = curr_tile.grid_pos + grid_pos_to_offset;

                        target_pos = grid_inst.GetWorldPosByTilePos(grid_pos_to_check);

                        TileGameObjectToMove go_to_move = new TileGameObjectToMove();
                        go_to_move.tile         = curr_tile;
                        go_to_move.new_tile_pos = grid_pos_to_check;
                        go_to_move.target_pos   = target_pos;
                        go_to_move.tile_go      = curr_tile.go;

                        go_to_move.tile_go.transform.DOMove(go_to_move.target_pos, LevelCreatorEditor.Instance.GetTilesMoveSpeed());

                        tile_gos_to_move.Add(go_to_move);

                        moving = true;
                    }
                }
            }

            if (moving)
            {
                grid_inst.SetAutomaticGridSnap(false);
            }
        }
    }
示例#3
0
    private bool CheckMovementTile(GameGridInstance.GridTile tile, MoveDirection dir)
    {
        bool ret = false;

        if (tile != null)
        {
            GridTileInstance tile_ins_go = tile.go.GetComponent <GridTileInstance>();

            if (tile_ins_go != null && tile_ins_go.Type() != GameGridInstance.GridTileType.GRID_TIILE_TYPE_STATIC)
            {
                Vector2Int grid_pos_to_offset = GetOffsetByDirection(dir);

                Vector2Int grid_pos_to_check = tile.grid_pos + grid_pos_to_offset;

                GameGridInstance.GetTileByGridPosState state;
                GameGridInstance.GridTile tile_check = grid_inst.GetTileByGridPos(grid_pos_to_check, out state);

                switch (state)
                {
                case GameGridInstance.GetTileByGridPosState.SUCCES:
                {
                    if (tile_check.go != null)
                    {
                        ret = CheckMovementTile(tile_check, dir);
                    }
                    else
                    {
                        ret = true;
                    }
                }
                break;

                case GameGridInstance.GetTileByGridPosState.NO_TILE_FOUND:
                {
                    ret = true;
                }
                break;
                }
            }
        }

        return(ret);
    }
示例#4
0
    public override void OnInspectorGUI()
    {
        GameGridInstance myScript = (GameGridInstance)target;

        if (new_grid_size.x == -1)
        {
            new_grid_size = myScript.GetGridSize();
        }

        if (!Application.isPlaying)
        {
            GUILayout.Label("Grid elements ========");

            new_grid_size = EditorGUILayout.Vector2IntField("Grid size", new_grid_size);

            if (new_grid_size.x < 0)
            {
                new_grid_size.x = 0;
            }

            if (new_grid_size.y < 0)
            {
                new_grid_size.y = 0;
            }

            if (GUILayout.Button("Update grid size"))
            {
                myScript.CreateGrid(new_grid_size);
                EditorUtility.SetDirty(target);
            }
        }
        GUILayout.Label("Size ===============");

        DrawDefaultInspector();

        if (!Application.isPlaying)
        {
            GUILayout.Label("Elements ============");

            List <GameGridInstance.GridTile> tiles = myScript.GetTiles();

            if (GUILayout.Button("Reset"))
            {
                for (int i = 0; i < tiles.Count; ++i)
                {
                    tiles[i].type = GameGridInstance.GridTileType.GRID_TILE_TYPE_EMPTY;
                }

                EditorUtility.SetDirty(target);
            }

            for (int i = 0; i < tiles.Count; ++i)
            {
                GameGridInstance.GridTile curr_tile = tiles[i];

                string name = "[" + curr_tile.grid_pos.x + "] [" + curr_tile.grid_pos.y + "]";

                GameGridInstance.GridTileType obj = (GameGridInstance.GridTileType)EditorGUILayout.EnumPopup(name, curr_tile.type);

                if (obj != curr_tile.type)
                {
                    curr_tile.type = obj;

                    EditorUtility.SetDirty(target);
                }
            }
        }
    }