Exemple #1
0
        private InterestRegions GetDataInterestRegion(List <Region> listInterestRegion)
        {
            InterestRegions dataInterest = new InterestRegions()
            {
                listRegion = new List <MPosition>()
            };

            foreach (var region in listInterestRegion)
            {
                MPosition data = new MPosition()
                {
                    x = region.x, y = region.y
                };
                dataInterest.listRegion.Add(data);
            }

            return(dataInterest);
        }
Exemple #2
0
        private void SendNewInfoToPeer(ActorPeer peer, IActor player)
        {
            List <IActor> listPlayerInRegion = new List <IActor>();
            List <IActor> listCreepInRegion  = new List <IActor>();

            List <Region> listInterestRegion = GetInterestRegion();

            foreach (var region in listInterestRegion)
            {
                listPlayerInRegion.AddRange(region.listPlayer);
                listCreepInRegion.AddRange(region.listCreep);
            }
            listPlayerInRegion.Remove(player);

            InterestRegions dataInterest = GetDataInterestRegion(listInterestRegion);

            dataInterest.playerPosition = new MPosition()
            {
                x = player.posX,
                y = player.posY
            };


            EventData evtDataCrrepAndOtherPlayers = new EventData()
            {
                Code       = (byte)AckEventType.CreateActor,
                Parameters = new Dictionary <byte, object>()
                {
                    { (byte)Parameter.Player, GeneralFunc.Serialize(listPlayerInRegion) },
                    { (byte)Parameter.Creep, GeneralFunc.Serialize(listCreepInRegion) },
                    { (byte)Parameter.Regions, GeneralFunc.Serialize(dataInterest) }
                }
            };

            peer.SendEvent(evtDataCrrepAndOtherPlayers, new SendParameters());
        }
        private InterestRegions GetDataInterestRegion(List<Region> listInterestRegion)
        {
            InterestRegions dataInterest = new InterestRegions() { listRegion = new List<MPosition>() };

            foreach (var region in listInterestRegion)
            {
                MPosition data = new MPosition() { x = region.x, y = region.y };
                dataInterest.listRegion.Add(data);
            }

            return dataInterest;
        }
    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;
        }
    }