void BroadcastFoodRemove(Food food) { var packet = new ReplicationRemovePacket(food.ID); broadcaster.BroadcastLazy(food.Position, packet); log.Info($"sent food remove packet: {packet.ID}"); }
public bool Remove(Player player) { var retval = players.Remove(player); if (retval) { RefreshGrid(); // 방을 나갔다는것을 다른 유저도 알아야한다 var packet = new ReplicationRemovePacket(player.ID); broadcaster.BroadcastLazy(player.Position, packet); } return(retval); }
void CheckKillLoop() { var players = new List <Player>(); playerMgr.GetPlayers(ref players); foreach (var player in players) { var ALLOW_DISTANCE = 1; // 플레이어와 가까운 투사체 목록 // TODO 죽창 충돌처리 개선하기 // 일단은 점-점으로 계산 var projectiles = projectileMgr.GetProjectiles(player.Position, ALLOW_DISTANCE); var hits = projectiles.Where(p => p.OwnerID != player.ID); // 투사체의 소유자는 점수를 킬카운트 증가 foreach (var projectile in hits) { var owner = players.Where(p => p.ID == projectile.OwnerID).First(); if (owner != null) { owner.GainKillScore(1); } } // 플레이어는 죽창에 맞았으니 죽어야한다 if (hits.Count() > 0) { // 유저가 죽었다는걸 다른 유저에게 알려준다 // TODO 알려주는 범위 통제하면 대역폭을 아낄수 있다 // TODO 객체 삭제 패킷과 유저 죽음 패킷은 분리하는게 가능하다 var deadPacket = new ReplicationRemovePacket(player.ID); playerCaster.Broadcast(player.Position, deadPacket); // TODO 유저가 죽었다는것과 유저가 나갔다는것을 구분해야한다 // 죽은 유저를 방에서 즉시 제거하는게 최선인가? // 죽은 유저는 유저 목록에서 삭제 playerMgr.Remove(player); } } }