Esempio n. 1
0
        void BroadcastFoodRemove(Food food)
        {
            var packet = new ReplicationRemovePacket(food.ID);

            broadcaster.BroadcastLazy(food.Position, packet);
            log.Info($"sent food remove packet: {packet.ID}");
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
                }
            }
        }