Exemple #1
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);
                }
            }
        }
    public void OnEvent(EventData eventData)
    {
        Debug.Log((AckEventType)eventData.Code);
        //server raised an event
        switch ((AckEventType)eventData.Code)
        {
        // store player ID
        case AckEventType.AssignPlayerID:
            IActor    player        = GeneralFunc.Deserialize <IActor>(eventData.Parameters[0] as byte[]);
            GameActor playerCreated = Instantiate
                                      (
                playerPref,
                new Vector3(player.posX, 0.5f, player.posY),
                playerPref.transform.rotation
                                      ) as GameActor;
            playerCreated.SetActor(player);
            playerCreated.GetComponent <OwnerInfo>().SetOwnerID(player.peerID);
            StarCollectorClient.playerID = player.peerID;
            playerCreated.GetComponent <CheckRegion>().Load();
            break;

        // create actor
        case AckEventType.CreateActor:
            if (eventData.Parameters.ContainsKey((byte)Parameter.Creep))
            {
                List <IActor> listAllCreep = GeneralFunc.Deserialize <List <IActor> >(eventData.Parameters[(byte)Parameter.Creep] as byte[]);
                Debug.Log("count all creep :" + listAllCreep.Count);
                List <IActor> listSameCreep = GetListSameActor(listAllCreep, GameActor.listCreep);

                List <IActor> listNewCreep = listAllCreep.Except(listSameCreep).ToList();

                List <GameActor> listDeleteCreep = GameActor.listCreep.Where(a => !listAllCreep.Any(b => b.actorID == a.actor.actorID)).ToList();

                foreach (var creepDelete in listDeleteCreep)
                {
                    creepDelete.Destruct();
                }

                foreach (var creep in listNewCreep)
                {
                    GameActor creepCreated = Instantiate(creepPref, new Vector3(creep.posX, 0.5f, creep.posY), playerPref.transform.rotation) as GameActor;
                    creepCreated.SetActor(creep);
                    creepCreated.GetComponent <CheckRegion>().Load();
                }
            }
            if (eventData.Parameters.ContainsKey((byte)Parameter.Regions))
            {
                InterestRegions dataInterestRegion = GeneralFunc.Deserialize <InterestRegions>(eventData.Parameters[(byte)Parameter.Regions] as byte[]);

                if (dataInterestRegion.playerPosition != null)
                {
                    Debug.Log(string.Format("player position -------------- x: {0} - y: {1}", dataInterestRegion.playerPosition.x, dataInterestRegion.playerPosition.y));
                }

                //foreach (var data in dataInterestRegion.listRegion)
                //{
                //    Debug.Log(string.Format("x: {0} - y: {1}",data.x,data.y));
                //}

                AreaController.Instance.ShowInterestRegion(dataInterestRegion.listRegion);
            }
            break;

        case AckEventType.DestroyActor:
            if (eventData.Parameters.ContainsKey((byte)Parameter.Data))
            {
                IActor    playerDestroy    = GeneralFunc.Deserialize <IActor>(eventData.Parameters[(byte)Parameter.Data] as byte[]);
                GameActor gameActorDestroy = GameActor.listPlayer.Where(a => a.actor.actorID == playerDestroy.actorID).FirstOrDefault();
                if (gameActorDestroy != null)
                {
                    gameActorDestroy.Destruct();
                }
            }
            break;

        // log chat messages
        case AckEventType.ChatMessage:
            break;
        }
    }