示例#1
0
        public void Exit(ActorPeer peer)
        {
            _executionFiber.Enqueue(() =>
            {
                ListPeer.Remove(peer);
            });

            IActor player = ListPlayer.FirstOrDefault(a => a.peerID == peer.playerID);

            if (player != null)
            {
                lock (ListPlayer)
                {
                    ListPlayer.Remove(player);
                }
                Region currentRegion = Region.GetRegionFromPosition(player);
                currentRegion.ActorExit(player);
            }
        }
示例#2
0
        public void ProcessRequest(ActorPeer sender, OperationRequest operationRequest, SendParameters sendParameters)
        {
            if (operationRequest.OperationCode == (byte)AckRequestType.MoveCommand)
            {
                Movement movement = GeneralFunc.Deserialize <Movement>(operationRequest.Parameters[(byte)Parameter.Data] as byte[]);

                // find actor
                IActor player = (ListPlayer.Find(pl => pl.actorID == movement.actorID));

                Region oldRegion = Region.GetRegionFromPosition(player);

                player.posX = movement.posX;
                player.posY = movement.posY;

                Region newRegion = Region.GetRegionFromPosition(player);

                if (oldRegion != newRegion)
                {
                    oldRegion.ActorExit(player);

                    newRegion.ActorEnter(player);
                }
            }
        }