public FrozenActorLayer(Actor self, FrozenActorLayerInfo info) { binSize = info.BinSize; world = self.World; owner = self.Owner; frozenActorsById = new Dictionary <uint, FrozenActor>(); // PERF: Partition the map into a series of coarse-grained bins and track changes in the shroud against // bin - marking that bin dirty if it changes. This is fairly cheap to track and allows us to perform the // expensive visibility update for frozen actors in these regions. partitionedFrozenActorIds = new SpatiallyPartitioned <uint>( world.Map.MapSize.X, world.Map.MapSize.Y, binSize); var maxX = world.Map.MapSize.X / binSize + 1; var maxY = world.Map.MapSize.Y / binSize + 1; dirtyBins = new bool[maxX * maxY]; self.Trait <Shroud>().CellsChanged += cells => { foreach (var cell in cells) { var x = cell.U / binSize; var y = cell.V / binSize; dirtyBins[y * maxX + x] = true; } }; }
public FrozenActorLayer(Actor self, FrozenActorLayerInfo info) { binSize = info.BinSize; world = self.World; owner = self.Owner; frozenActorsById = new Dictionary <uint, FrozenActor>(); partitionedFrozenActorIds = new SpatiallyPartitioned <uint>( world.Map.MapSize.X, world.Map.MapSize.Y, binSize); self.Trait <Shroud>().OnShroudChanged += uv => dirtyFrozenActorIds.UnionWith(partitionedFrozenActorIds.At(new int2(uv.U, uv.V))); }
public FrozenActorLayer(World world, FrozenActorLayerInfo info) { this.info = info; frozen = new Dictionary <uint, FrozenActor>(); bins = new List <FrozenActor> [ world.Map.MapSize.X * Game.CellSize / info.BinSize, world.Map.MapSize.Y *Game.CellSize / info.BinSize]; for (var j = 0; j <= bins.GetUpperBound(1); j++) { for (var i = 0; i <= bins.GetUpperBound(0); i++) { bins[i, j] = new List <FrozenActor>(); } } }
public FrozenActorLayer(World world, FrozenActorLayerInfo info) { this.info = info; frozen = new Dictionary<uint, FrozenActor>(); bins = new List<FrozenActor>[ world.Map.MapSize.X * Game.CellSize / info.BinSize, world.Map.MapSize.Y * Game.CellSize / info.BinSize]; for (var j = 0; j <= bins.GetUpperBound(1); j++) for (var i = 0; i <= bins.GetUpperBound(0); i++) bins[i, j] = new List<FrozenActor>(); }