public CitySetCityChange(CitySetBase parent, int index, CityChange change) : base(parent) { _change = change ?? throw new ArgumentNullException(nameof(change)); _index = index; _activeCity = _change.actionsRemaining > 0; }
private void UpdateAi(JsonCityMatrix predictCity, JsonCityMatrix aiCity) { CityChange change = CityChange.GetChange(predictCity, aiCity); if (change == null || change.Equals(_lastAiChange)) { return; } this.RemoveAi(); this._lastAiChange = change; if (change is DensityChange) { var dChange = change as DensityChange; Debug.Log("AI density change detected"); foreach (var jb in predictCity.grid.Where(b => b.type == dChange.Index)) { var b = this._buildings[new Pos2D(jb.x, jb.y)]; if (!TopperOnly) { b.ShadowDelta = dChange.NewDensity - dChange.OldDensity; } this._aiBuildings.Push(b); } } else if (change is BuildingChange) { var bChange = change as BuildingChange; Debug.Log("AI building change detected"); var b = this._buildings[bChange.Pos]; var indicator = Instantiate(BuildingPrefab).GetComponent <Building>(); indicator.State = GetBuildingType(bChange.NewId); if (indicator.State == Building.View.Building) { indicator.TopperPrefab = this.TopperPrefabs[bChange.NewId]; if (!TopperOnly) { indicator.Height = bChange.NewDensity; } } indicator.transform.parent = this.BuildingChangeIndicator.transform; indicator.transform.localPosition = Vector3.zero; var arrow = Instantiate(BuildingChangeArrowPrefab).GetComponent <BuildingsArrow>(); arrow.StartBuilding = indicator; arrow.EndBuilding = b; arrow.transform.parent = this.BuildingChangeIndicator.transform; this._aiBuildings.Push(b); } else { throw new NotImplementedException("AI Change type unknown"); } }
private void RemoveAi() { foreach (var b in this._aiBuildings) { if (b.State == Building.View.Building) { b.ShadowDelta = 0; } } this._aiBuildings.Clear(); foreach (Transform o in this.BuildingChangeIndicator.transform) { Destroy(o.gameObject); } this._lastAiChange = null; }