예제 #1
0
    public static CityChange GetChange(JsonCityMatrix oldCity, JsonCityMatrix newCity)
    {
        var oldDensities = oldCity.objects.densities;
        var newDensities = newCity.objects.densities;

        for (int i = 0; i < oldCity.objects.densities.Length; i++)
        {
            if (oldDensities[i] != newDensities[i])
            {
                return(new DensityChange(i, oldDensities[i], newDensities[i]));
            }
        }

        var newCityBuildings = JsonCityMatrix.GetBuildingMap(newCity);

        foreach (var b in oldCity.grid)
        {
            var newB = newCityBuildings[new Pos2D(b.x, b.y)];
            if (b.type != newB.type)
            {
                var oldDens = b.type >= 0 && b.type < oldDensities.Length ? oldDensities[b.type] : 0;
                var newDens = newB.type >= 0 && newB.type < newDensities.Length ? newDensities[newB.type] : 0;
                return(new BuildingChange(new Pos2D(b.x, b.y), b.type, newB.type,
                                          oldDens, newDens));
            }
        }
        return(null);
    }
예제 #2
0
    private void Update()
    {
        if (packet == null)
        {
            return;
        }
        var hasChanged = false;
        var grid       = JsonCityMatrix.GetBuildingMap(packet.predict);

        for (int i = 0; i < 30; i++)
        {
            for (int j = 0; j < 30; j++)
            {
                var pos = new Pos2D(i, j);
                if (!grid.ContainsKey(pos))
                {
                    continue;
                }
                hasChanged = hasChanged || grid[pos].type != GridDecoder.currentIds[i, j];
                grid[new Pos2D(i, j)].type = GridDecoder.currentIds[i, j];
            }
        }
        if (hasChanged)
        {
            foreach (var o in this._observers)
            {
                o.OnNext(packet);
            }
        }

        if (this.UdpSubject == this._prevSubject)
        {
            return;
        }
        this._unsubscriber.Dispose();
        this._unsubscriber = this.UdpSubject.Subscribe(this);
        this._prevSubject  = this.UdpSubject;
    }