private bool GetWallTubeOnTile(Vector2Int tileXY, out int playerIndex, out int wallTubeIndex) { // Add game coordinates tileXY += Vector2Int.one; wallTubeIndex = -1; for (playerIndex = 0; playerIndex < UserData.current.selectedVariant.players.Count; ++playerIndex) { PlayerData.ResourceData playerResData = UserData.current.GetPlayerResourceData(playerIndex); for (int i = 0; i < playerResData.wallTubes.Count; ++i) { WallTubeData wallTube = playerResData.wallTubes[i]; if (wallTube.position.x == tileXY.x && wallTube.position.y == tileXY.y) { wallTubeIndex = i; return(true); } } } playerIndex = -1; return(false); }
protected override void OnPaintTile(Vector2Int tileXY) { // Check if tile is passable if (!TileMapData.IsTilePassable(tileXY)) { return; } // Check if area is blocked by units or structures if (AreUnitsOnTile(tileXY)) { return; } // Remove wall or tube from tile. We are going to replace it. int playerIndex; int wallTubeIndex; while (GetWallTubeOnTile(tileXY, out playerIndex, out wallTubeIndex)) { UserData.current.GetPlayerResourceData(playerIndex).wallTubes.RemoveAt(wallTubeIndex); } // Add game coordinates tileXY += Vector2Int.one; // Create data WallTubeData wallTube = new WallTubeData(); wallTube.typeID = GetMapIDFromName(m_SelectedButtonName); wallTube.position = new LOCATION(tileXY.x, tileXY.y); // Add wallTube to tile PlayerData player = UserData.current.selectedVariant.players[m_DropdownPlayer.value]; UserData.current.GetPlayerResourceData(player).wallTubes.Add(wallTube); UserData.current.SetUnsaved(); // Remove game coordinates tileXY -= Vector2Int.one; m_MapRenderer.RefreshTiles(new RectInt(tileXY.x - 1, tileXY.y - 1, 3, 3)); }