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); } }
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); } } }