Esempio n. 1
0
    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);
    }