Пример #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 UpdateMovingTileGos()
    {
        if (moving)
        {
            for (int i = 0; i < tile_gos_to_move.Count;)
            {
                TileGameObjectToMove curr = tile_gos_to_move[i];

                Vector3 move_dir = curr.target_pos - curr.tile.go.transform.position;
                move_dir.Normalize();

                if (Mathf.Abs(Vector3.Distance(curr.tile.go.transform.position, curr.target_pos)) <= 0.1f)
                {
                    tile_gos_to_move.RemoveAt(i);
                    tile_gos_to_update.Add(curr);
                }
                else
                {
                    ++i;
                }
            }

            if (tile_gos_to_move.Count == 0)
            {
                UpdateGridInternalData();

                tile_gos_to_update.Clear();

                moving = false;

                grid_inst.SetAutomaticGridSnap(true);
            }
        }
    }
Пример #3
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);
            }
        }
    }