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; } } }
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); } } }
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); }
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); } } } }