private void UpdateInteractableStateClimateBuilding() { if (button != null) { button.interactable = ClimateBuilding.IsBuildingBuildable(id); } }
protected override void Build(Tile[,] tiles) { ClimateBuilding building = Instantiate(SelectedBuilding, Tile.GetCentrePoint(tiles), SelectedBuilding.transform.rotation, buildingsParent); AverageOutTerrain(tiles); foreach (Tile tile in tiles) { if (tile.Occupant != null) { Building.OnDemolishInitiated(tile.Occupant); } tile.SetOccupant(building); TerrainBlock block = City.Instance.Terrain.GetTerrainBlock(tile.Coordinates); block.SetExtraHeight(SelectedBuildingData.Level); } Instantiate(placeEffectPrefab).Setup(building); PlayerResources.Instance.RemoveMoney(SelectedBuildingData.Moneycost); for (int i = 0; i < SelectedBuildingData.Resourcecost.Length; i++) { PlayerResources.Instance.RemoveResource(SelectedBuildingData.Resourcecost[i], SelectedBuildingData.Resourcecostamount[i]); } building.enabled = true; building.Init(SelectedBuildingData, tiles); building.AddOutline(outlinePrefab); OnBuildingPlaced(building, SelectedBuildingData); buildingGhost.Setup(SelectedBuilding, SelectedBuildingData.ID); }
private void Activate(ClimateBuilding building) { if (building == null || building == selectedBuilding) { gameObject.SetActive(false); selectedBuilding = null; return; } transform.position = building.transform.position + posOffset; gameObject.SetActive(true); selectedBuilding = building; FillValues(); }
public void Init(int id, BuildingPrefabs prefab, ClimateBuildingsData data, bool isCorrectClimate, BuildModeBase buildMode) { this.id = id; this.data = data; this.isCorrectClimate = isCorrectClimate; img.sprite = prefab.GetBuildingSprite(id); button.onClick.AddListener(() => buildMode.SelectBuilding(id)); button.interactable = ClimateBuilding.IsBuildingBuildable(id); PlayerResources.OnResourceChanged += (x, y) => UpdateInteractableStateClimateBuilding(); PlayerResources.OnMoneyChanged += (x) => UpdateInteractableStateClimateBuilding(); Construction.BuildModeClimateBuildings.OnBuildingPlaced += (x, y) => UpdateInteractableStateClimateBuilding(); if (!isCorrectClimate) { button.interactable = false; img.color = incorrectClimateColor; } }
private void OnDisable() { selectedBuilding = null; }
protected override void OnMouseClick() { if (tilesHoveringOver == null || EventSystem.current.IsPointerOverGameObject() || !ClimateBuilding.IsBuildingBuildable(SelectedBuildingData.ID)) { return; } if (CanBePlacedAtTiles(tilesHoveringOver)) { Build(tilesHoveringOver); } }