public void SelectBuildingForConstruction(Structure building, int buttonIndex)
    {
        chosenStructure = building;
        buildingButtonsContainer.GetChild(buttonIndex).GetComponent <Image>().overrideSprite = PoolMaster.gui_overridingSprite;
        if (selectedBuildingButton >= 0)
        {
            buildingButtonsContainer.GetChild(selectedBuildingButton).GetComponent <Image>().overrideSprite = null;
        }
        selectedBuildingButton = buttonIndex;

        infoPanel.SetActive(true);
        nameField.text     = Localization.GetStructureName(chosenStructure.id);
        gridTextField.text = chosenStructure.innerPosition.size.ToString() + " x " + chosenStructure.innerPosition.size.ToString();
        Building b = chosenStructure as Building;

        if (b != null)
        {
            if (b.energySurplus != 0)
            {
                energyIcon.SetActive(true);
                energyTextField.gameObject.SetActive(true);
                energyTextField.text = b.energySurplus > 0 ? '+' + b.energySurplus.ToString() :  b.energySurplus.ToString();
            }
            else
            {
                energyIcon.SetActive(false);
                energyTextField.gameObject.SetActive(false);
            }
            if (b is House)
            {
                housingIcon.SetActive(true);
                housingTextField.gameObject.SetActive(true);
                housingTextField.text = (b as House).housing.ToString();
            }
            else
            {
                housingIcon.SetActive(false);
                housingTextField.gameObject.SetActive(false);
            }
        }
        else
        {
            energyIcon.SetActive(false);
            energyTextField.gameObject.SetActive(false);
            housingIcon.SetActive(false);
            housingTextField.gameObject.SetActive(false);
        }
        description.text = Localization.GetStructureDescription(chosenStructure.id);

        resourcesCostImage[0].transform.parent.gameObject.SetActive(true);
        Text t = resourcesCostImage[0].transform.GetChild(0).GetComponent <Text>();

        Building bd = chosenStructure as Building;

        // material check :
        if (bd != null & bd.requiredBasementMaterialId != -1 & bd.requiredBasementMaterialId != observingSurface.material_id)
        {
            t.text  = Localization.GetRestrictionPhrase(RestrictionKey.UnacceptableSurfaceMaterial);
            t.color = Color.yellow;
            resourcesCostImage[0].uvRect = ResourceType.GetTextureRect(0);
            resourcesCostImage[0].gameObject.SetActive(true);
            for (int i = 1; i < resourcesCostImage.Length - 1; i++)
            {
                resourcesCostImage[i].gameObject.SetActive(false);
            }
            int n = resourcesCostImage.Length - 1;
            t      = resourcesCostImage[n].transform.GetChild(0).GetComponent <Text>();
            t.text = Localization.GetPhrase(LocalizedPhrase.RequiredSurface) + " : " + Localization.GetResourceName(bd.requiredBasementMaterialId);
            resourcesCostImage[n].uvRect = ResourceType.GetTextureRect(bd.requiredBasementMaterialId);
            resourcesCostImage[n].gameObject.SetActive(true);
            t.color            = Color.yellow;
            buildingCreateMode = BuildingCreateInfoMode.Unacceptable_Material;
            innerBuildButton.gameObject.SetActive(false);
        }
        else
        {
            // all conditions met
            ResourceContainer[] cost = ResourcesCost.GetCost(chosenStructure.id);
            //resource cost drawing
            float[] storageResources = GameMaster.colonyController.storage.standartResources;
            for (int i = 0; i < resourcesCostImage.Length; i++)
            {
                if (i < cost.Length)
                {
                    resourcesCostImage[i].uvRect = ResourceType.GetTextureRect(cost[i].type.ID);
                    t      = resourcesCostImage[i].transform.GetChild(0).GetComponent <Text>();
                    t.text = Localization.GetResourceName(cost[i].type.ID) + " : " + string.Format("{0:0.##}", cost[i].volume);
                    showingResourcesCount[i] = new Vector2(cost[i].type.ID, cost[i].volume);
                    if (storageResources[cost[i].type.ID] < cost[i].volume)
                    {
                        t.color = Color.red;
                    }
                    else
                    {
                        t.color = Color.white;
                    }
                    resourcesCostImage[i].gameObject.SetActive(true);
                }
                else
                {
                    resourcesCostImage[i].gameObject.SetActive(false);
                }
            }
            lastStorageStatus  = GameMaster.colonyController.storage.operationsDone;
            buildingCreateMode = BuildingCreateInfoMode.Acceptable;
            innerBuildButton.gameObject.SetActive(true);
        }
    }
