public void Update(ITerrain terrain, Player player, Area visibleArea) { if (IsEmpty) { return; } if (!visibleArea.IntersectsWith(BoundingBox)) { // nem lathato cella if (Updates.Count <= 0) { return; } // ha van benne update akkor csak a tipust tartjuk meg es az osszes update-et toroljuk DirtyLayers.AddMany(Updates.Select(u => u.Type).Distinct()); Updates.Clear(); return; } if (DirtyLayers.Count > 0) { // itt az egesz cellat elkuldjuk ha valamelyik tipus modosult foreach (var type in DirtyLayers) { var packet = terrain.BuildLayerUpdatePacket(type, BoundingBox); player.Session.SendPacket(packet); } //torlunk mindent Updates.Clear(); DirtyLayers.Clear(); return; } // itt a kis teruleteket vizsgaljuk meg,h lathato-e // ha igen akkor kikuldjuk es toroljuk a cellabol Updates.RemoveAll(info => { if (!info.IntersectsWith(visibleArea)) { return(false); } var packet = info.CreateUpdatePacket(terrain); player.Session.SendPacket(packet); return(true); }); }
public override Packet CreateUpdatePacket(ITerrain terrain) { return(terrain.BuildLayerUpdatePacket(Type, new Area(Position.X, Position.Y, Position.X, Position.Y))); }
public override Packet CreateUpdatePacket(ITerrain terrain) { var packet = terrain.BuildLayerUpdatePacket(Type, Area); return(packet); }