public void ReplaceTile(GameObject newTileObj, Tile original) { Tile tile = Instantiate(newTileObj, original.cell.transform).GetComponent <Tile>(); tile.Initialize(original.cell); tile.UpdateColor(); switch (tile.typename) { case "Residential": if (residentialTiles.Count == 0) { gameController.firstResidentialPlaced = true; gameController.SetGameSpeed(1); } emptyTiles.Remove((Empty)original); residentialTiles.Add((Residential)tile); break; case "Industrial": emptyTiles.Remove((Empty)original); industrialTiles.Add((Industrial)tile); break; case "Empty": switch (original.typename) { case "Residential": Stack <Resident> residentStack = new Stack <Resident>(((Residential)original).residents); while (residentStack.Count > 0) { Resident resident = residentStack.Pop(); StartCoroutine(resident.Destroy()); } residentialTiles.Remove((Residential)original); emptyTiles.Add((Empty)tile); if (industrialTiles.Count == 0 && residentialTiles.Count == 0) { gameController.DeselectPointerButtons(); } break; case "Industrial": Stack <Resident> workerStack = new Stack <Resident>(((Industrial)original).workers); while (workerStack.Count > 0) { Resident resident = workerStack.Pop(); if (resident.status == Resident.Status.CommuteToWork || resident.status == Resident.Status.Work) { StartCoroutine(resident.Destroy()); } else { ((Industrial)original).RemoveWorker(resident); } } industrialTiles.Remove((Industrial)original); emptyTiles.Add((Empty)tile); if (industrialTiles.Count == 0 && residentialTiles.Count == 0) { gameController.DeselectPointerButtons(); } break; default: break; } break; default: break; } if (emptyTiles.Count == 0) { gameController.DeselectPointerButtons(); } Destroy(original.gameObject); }