protected virtual void SendEntityVisibilityPackets(Tile newTile, Tile previousTile) { HashSet <WorldEntity> oldViewers = null; if (previousTile != null) { oldViewers = previousTile.EntitiesViewing; } var newViewers = new HashSet <WorldEntity>(newTile.EntitiesViewing); if (oldViewers != null) { newViewers.ExceptWith(oldViewers); } HashSet <PlayerEntity> playerViewers = new HashSet <PlayerEntity>(newViewers.Select(v => v.Owner)); var ev = new EntityVisibleEvent(this); foreach (var viewer in newTile.EntitiesViewing) { if (playerViewers.Remove(viewer.Owner)) { viewer.Owner.Send(ev); } } }
public void EntityVisible(EntityVisibleEvent ev) { var owner = _game.GetWorld().GetOrCreateClientPlayer(ev.Entity.OwnerID); var tile = (ClientTile)_game.GetWorld().GetTile(ev.Entity.X, ev.Entity.Y); var clientEntity = EntityFactory.InstantiateClientEntity(ev.Entity, owner, tile); clientEntity.Tile = tile; UIManager.PartyUI.DrawAllParties(); }