Example #1
0
 public CitySetCityChange(CitySetBase parent, int index, CityChange change)
     : base(parent)
 {
     _change     = change ?? throw new ArgumentNullException(nameof(change));
     _index      = index;
     _activeCity = _change.actionsRemaining > 0;
 }
Example #2
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");
        }
    }
Example #3
0
 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;
 }