public new IBuilding deepClone(BuildingGS newGS)
    {
        PositionDependentBuilding result = this.clone(newGS);

        result.currentWorkerCount = this.currentWorkerCount;
        return(result);
    }
    public bool canBuyBuilding(IBuilding possibleBuilding)
    {
        // TODO: in the future, buildings may cost differently depending on where they're built etc.
        bool result = canAffordBuilding(possibleBuilding.getBuildingType()); // Stockpile considerations

        result &= canAffordUpkeep(possibleBuilding);                         // per tick upkeep considerations

        PositionDependentBuilding posBuilding = possibleBuilding as PositionDependentBuilding;

        if (posBuilding != null)
        {
            // Can the provided building be built in this game state?
            result &= posBuilding.canBuild(this);
        }
        return(result);
    }