예제 #2
0
    public void SelectBuildingForConstruction(int i_structureID, int buttonIndex)
    {
        selectedStructureID = i_structureID;
        buildingButtonsContainer.GetChild(buttonIndex).GetComponent <Image>().overrideSprite = PoolMaster.gui_overridingSprite;
        if (selectedBuildingButton >= 0)
        {
            buildingButtonsContainer.GetChild(selectedBuildingButton).GetComponent <Image>().overrideSprite = null;
        }
        selectedBuildingButton = buttonIndex;

        infoPanel.SetActive(true);
        nameField.text = Localization.GetStructureName(selectedStructureID);
        var sts = Structure.GetStructureSize(selectedStructureID).ToString();

        gridTextField.text = sts + " x " + sts;

        var stype = Structure.GetTypeByID(selectedStructureID);
        var btype = typeof(Building);

        if (stype == btype || stype.IsSubclassOf(btype))
        {
            var energySurplus = Building.GetEnergySurplus(selectedStructureID);
            if (energySurplus != 0)
            {
                energyIcon.SetActive(true);
                energyTextField.gameObject.SetActive(true);
                energyTextField.text = energySurplus > 0 ? '+' + energySurplus.ToString() :  energySurplus.ToString();
            }
            else
            {
                energyIcon.SetActive(false);
                energyTextField.gameObject.SetActive(false);
            }
            var htype = typeof(House);
            if (stype == htype || stype.IsSubclassOf(htype))
            {
                housingIcon.SetActive(true);
                housingTextField.gameObject.SetActive(true);
                housingTextField.text = House.GetHousingValue(selectedStructureID).ToString();
            }
            else
            {
                housingIcon.SetActive(false);
                housingTextField.gameObject.SetActive(false);
            }
        }
        else
        {
            energyIcon.SetActive(false);
            energyTextField.gameObject.SetActive(false);
            housingIcon.SetActive(false);
            housingTextField.gameObject.SetActive(false);
        }
        description.text = Localization.GetStructureDescription(selectedStructureID);
        (description.transform.parent as RectTransform).SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, 0, description.rectTransform.rect.height);

        resourcesCostImage[0].transform.parent.gameObject.SetActive(true);
        Text t = resourcesCostImage[0].transform.GetChild(0).GetComponent <Text>();

        string reason     = "UNACCEPTABLE!";
        bool   acceptable = Structure.CheckSpecialBuildingConditions(selectedStructureID, observingSurface, ref reason);

        if (!acceptable)
        {
            t.text  = reason;
            t.color = Color.yellow;
            resourcesCostImage[0].uvRect = ResourceType.GetResourceIconRect(0);
            resourcesCostImage[0].gameObject.SetActive(true);
            for (int i = 1; i < resourcesCostImage.Length; i++)
            {
                resourcesCostImage[i].gameObject.SetActive(false);
            }
            buildingCreateMode = BuildingCreateInfoMode.Unacceptable_Material;
            innerBuildButton.gameObject.SetActive(false);
        }
        else
        {
            // all conditions met
            ResourceContainer[] cost;
            if (selectedStructureID != Structure.SETTLEMENT_CENTER_ID)
            {
                cost = ResourcesCost.GetCost(selectedStructureID);
            }
            else
            {
                cost = ResourcesCost.GetSettlementUpgradeCost(constructingLevel);
            }
            //resource cost drawing
            float[] storageResources = colony.storage.standartResources;
            for (int i = 0; i < resourcesCostImage.Length; i++)
            {
                if (i < cost.Length)
                {
                    resourcesCostImage[i].uvRect = ResourceType.GetResourceIconRect(cost[i].type.ID);
                    t      = resourcesCostImage[i].transform.GetChild(0).GetComponent <Text>();
                    t.text = Localization.GetResourceName(cost[i].type.ID) + " : " + string.Format("{0:0.##}", cost[i].volume);
                    showingResourcesCount[i] = new Vector2(cost[i].type.ID, cost[i].volume);
                    if (storageResources[cost[i].type.ID] < cost[i].volume)
                    {
                        t.color = Color.red;
                    }
                    else
                    {
                        t.color = Color.white;
                    }
                    resourcesCostImage[i].gameObject.SetActive(true);
                }
                else
                {
                    resourcesCostImage[i].gameObject.SetActive(false);
                }
            }
            lastStorageStatus  = colony.storage.operationsDone;
            buildingCreateMode = BuildingCreateInfoMode.Acceptable;
            innerBuildButton.gameObject.SetActive(true);
        }
    }