示例#1
0
    private void UpdateHpItem()
    {
        Human localHuman = GameObjectsManager.GetInstance().GetLocalHuman();

        if (localHuman != null && _lastLocalHumanHp != localHuman.Hp)
        {
            _lastLocalHumanHp = localHuman.Hp;

            for (int i = 0; i < PlayerBase.MaxHp; i++)
            {
                Image    heartImage    = _heartItems[i].HeartImage;
                Animator HeartAnimator = _heartItems[i].HeartAnimator;
                if (i < _lastLocalHumanHp)
                {
                    // Sprite
                    heartImage.sprite = HeartPinkSprite;
                    //var heartGreyImage = Resources.Load("UI/HUD/Texture/" + "Grey") as Texture2D;
                    //Sprite heartGreySprite = Sprite.Create(heartGreyImage, new Rect(0, 0, heartGreyImage.width, heartGreyImage.height), new Vector2(0.5f, 0.5f));
                    //heartImage.sprite = heartGreySprite;


                    // AnimatorController
                    if (i == _lastLocalHumanHp - 1)
                    {
                        HeartAnimator.runtimeAnimatorController = HeartGrowAnimatorController;
                        //AnimatorController animatorController = AnimatorController.CreateAnimatorControllerAtPath(AnimationControllerPath + "/" + name + ".controller");
                        //AnimatorOverrideController overrideController = new AnimatorOverrideController();
                        //overrideController.runtimeAnimatorController = GetComponent<Animator>().runtimeAnimatorController;
                        //AnimationClip clip = Resources.Load<AnimationClip>("Player/Animations/test");
                        //overrideController["Nova@yunqiu"] = clip;
                        //GetComponent<Animator>().avatar = Resources.Load<Avatar>("Player/Models/Nova");
                        //GetComponent<Animator>().runtimeAnimatorController = overrideController;
                    }
                    else
                    {
                        HeartAnimator.runtimeAnimatorController = null;
                    }
                }
                else
                {
                    // Sprite
                    heartImage.sprite = HeartGreySprite;

                    // AnimatorController
                    HeartAnimator.runtimeAnimatorController = null;
                }
            }
        }
        else if (localHuman == null)
        {
            for (int i = 0; i < PlayerBase.MaxHp; i++)
            {
                if (_heartItems != null)
                {
                    Image heartImage = _heartItems[i].HeartImage;
                    heartImage.sprite = HeartGreySprite;
                }
            }
        }
    }
    public void DecHP()
    {
        // Hurt self

        this.Hp--;
        if (this.Hp <= 0)
        {
            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
            {
                // make self dead and destroy later
                MakeDead();
            }
            else
            {
                this.Hp = 1;

                // Dead event sync
                PlayerEventItem deadEvent = new PlayerEventItem();
                deadEvent.cbTeamType  = (byte)TeamType;
                deadEvent.wChairId    = (ushort)ChairID;
                deadEvent.cbAIId      = AIId;
                deadEvent.cbEventKind = (byte)PlayerEventKind.DeadByDecHp;
                //killer
                deadEvent.nCustomData0 = (Int32)TeamType;
                deadEvent.nCustomData1 = (Int32)ChairID;
                deadEvent.nCustomData2 = (Int32)AIId;
                GameObjectsManager.GetInstance().PlayerEventList.Add(deadEvent);
            }
        }
    }
    // Use this for initialization
    void Start()
    {
        _connectingLabel = GameObject.Find("Connecting");
        if (_connectingLabel)
        {
            _connectingLabelText = _connectingLabel.GetComponentInChildren <Text>();
        }

        //_joinGameButton = GameObject.Find("JoinGameButton");
        //_joinGameButton.active = false;

        GlobalUserInfo    pGlobalUserInfo = GlobalUserInfo.GetInstance();
        tagGlobalUserData pGlobalUserData = pGlobalUserInfo.GetGlobalUserData();

        //MersenneTwister.MT19937.Seed((ulong)pGlobalUserData.wRandseed);

        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
        {
            //GameObjectsManager.GetInstance().LoadMap(pGlobalUserData.cbMapIndexRand);
            GameObjectsManager.GetInstance().LoadMap(pGlobalUserData.cbMapIndexRandForSingleGame);
        }
        else if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
        {
            GameObjectsManager.GetInstance().LoadMap(pGlobalUserData.cbMapIndexRand);
        }
        else
        {
            // GameSingleMultiType.MultiGame_Skynet

            StartConnecting();
        }
    }
    public void Fire()
    {
        if (CanShoot())
        {
            foreach (var gun in guns)
            {
                bulletInstance = GameObjectsManager.GetObject("bullet");

                if (bulletInstance == null)
                {
                    bulletInstance = (GameObject)Instantiate(bullet, gun.position, gun.rotation);
                }
                else
                {
                    bulletInstance.transform.position = gun.position;
                    bulletInstance.transform.rotation = gun.rotation;
                    bulletInstance.gameObject.SetActive(true);
                }

                bulletScript              = bulletInstance.GetComponent <Bullet>();
                bulletScript.damage       = damage;
                bulletScript.affectsScore = affectsScore;

                bulletInstance = null;
            }

            this.audio.PlayOneShot(this.shotSound);
            Reload();
        }
    }
示例#5
0
        public void Initialize()
        {
            //TileSheet
            GameObjectsManager.SpriteSheets.Add("Tilesheet_Terrain", new SpriteSheet("Base", ContentEngine.Texture2D("Base", "Tilesheet_Terrain"), "Tilesheet_Terrain", new Point(32)));
            GameObjectsManager.SpriteSheets.Add("Tilesheet_Entity", new SpriteSheet("Base", ContentEngine.Texture2D("Base", "Tilesheet_Entity"), "Tilesheet_Entity", new Point(16)));
            GameObjectsManager.SpriteSheets.Add("Tilesheet_Item", new SpriteSheet("Base", ContentEngine.Texture2D("Base", "Tilesheet_Item"), "Tilesheet_Item", new Point(16)));
            GameObjectsManager.SpriteSheets.Add("Tilesheet_Creatures", new SpriteSheet("Base", ContentEngine.Texture2D("Base", "Tilesheet_Creatures"), "Tilesheet_Creatures", new Point(16)));
            GameObjectsManager.SpriteSheets.Add("Tilesheet_Water", new SpriteSheet("Base", ContentEngine.Texture2D("Base", "Tilesheet_Water"), "Tilesheet_Water", new Point(32)));

            //Items
            GameObjectsManager.AddItem(this, "Stick", new Core.GameObject.Items.Item("Stick", Core.GameObject.ItemType.Crafting, new string[] { "Stick" }, "Tilesheet_Item"));
            GameObjectsManager.AddItem(this, "Apple", new Core.GameObject.Items.Item("Apple", Core.GameObject.ItemType.Food, new string[] { "AppleRed", "AppleGreen", "AppleYellow" }, "Tilesheet_Item"));

            //Tiles
            Core.GameObject.Tiles.Tile Grass = new Core.GameObject.Tiles.Tile("Grass", new string[] { "Grass0", "Grass1", "Grass2", "Grass3" }, "Tilesheet_Terrain", System.Drawing.Color.FromArgb(36, 81, 11));
            Grass.SetSouneffect(SoundEffectParser.Parse(this.Name, "dirtfootstep"));
            GameObjectsManager.AddTile(this, "Grass", Grass);


            GameObjectsManager.AddTile(this, "FlowerOnGrass", new Core.GameObject.Tiles.Tile("FlowerOnGrass", new string[] { "YellowFlowerGrass", "PurpleFlowerGrass" }, "Tilesheet_Terrain", System.Drawing.Color.FromArgb(36, 81, 11)));
            GameObjectsManager.AddTile(this, "Sand", new Core.GameObject.Tiles.Tile("Sand", new string[] { "Sand0", "Sand1", "Sand2", "Sand3" }, "Tilesheet_Terrain", System.Drawing.Color.Yellow));
            GameObjectsManager.AddTile(this, "Water", new Core.GameObject.Tiles.Tile("Water", new string[] { "Water" }, "Tilesheet_Water", System.Drawing.Color.Blue));

            //Entity

            GameObjectsManager.AddEntity(this, "BigTree", new Core.GameObject.Entities.Entity("BigTree", new string[] { "BigTree0" }, "Tilesheet_Entity", new Vector2(-0.5f, -3f)));
            GameObjectsManager.AddEntity(this, "PinTree", new Core.GameObject.Entities.Entity("PinTree", new string[] { "PinTree0" }, "Tilesheet_Entity", new Vector2(-0.5f, -3f)));
            GameObjectsManager.AddEntity(this, "LargeTree", new Core.GameObject.Entities.Entity("LargeTree", new string[] { "LargeTree0" }, "Tilesheet_Entity", new Vector2(-0.5f, -1f)));
            GameObjectsManager.AddEntity(this, "Rock", new Core.GameObject.Entities.Entity("Rock", new string[] { "Rock0", "Rock1", "Rock2", "Rock3" }, "Tilesheet_Entity", new Vector2(0, 0)));
            GameObjectsManager.AddEntity(this, "Plant", new Core.GameObject.Entities.Entity("Plant", new string[] { "Plant0", "Plant1", "Plant2", "Plant3", "Plant4", "Plant5" }, "Tilesheet_Entity", new Vector2(0, 0)));
            GameObjectsManager.AddEntity(this, "Player", new Core.GameObject.Entities.Creature("Player", new Core.IA.Player(0, 1, 2, 3, 4), new string[] { "Player_Move_Up", "Player_Move_Down", "Player_Move_Left", "Player_Move_Right", "Player_Idle" }, "Tilesheet_Creatures", new Vector2(0, 0)));

            //Biome
            GameObjectsManager.AddBiome(this, "Plains", new Core.GameObject.Biome("Plains", 0.1,
                                                                                  new KeyWeightPair <int>[] {
                new KeyWeightPair <int>(GameObjectsManager.EntityKey["Base.Rock"], 0.5),
                new KeyWeightPair <int>(GameObjectsManager.EntityKey["Base.Plant"], 0.5)
            },
                                                                                  new KeyWeightPair <int>[] {
                new KeyWeightPair <int>(GameObjectsManager.TileKeys["Base.Grass"], 0.9),
                new KeyWeightPair <int>(GameObjectsManager.TileKeys["Base.FlowerOnGrass"], 0.1)
            }));

            GameObjectsManager.AddBiome(this, "Forest", new Core.GameObject.Biome("Forest", 0.3,
                                                                                  new KeyWeightPair <int>[] {
                new KeyWeightPair <int>(GameObjectsManager.EntityKey["Base.BigTree"], 0.3),
                new KeyWeightPair <int>(GameObjectsManager.EntityKey["Base.PinTree"], 0.3),
                new KeyWeightPair <int>(GameObjectsManager.EntityKey["Base.LargeTree"], 0.2),
                new KeyWeightPair <int>(GameObjectsManager.EntityKey["Base.Rock"], 0.1),
                new KeyWeightPair <int>(GameObjectsManager.EntityKey["Base.Plant"], 0.1),
            },
                                                                                  new KeyWeightPair <int>[] {
                new KeyWeightPair <int>(GameObjectsManager.TileKeys["Base.Grass"], 1)
            }));

            GameObjectsManager.AddBiome(this, "Ocean", new Core.GameObject.Biome("Ocean", 0, new KeyWeightPair <int>[] { }, new KeyWeightPair <int>[] { new KeyWeightPair <int>(GameObjectsManager.TileKeys["Base.Water"], 1) }));
            GameObjectsManager.AddBiome(this, "Desert", new Core.GameObject.Biome("Desert", 0, new KeyWeightPair <int>[] { }, new KeyWeightPair <int>[] { new KeyWeightPair <int>(GameObjectsManager.TileKeys["Base.Sand"], 1) }));
        }
示例#6
0
    IEnumerator PlayerJionDealInGaming(byte cbChairID)
    {
        while (CServerItem.get() == null)
        {
        }
        yield return(null);

        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
        {
            Human localHuman = GameObjectsManager.GetInstance().GetLocalHuman();
            if (localHuman != null)
            {
                byte Gamestate = CServerItem.get().GetGameStatus();
                if (Gamestate == SocketDefines.GAME_STATUS_PLAY)
                {
                    ControlManager.GetInstance().ControlModelSwitch(ControlManager.CameraControlMode.PlayerViewMode);
                    if (localHuman != null)
                    {
                        if (localHuman.ChairID == cbChairID)
                        {
                            if (localHuman.TeamType == PlayerTeam.PlayerTeamType.HideTeam)
                            {
                                GameSceneUIHandler.ShowLog("躲藏队");
                                m_Canvas.transform.Find("Hearts").gameObject.SetActive(false);
                                var kernel = (GameScene)CServerItem.get().GetClientKernelSink();
                                if (kernel != null && !m_hnGameManager.isReconnect)   //只有非断线重连加入游戏才能获得隐身效果
                                {
                                    ShowMiddleTips("当前为隐身状态,在隐身效果结束前躲起来!", 3);
                                    kernel.SendInventoryConsumption((byte)ControlManager.InventoryItemID.Stealth, 0);  //不消耗费用
                                }
                                if (m_hnGameManager.isReconnect)
                                {
                                    Button StealthButton = m_Canvas.transform.Find("Btn/StealthButton").gameObject.GetComponent <Button>();
                                    if (StealthButton != null)
                                    {
                                        StealthButton.interactable = true;
                                        Text timeText = StealthButton.gameObject.transform.Find("TimeLeft").GetComponent <Text>();
                                        if (timeText != null)
                                        {
                                            timeText.text = "";
                                        }
                                    }
                                }
                            }
                            else
                            {
                                GameSceneUIHandler.ShowLog("搜查队");
                                ShowMiddleTips("您被分配到搜查队,开始寻找躲起来的物品吧!", 3);
                                m_Canvas.transform.Find("Hearts").gameObject.SetActive(true);
                            }
                        }
                    }
                    _showRoomUsersBtn.SetActive(true);
                    GameManager.GetInstance().SetAllHiderVisible(true);
                }
            }
        }
    }
        protected override GamePlayer CreatePlayer(IClientUserItem pIClientUserItem)
        {
            lock (HNGameManager.LockObjOfLoadScene)
            {
                int nChairID = pIClientUserItem.GetChairID();

                if (pIClientUserItem.GetUserID() == UserInfo.getInstance().getUserID())
                {
                    m_pLocal.setUserItem(pIClientUserItem);

                    Debug.Log("---------------------CreatePlayer m_pLocal");

                    //mChen add, for HideSeek
                    Loom.QueueOnMainThread(() =>
                    {
                        GameObjectsManager.s_LocalHumanTeamType = PlayerTeam.PlayerTeamType.TaggerTeam;
                        //GameObjectsManager.s_LocalHumanTeamType = PlayerTeam.PlayerTeamType.HideTeam; //测试
                        HNGameManager.m_iLocalChairID = nChairID;

                        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                        {
                            PlayerTeam.PlayerTeamType teamType = pIClientUserItem.GetTeamType();// PlayerTeam.PlayerTeamType.TaggerTeam;
                            //PlayerTeam.PlayerTeamType teamType = PlayerTeam.PlayerTeamType.HideTeam; //测试
                            GameObjectsManager.s_LocalHumanTeamType = teamType;

                            byte cbModelIndex = pIClientUserItem.GetModelIndex();

                            PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(teamType);
                            team.AddAPlayer(false, nChairID, cbModelIndex);
                        }
                    });

                    return(m_pLocal);
                }
                else
                {
                    GamePlayer pPlayer = getPlayerByChairID(pIClientUserItem.GetChairID());
                    pPlayer.setUserItem(pIClientUserItem);

                    //mChen add, for HideSeek
                    Loom.QueueOnMainThread(() =>
                    {
                        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                        {
                            PlayerTeam.PlayerTeamType teamType = pIClientUserItem.GetTeamType();//PlayerTeam.PlayerTeamType.TaggerTeam;
                            //PlayerTeam.PlayerTeamType teamType = PlayerTeam.PlayerTeamType.HideTeam; //测试
                            byte cbModelIndex = pIClientUserItem.GetModelIndex();

                            PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(teamType);
                            team.AddAPlayer(false, nChairID, cbModelIndex);
                        }
                    });

                    return(pPlayer);
                }
            }
        }
    public static GameObjectsManager GetInstance()
    {
        if (_instance == null)
        {
            _instance = new GameObjectsManager();
        }

        return(_instance);
    }
示例#9
0
        private void DebugTools_Load(object sender, EventArgs e)
        {
            foreach (string i in GameObjectsManager.GetGameObjList())
            {
                listBox1.Items.Add(i);
            }

            tabPage1.VerticalScroll.Value = tabPage1.VerticalScroll.Maximum;
        }
示例#10
0
        //private GameObject[] _targetObjects;


        public override void OnStart()
        {
            //if(TargetObject.Value == null)
            //{
            //    _targetObjects = GameObject.FindGameObjectsWithTag(TargetTag);
            //}
            PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(TargetTeamType);

            _targetPlayerArray = team.GetPlayers();
        }
示例#11
0
    void Awake()
    {
        DontDestroyOnLoad(gameObject);
        objects.Clear();

        if (Manager == null)
        {
            Manager = this;
        }
        else if (Manager != this)
        {
            Destroy(gameObject);
        }

        objects.Add("bullet", new Queue <GameObject>());
    }
示例#12
0
    public void ShowWinOrLose()
    {
        //判断输赢
        Human      localHuman = GameObjectsManager.GetInstance().GetLocalHuman();
        PlayerTeam team       = GameObjectsManager.GetInstance().GetPlayerTeam(PlayerTeam.PlayerTeamType.HideTeam);

        if (localHuman != null && team != null)
        {
            bool HideWin = false;
            for (int i = 0; i < team.GetPlayerNum(); i++)
            {
                PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayer(PlayerTeam.PlayerTeamType.HideTeam, i);
                if (playerBase.Hp != 0)
                {
                    HideWin = true;
                    break;
                }
            }
            if (!HideWin)
            {
                if (localHuman.TeamType == PlayerTeam.PlayerTeamType.HideTeam)
                {
                    ShowJSPopup(0);
                }
                else
                {
                    ShowJSPopup(1);
                }
            }
            else
            {
                if (localHuman.TeamType == PlayerTeam.PlayerTeamType.HideTeam)
                {
                    var kernel = (GameScene)CServerItem.get().GetClientKernelSink();
                    if (kernel != null)
                    {
                        kernel.SendAwardData(10, 0);  //找到一个人奖励
                    }
                    ShowJSPopup(1);
                }
                else
                {
                    ShowJSPopup(0);
                }
            }
        }
    }
示例#13
0
        //用户离开
        public virtual void OnEventUserLeave(IClientUserItem pIClientUserItem, bool bLookonUser)
        {
            GamePlayer pPlayer = getGamePlayerByUserItem(pIClientUserItem);

            if (pPlayer != null)
            {
                //fix连续断线导致的多个LocalTagger和LocalHide
                if (pPlayer == m_pSelfPlayer)
                {
                    //断线时删除Human
                    GameObjectsManager.GetInstance().ClearPlayers(false);
                }

                removeGamePlayerToList(pPlayer);
                DeletePlayer(pPlayer);
            }
        }
示例#14
0
 public void HiderGameScore(int fTime)
 {
     if (fTime == 150 || fTime == 100 || fTime == 50)
     {
         PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(PlayerTeam.PlayerTeamType.HideTeam);
         if (team != null)
         {
             for (int i = 0; i < team.GetPlayerNum(); i++)
             {
                 PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayer(PlayerTeam.PlayerTeamType.HideTeam, i);
                 if (playerBase.Hp != 0)
                 {
                     playerBase.GameScore += 50;
                 }
             }
         }
     }
 }
    public void EnableLocalAI(PlayerTeam.PlayerTeamType teamType, bool bEnable)
    {
        PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(teamType);

        if (team == null)
        {
            return;
        }

        int nPlayerNum = team.GetPlayerNum();

        for (int i = 0; i < nPlayerNum; i++)
        {
            PlayerBase player = team.GetPlayer(i);

            if (player == null)
            {
                continue;
            }

            if (!player.IsAI)
            {
                continue;
            }

            //Local AI
            if (player.ChairID == HNGameManager.m_iLocalChairID)
            {
                BehaviorDesigner.Runtime.BehaviorTree behaviorTree = player.GetComponent <BehaviorDesigner.Runtime.BehaviorTree>();
                if (behaviorTree != null)
                {
                    behaviorTree.enabled = bEnable;
                }

                UnityEngine.AI.NavMeshAgent navMeshAgent = player.GetComponent <UnityEngine.AI.NavMeshAgent>();
                if (navMeshAgent != null)
                {
                    navMeshAgent.enabled = bEnable;
                }
            }
        }
    }
示例#16
0
    void Update()
    {
        if (TaggerCount != null)
        {
            TaggerCount.text = "0";
        }
        if (HideCount != null)
        {
            HideCount.text = "0";
        }
        for (PlayerTeam.PlayerTeamType teamType = PlayerTeam.PlayerTeamType.TaggerTeam; teamType < PlayerTeam.PlayerTeamType.MaxTeamNum; teamType++)
        {
            PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(teamType);
            if (team == null)
            {
                continue;
            }
            for (int i = 0; i < team.GetPlayerNum(); i++)
            {
                PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayer(teamType, i);
                if (playerBase != null && playerBase.Hp != 0)
                {
                    if (teamType == PlayerTeam.PlayerTeamType.TaggerTeam)
                    {
                        taggerCount++;
                    }
                    else if (teamType == PlayerTeam.PlayerTeamType.HideTeam)
                    {
                        hideCount++;
                    }

                    ShowPlayerTopHeadInfo(playerBase);
                }
            }
            TaggerCount.text = taggerCount.ToString();
            HideCount.text   = hideCount.ToString();
        }

        taggerCount = 0;
        hideCount   = 0;
    }
        //用户托管
        public void OnSubTrustee(byte[] pBuffer, ushort wDataSize)
        {
            var typeValue = typeof(CMD_S_Trustee);

            if (wDataSize != Marshal.SizeOf(typeValue))
            {
                return;
            }

            //消息处理
            CMD_S_Trustee pTrustee = (CMD_S_Trustee)StructConverterByteArray.BytesToStruct(pBuffer, typeValue);

            // UI Log
            HNMJPlayer pPlyer = getPlayerByChairID(pTrustee.wChairID);

            if (pPlyer == null)
            {
                return;
            }
            String strNickName = pPlyer.GetNickName();

            String[] strName = strNickName.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
            if (strName.Length > 0)
            {
                Loom.QueueOnMainThread(() =>
                {
                    ChatSystem.GetInstance.ShowChatText("通知", strName[0] + " 离开了房间!");
                });
            }
            Loom.QueueOnMainThread(() =>
            {
                PlayerBase player = GameObjectsManager.GetInstance().GetPlayerByChairID(pTrustee.wChairID);
                if (player != null)
                {
                    Debug.LogWarning("------------- " + player.ChairID);
                    GameObjectsManager.GetInstance().RemovePlayerByChairID(player.TeamType, (byte)player.ChairID);    //离开房间移除玩家
                }
            });
        }
示例#18
0
    //send and receive heart beat msg thread function
    public void SendHeartBeatMsg()
    {
        CheckConnectVar = true;
        while (NetCore.bConnected)
        {
            Debug.Log("heart beat send");

            Loom.QueueOnMainThread(() =>
            {
                Human localHuman                 = GameObjectsManager.GetInstance().GetLocalHuman();
                Vector3 localPlayerPos           = localHuman.transform.position;
                Vector3 eulerAngles              = localHuman.transform.eulerAngles;
                SprotoType.heartbeat.request req = new heartbeat.request
                {
                    posX = BitConverter.ToInt64(BitConverter.GetBytes((double)localPlayerPos.x), 0),
                    posY = BitConverter.ToInt64(BitConverter.GetBytes((double)localPlayerPos.y), 0),
                    posZ = BitConverter.ToInt64(BitConverter.GetBytes((double)localPlayerPos.z), 0),

                    angleX = BitConverter.ToInt64(BitConverter.GetBytes((double)eulerAngles.x), 0),
                    angleY = BitConverter.ToInt64(BitConverter.GetBytes((double)eulerAngles.y), 0),
                    angleZ = BitConverter.ToInt64(BitConverter.GetBytes((double)eulerAngles.z), 0)
                };
                //req.playerPosMsg = new SprotoType.PlayerPosMsg();
                //req.playerPosMsg.playerIndex = (int)-1;
                //req.playerPosMsg.posX = BitConverter.ToInt64(BitConverter.GetBytes((double)localPlayerPos.x), 0);
                //req.playerPosMsg.posY = BitConverter.ToInt64(BitConverter.GetBytes((double)localPlayerPos.y), 0);
                //req.playerPosMsg.posZ = BitConverter.ToInt64(BitConverter.GetBytes((double)localPlayerPos.z), 0);

                NetSender.Send <Protocol.heartbeat>(req, (_) =>
                {
                    CheckConnectVar = true;
                });
            });

            Thread.Sleep(5000);//5s
        }
        Debug.Log("SendHeartBeatMsg thread exit");
    }
示例#19
0
    private void SetupNetReceiverHandler()
    {
        NetReceiver.AddHandler <Protocol.handshake>((_) =>
        {
            Debug.Log("handshake");
            SprotoType.handshake.request req = _ as handshake.request;
            switch (TheUserLoginState)
            {
            case UserLoginState.LoginStart:
                {
                    //Debug.Log("challenge receive ");
                    _challengeStr = Convert.FromBase64String(req.msg);

                    DH64 dhforKey = new DH64();
                    dhforKey.KeyPair(out _privateKey, out _publicKey);
                    SprotoType.handshake.request clientkey = new handshake.request();

                    clientkey.msg = Convert.ToBase64String(BitConverter.GetBytes(_publicKey));

                    clientkey.socketfd = req.socketfd;
                    NetSender.Send <Protocol.handshake>(clientkey);

                    Debug.Log("challengeStr" + _challengeStr + " ori " + req.msg + " fd " + clientkey.socketfd);
                    TheUserLoginState = UserLoginState.LoginPublicServerKey;
                }
                break;

            case UserLoginState.LoginPublicServerKey:
                {
                    //string serverKey = System.Text.Encoding.Default.GetString(Convert.FromBase64String(req.msg));
                    byte[] ServerKey = Convert.FromBase64String(req.msg);

                    ulong serverKey = BitConverter.ToUInt64(ServerKey, 0);
                    _secretKey      = DH64.Secret(_privateKey, serverKey);
                    SprotoType.handshake.request challengeMsg = new handshake.request();

                    challengeMsg.msg =
                        Convert.ToBase64String(
                            BitConverter.GetBytes(
                                HMac64.hmac(
                                    BitConverter.ToUInt64(_challengeStr, 0),
                                    _secretKey)));

                    challengeMsg.socketfd = req.socketfd;
                    NetSender.Send <Protocol.handshake>(challengeMsg);
                    TheUserLoginState = UserLoginState.LoginCheckSecret;
                }
                break;

            case UserLoginState.LoginCheckSecret:
                {
                    if (Convert.ToBase64String(Encoding.UTF8.GetBytes(challengeSuccess)) == req.msg)
                    {
                        if (UserName != string.Empty)
                        {
                            Debug.Log("login " + UserName);
                            string token = string.Format("{0}:{1}",
                                                         Convert.ToBase64String(Encoding.UTF8.GetBytes(UserName)),
                                                         Convert.ToBase64String(Encoding.UTF8.GetBytes(PassWord)));

                            SprotoType.handshake.request tokenMsg = new handshake.request
                            {
                                msg      = DesCrypt.desencode(_secretKey, token),
                                socketfd = req.socketfd
                            };

                            NetSender.Send <Protocol.handshake>(tokenMsg);

                            TheUserLoginState = UserLoginState.LoginCheckTokenResult;
                        }
                        else
                        {
                            Debug.Log("register");
                            DisplayName  = RandomName.GetRandomName();
                            string token = Convert.ToBase64String(Encoding.UTF8.GetBytes(DisplayName));
                            SprotoType.handshake.request tokenMsg = new handshake.request
                            {
                                msg      = DesCrypt.desencode(_secretKey, token),
                                socketfd = req.socketfd
                            };

                            NetSender.Send <Protocol.handshake>(tokenMsg);
                            TheUserLoginState = UserLoginState.LoginRegistResult;
                        }
                    }
                    else if (Convert.ToBase64String(Encoding.UTF8.GetBytes(challengeFailed)) == req.msg)
                    {
                        Debug.Log("sercet incorrect!");
                        //error handle
                        TheUserLoginState = UserLoginState.LoginFailed;
                    }
                }
                break;

            case UserLoginState.LoginRegistResult:
                {
                    var msg      = Encoding.UTF8.GetString(Convert.FromBase64String(req.msg));
                    var msgArray = msg.Split(':');
                    UserName     = Encoding.UTF8.GetString(Convert.FromBase64String(msgArray[0]));
                    PassWord     = Encoding.UTF8.GetString(Convert.FromBase64String(msgArray[1]));

                    Loom.QueueOnMainThread(() =>
                    {
                        //save registed info
                        PlayerPrefs.SetString("username", UserName);
                        //GameManager.NetWorkClient.UserName = String.Empty;
                        PlayerPrefs.SetString("password", PassWord);
                        PlayerPrefs.SetString("displayname", DisplayName);
                        Debug.Log("saving name " + UserName + " : " + PassWord);
                        PlayerPrefs.Save();
                    });
                    Debug.Log("name " + UserName + " : " + PassWord);

                    //Thread.Sleep(5);
                    TheUserLoginState = UserLoginState.LoginSuccess;
                }
                break;

            case UserLoginState.LoginCheckTokenResult:
            case UserLoginState.LoginSuccess:
                {
                    if (Convert.ToBase64String(Encoding.UTF8.GetBytes(challengeSuccess)) == req.msg)
                    {
                        //Thread.Sleep(5);
                        Debug.Log("token right");

                        TheUserLoginState = UserLoginState.LoginSuccess;

                        // mChen
                        //if(MultiGameState == GameState.Game_NullState)
                        //{
                        //    FindMatch();
                        //}
                    }
                    else if (Convert.ToBase64String(Encoding.UTF8.GetBytes(challengeFailed)) == req.msg)
                    {
                        //error handle
                        TheUserLoginState = UserLoginState.LoginFailed;
                    }
                }
                break;
            }
            //NetSender.Send<Protocol.handshake>(req);
            //Debug.Log(TheUserLoginState.ToString());
            return(null);
        });

        NetReceiver.AddHandler <Protocol.matchMsg>((_) =>
        {
            SprotoType.matchMsg.request req = _ as matchMsg.request;

            switch (req.matchMsgType)
            {
            case (Int64)MatchMsgType.Match_PlayerJoinedRoom:
                int playerTeamType = Convert.ToInt32(req.matchInfo);
                TheUserMatchState  = UserMatchState.JoinedRoom;
                Debug.Log("NetReceiver: matchMsg: MatchMsgType.Match_PlayerJoinRoom: playerTeamType=" + playerTeamType);
                break;

            case (Int64)MatchMsgType.Match_CountDownTime:
                float countDowmTime = Convert.ToSingle(req.matchInfo) / 100;
                Debug.Log("NetReceiver: matchMsg: MatchMsgType.Match_CountDownTime =" + countDowmTime);
                // UI
                Loom.QueueOnMainThread(() =>
                {
                    UIManager.GetInstance().ShowMatchStartCountDown(countDowmTime);
                });
                break;

            case (Int64)MatchMsgType.Match_TryToJoinMatch:
                int result = Convert.ToInt32(req.matchInfo);
                Debug.Log("NetReceiver: matchMsg: MatchMsgType.Match_TryToJoinMatch: result=" + result);
                MultiGameState = GameState.Game_Match;
                if (result == 0)
                {
                    TheUserMatchState = UserMatchState.WaitToJoinNextMatch;
                    Loom.QueueOnMainThread(() =>
                    {
                        UIManager.GetInstance().ShowWaitToJoinNextMatchLabel();
                    });
                }
                else if (result == 1)
                {
                    TheUserMatchState = UserMatchState.PlayingMatch;
                    Loom.QueueOnMainThread(() =>
                    {
                        UIManager.GetInstance().HideWaitToJoinNextMatchLabel();
                    });
                }
                else
                {
                    Debug.Log("error TryToJoinMatch result from Server" + result);
                    throw new Exception("error TryToJoinMatch result from Server");
                }
                break;

            //case (Int64)MatchMsgType.Match_CancelMatching:
            //    if (QuitMatchingMsg != null)
            //    {
            //        QuitMatchingMsg(this, EventArgs.Empty);
            //    }
            //    break;

            default:
                Debug.Log("error match type" + req.matchMsgType);
                throw new Exception("error msg type");
            }
            return(null);
        });

        NetReceiver.AddHandler <Protocol.usersInfoMsg>((_) =>
        {
            if (MultiGameState == GameState.Game_NullState)
            {
                return(null);
            }
            Debug.Log("get usersInfoMsg");

            SprotoType.usersInfoMsg.request req           = _ as SprotoType.usersInfoMsg.request;
            GameObjectsManager.s_LocalPlayerIndexInGlobal = (int)req.curUserGlobalIndex;
            //Debug.Log("get player index in global: " + GameObjectsManager.s_LocalPlayerIndexInGlobal);

            //Create players
            Loom.QueueOnMainThread(() =>
            {
                AllPlayers.Clear();
                GameObjectsManager.GetInstance().ClearPlayers();

                Debug.Log("received usersInfoMsg:");
                foreach (SprotoType.UserInfo serverPlayerinfo in req.userArray)
                {
                    PlayerTeam.PlayerTeamType teamType = (PlayerTeam.PlayerTeamType)serverPlayerinfo.playerTeamType;
                    PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(teamType);
                    int userState   = (int)serverPlayerinfo.userState;

                    Debug.Log("     UserIndexInGlobal=" + serverPlayerinfo.playerIndex + " UserName="******" userState=" + userState + " TeamType=" + teamType);

                    if (serverPlayerinfo.playerIndex == req.curUserGlobalIndex)
                    {
                        // is local player

                        if (userState == (int)UserMatchState.PlayingMatch)
                        {
                            GameObjectsManager.s_LocalHumanTeamType = teamType;
                        }
                    }

                    int playerIndexInTeam = -1;
                    if (userState == (int)UserMatchState.PlayingMatch)
                    {
                        // create a new player

                        playerIndexInTeam = team.AddAPlayer(false);
                    }

                    // set AllPlayers
                    AllPlayers.Add(new MultiPlayerInfo
                    {
                        PlayIndexInGlobal = serverPlayerinfo.playerIndex,
                        PlayerName        = serverPlayerinfo.username,
                        SkinId            = 0,
                        PlayerId          = 1,
                        ThePlayerTeamType = teamType,
                        PlayerIndexInTeam = playerIndexInTeam
                    });
                }
            });

            //TheUserMatchState = UserMatchState.AllPlayersJoinedRoom;
            return(null);
        });

        NetReceiver.AddHandler <Protocol.waitforstart>((_) =>
        {
            Debug.Log("Second half start!!");
            var res = _ as SprotoType.waitforstart.request;
            //mChen
            //switch (GameManager.GetInstance().TheGamePrePeriod)
            //{
            //    case GamePeriod.Opening:
            //        break;
            //    case GamePeriod.FirstHalf:
            //        break;
            //    case GamePeriod.Halftime:
            //        break;
            //    case GamePeriod.CutsceneAfterScoredOr24SecondsViolation:
            //        break;
            //    case GamePeriod.WairForGameToContinue:
            //        break;
            //    case GamePeriod.SecondHalf:
            //        GameManager.GetInstance().HalfTimeReadyFrame = res.readyFrame;
            //        break;
            //    case GamePeriod.Ending:
            //        break;
            //    default:
            //        throw new ArgumentOutOfRangeException();
            //}

            return(null);
        });

        NetReceiver.AddHandler <Protocol.gameTick>((_) =>
        {
            //Debug.Log("response called");
            if (false)//mChen if (GameManager.TheGameMode > GameMode.MultiGame_3v3)
            {
                //when single mode, do not handle this server tick
                return(null);
            }

            if (MultiGameState == GameState.Game_Match)
            {
                MultiGameState = GameState.Game_Running;

                Loom.QueueOnMainThread(() =>
                {
                    UIManager.GetInstance().HideMatchStartCountDown();
                });

                //mChen
                _sendHeartBeatThread = new Thread(SendHeartBeatMsg)
                {
                    IsBackground = true
                };
                //防止后台现成。相反需要后台线程就设为false
                _sendHeartBeatThread.Start();
                while (_sendHeartBeatThread.IsAlive == false)
                {
                }
            }

            SprotoType.gameTick.request res = _ as gameTick.request;
            {
                // bool bOnlyFrameInfo = true;

                if (res.HasButtonMsg)
                {
                    //mChen
                    //foreach (var btnMsg in res.buttonMsg)
                    //{
                    //    ButtonInfo msg = new ButtonInfo
                    //    {
                    //        TeamType =
                    //            (PlayerTeamType)((btnMsg.playerIndex) / GameManager.TeamPlayerNum),
                    //        PlayerIndexInTeam = (btnMsg.playerIndex) % GameManager.TeamPlayerNum,
                    //        FrameNum = res.frame,
                    //        Action = (ButtonAction)btnMsg.btnAction,
                    //        Type = (ButtonType)btnMsg.btnType
                    //    };

                    //    if (btnMsg.HasBtnValueX)
                    //    {
                    //        msg.Value.x = (float)BitConverter.ToDouble(BitConverter.GetBytes(btnMsg.btnValueX), 0);
                    //        msg.Value.y = (float)BitConverter.ToDouble(BitConverter.GetBytes(btnMsg.btnValueY), 0); ;
                    //    }
                    //    ControlManager.GetInstance().AddControlInfo(msg);
                    //    //Debug.Log("Button msg");
                    //}

                    // bOnlyFrameInfo = false;
                }

                //_controllerMsg.Clear();
                if (res.HasControlMsg)
                {
                    //Debug.Log("controller called");
                    //List < ControlMsg > tempList = new List<ControlMsg>();

                    foreach (var resControl in res.controlMsg)
                    {
                        //mChen
                        //DPadInfo msg = new DPadInfo
                        //{
                        //    FrameNum = res.frame,
                        //    TeamType = (PlayerTeamType)(resControl.playerIndex / GameManager.TeamPlayerNum),
                        //    PlayerIndexInTeam = resControl.playerIndex % GameManager.TeamPlayerNum,
                        //    //H = Convert.ToSingle(resControl.x),
                        //    //V = Convert.ToSingle(resControl.y)
                        //    H = (float)BitConverter.ToDouble(BitConverter.GetBytes(resControl.x), 0),
                        //    V = (float)BitConverter.ToDouble(BitConverter.GetBytes(resControl.y), 0)
                        //};

                        //ControlManager.GetInstance().AddControlInfo(msg);
#if false
                        if (ControlManager.GetInstance().GameFrameNum % 150 == 1)
                        {
                            GameManager.GetInstance().InfoStr += string.Format("\n dpad info {0} {1} at frame {2}",
                                                                               msg.H, msg.V, ControlManager.GetInstance().GameFrameNum);
                        }
#endif
                        // Debug.LogFormat("dpad msg frame {0} : h {1} v {2} ", res.frame, msg.H, msg.V);
                    }


                    // bOnlyFrameInfo = false;
                }

                if (res.HasPlayersGamePlayMsg)
                {
                    Loom.QueueOnMainThread(() =>
                    {
                        foreach (var playerGamePlayMsg in res.playersGamePlayMsg)
                        {
                            int playerIndex = (int)playerGamePlayMsg.playerIndex;
                            float posX      = (float)BitConverter.ToDouble(BitConverter.GetBytes(playerGamePlayMsg.posX), 0);
                            float posY      = (float)BitConverter.ToDouble(BitConverter.GetBytes(playerGamePlayMsg.posY), 0);
                            float posZ      = (float)BitConverter.ToDouble(BitConverter.GetBytes(playerGamePlayMsg.posZ), 0);
                            float angleX    = (float)BitConverter.ToDouble(BitConverter.GetBytes(playerGamePlayMsg.angleX), 0);
                            float angleY    = (float)BitConverter.ToDouble(BitConverter.GetBytes(playerGamePlayMsg.angleY), 0);
                            float angleZ    = (float)BitConverter.ToDouble(BitConverter.GetBytes(playerGamePlayMsg.angleZ), 0);
                            //Debug.Log("playerInfoMsg:" + playerGamePlayMsg.playerIndex + " pos:" + posX + posY + posZ);

                            if (playerIndex == GameObjectsManager.s_LocalPlayerIndexInGlobal)
                            {
                            }
                            else
                            {
                                PlayerTeam.PlayerTeamType teamType = AllPlayers[playerIndex].ThePlayerTeamType;
                                int playerIndexInTeam = AllPlayers[playerIndex].PlayerIndexInTeam;
                                PlayerBase player     = GameObjectsManager.GetInstance().GetPlayer(teamType, playerIndexInTeam);
                                if (player != null)
                                {
                                    player.transform.position    = new Vector3(posX, posY, posZ);
                                    player.transform.eulerAngles = new Vector3(angleX, angleY, angleZ);
                                }
                            }
                        }
                    });
                }

                //添加一般帧信息
                //if (bOnlyFrameInfo)
                {
                    //mChen ControlManager.GetInstance().AddControlInfo(res.frame);
                }
            }
            return(null);
        });

        NetReceiver.AddHandler <Protocol.restoreStates>((_) =>
        {
            var req           = _ as SprotoType.restoreStates.request;
            TheUserMatchState = (UserMatchState)req.serverState;
            Debug.Log("resotre user state now " + TheUserMatchState.ToString());
            var infoArray = req.stateInfo.Split(':');

            switch (req.serverState)
            {
            case (int)UserMatchState.FindRoom:
                ParseFindMatchMsg(infoArray);
                TheUserMatchState = UserMatchState.FindRoom;
                //mChen Loom.QueueOnMainThread(GameUIManager.GetInstance().UIChangeToMatching);
                //GameUIManager.GetInstance().UIChangeToMatching();//go to matching ui
                break;
            }
            return(null);
        });
    }
示例#20
0
    void Start()
    {
        //mChen add, try to fix返回大厅后,有小概率HideTeam会剩余一个没清除
        GameObjectsManager.GetInstance().ClearPlayers();

        m_fDeltaTimeAfterLastClick = 0f;

        Debug.Log("startcj");
        Canvas         = GameObject.Find("Canvas");
        DiamondNum     = Canvas.transform.Find("Diamond/DiamondCount").GetComponent <Text>();
        GlodNum        = Canvas.transform.Find("Glod/GlodCount").GetComponent <Text>();
        StoreDiamonNum = Canvas.transform.Find("Window/StoreWindow/Diamond/DiamondCount").GetComponent <Text>();
        StoreGlodNum   = Canvas.transform.Find("Window/StoreWindow/Glod/GlodCount").GetComponent <Text>();

        ExpNum    = Canvas.transform.Find("Experience/ExperienceFill").GetComponent <Image>();
        ExpNumTxt = Canvas.transform.Find("Experience/Level").GetComponent <Text>();
        Name      = Canvas.transform.Find("User/Name").GetComponent <Text>();
        Name.text = GlobalUserInfo.getNickName();
        ID        = Canvas.transform.Find("User/ID").GetComponent <Text>();
        ID.text   = GlobalUserInfo.getUserID().ToString();

        RoomIdValue   = 0;
        hnGameManager = GameObject.FindObjectOfType <HNGameManager>();

        //GameHall场景隐藏GameLogoUI
        hnGameManager.gameplayUIETC.SetActive(false);
        hnGameManager.gamePlayUI_HT.SetActive(false);

        HeadImage = Canvas.transform.Find("User/UserMask/UserImage").GetComponent <Image>();
        if (hnGameManager != null)
        {
            //Sound
            Slider musicSlider = transform.Find("SetupWindow/Music/Slider").GetComponent <Slider>();
            if (musicSlider != null)
            {
                musicSlider.value = hnGameManager.BackgroundAudioSource.volume;
            }

            Slider soundSlider = transform.Find("SetupWindow/Sound/Slider").GetComponent <Slider>();
            if (soundSlider != null)
            {
                soundSlider.value = hnGameManager.GlobalEffectAudioSource.volume;
            }

            //Rule
            hnGameManager.m_baseScore          = 1;
            hnGameManager.m_cbPlayCoutIdex     = 0;
            hnGameManager.m_cbPlayCostTypeIdex = 1;

            //mChen add, for HideSeek
            hnGameManager.m_cbGameEndReason = HNMJ_Defines.GER_NOT_END;
        }

        //控制方案切换
        ControlCase = Canvas.transform.Find("Window/SetupWindow/ControlCase").GetComponent <Button>();
        ControlCase.gameObject.GetComponent <Image>().sprite = Resources.Load("UI/EasyTouchCase/" + HNGameManager.ControlCase, typeof(Sprite)) as Sprite;
        ControlCase.onClick.RemoveAllListeners();
        ControlCase.onClick.AddListener(() =>
        {
            HNGameManager.ControlCase++;
            HNGameManager.ControlCase %= 4;
            ControlCase.gameObject.GetComponent <Image>().sprite = Resources.Load("UI/EasyTouchCase/" + HNGameManager.ControlCase, typeof(Sprite)) as Sprite;
        });
        //ControlType.Add(Canvas.transform.Find("Window/SetupWindow/Joystick/ChangeWindow/BackImage/Joystick1").gameObject.GetComponent<Toggle>());
        //ControlType.Add(Canvas.transform.Find("Window/SetupWindow/Joystick/ChangeWindow/BackImage/Joystick2").gameObject.GetComponent<Toggle>());
        UpdateControlType();
        UserInfo.getInstance().reqAccountInfo();
    }
示例#21
0
 void SelfDestruct()
 {
     GameObjectsManager.RetireObject("bullet", gameObject);
     gameObject.SetActive(false);
 }
        public void OnSubInventoryConsumptionEvent(byte[] pBuffer, ushort wDataSize)
        {
            Debug.LogWarning("------------OnSubInventoryConsumptionEvent");
            var typeValue = typeof(CMD_S_InventoryConsumptionEvent);

            if (wDataSize != Marshal.SizeOf(typeValue))
            {
                Debug.LogError("数据长度不符合");
                return;
            }
            CMD_S_InventoryConsumptionEvent InfoResult = (CMD_S_InventoryConsumptionEvent)StructConverterByteArray.BytesToStruct(pBuffer, typeValue);

            if (InfoResult.cbChairID != HNGameManager.m_iLocalChairID)    //接收其他人的道具使用信息
            {
                PlayerBase player = GameObjectsManager.GetInstance().GetPlayerByChairID(InfoResult.cbChairID);
                if (player != null)
                {
                    switch ((ControlManager.InventoryItemID)InfoResult.cbItemID)
                    {
                    case ControlManager.InventoryItemID.ChangeModel:     //变身
                        Loom.QueueOnMainThread(() => { ControlManager.GetInstance().ChangeModel(player.gameObject, InfoResult.dwModelIndex); });
                        break;

                    case ControlManager.InventoryItemID.Stealth:     //隐身
                    {
                        if (InfoResult.cbStealthStatus == 0)
                        {
                            Loom.QueueOnMainThread(() => { ControlManager.GetInstance().Stealth(player.gameObject, true); });
                        }
                        else if (InfoResult.cbStealthStatus == 1)
                        {
                            Loom.QueueOnMainThread(() => { ControlManager.GetInstance().Stealth(player.gameObject, false); });
                        }
                    }
                    break;

                    case ControlManager.InventoryItemID.Resurrection:     //复活
                        Loom.QueueOnMainThread(() => { ControlManager.GetInstance().Resurrection(player.gameObject); });
                        break;
                    }
                }
            }
            else    //接收自己的道具使用信息
            {
                //使用道具
                switch ((ControlManager.InventoryItemID)InfoResult.cbItemID)
                {
                case ControlManager.InventoryItemID.ChangeModel:     //变身
                    Loom.QueueOnMainThread(() => { ControlManager.GetInstance().ChangeModel(InfoResult.dwModelIndex); });
                    break;

                case ControlManager.InventoryItemID.Stealth:     //隐身
                {
                    if (InfoResult.cbStealthStatus == 0)
                    {
                        Loom.QueueOnMainThread(() =>
                            {
                                ControlManager.GetInstance().Stealth(true);
                                ControlManager.GetInstance().StealthTime(255);
                            });
                    }
                    else if (InfoResult.cbStealthStatus == 1)
                    {
                        Loom.QueueOnMainThread(() =>
                            {
                                ControlManager.GetInstance().Stealth(false);
                                ControlManager.GetInstance().StealthTime(InfoResult.cbStealthTimeLeft);
                            });
                    }
                }
                break;

                case ControlManager.InventoryItemID.Resurrection:     //复活
                    Loom.QueueOnMainThread(() => { ControlManager.GetInstance().Resurrection(); });
                    break;
                }
            }
        }
示例#23
0
    //检测道具使用
    private void CheckInventoryUse()
    {
        Human localHuman = null;

        if (GameObjectsManager.GetInstance() != null)
        {
            localHuman = GameObjectsManager.GetInstance().GetLocalHuman();
        }
        if (localHuman != null && localHuman.TeamType == PlayerTeam.PlayerTeamType.TaggerTeam)
        {
            if (ListInventory.Count != 0 && ListInventory != null)
            {
                for (int i = 0; i < ListInventory.Count; i++)
                {
                    if (ListInventory[i].obj != null && !ListInventory[i].bUsed)
                    {
                        String[] str = ListInventory[i].obj.name.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
                        switch (str[1])
                        {
                        case "Search":
                            if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 &&
                                Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 &&
                                !ListInventory[i].bTaked)
                            {
                                PlayerTeam team       = GameObjectsManager.GetInstance().GetPlayerTeam(PlayerTeam.PlayerTeamType.HideTeam);
                                PlayerBase playerBase = null;
                                if (team.GetPlayerNum() != 0 && localHuman.Hp != 0)
                                {
                                    int count = 0;
                                    while (true)
                                    {
                                        int index = (int)(MersenneTwister.MT19937.Int63() % team.GetPlayerNum());
                                        playerBase = GameObjectsManager.GetInstance().GetPlayer(PlayerTeam.PlayerTeamType.HideTeam, index);
                                        if (playerBase.Hp > 0)
                                        {
                                            break;
                                        }
                                        if (count > 50)      //防止没有存活导致死循环
                                        {
                                            playerBase = null;
                                            break;
                                        }
                                        count++;
                                    }
                                    if (playerBase != null)
                                    {
                                        InventoryObjItem temp = ListInventory[i];
                                        temp.bTaked      = true;
                                        ListInventory[i] = temp;

                                        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                                        {
                                            InventoryRemove(i);
                                            UIManager.GetInstance().ShowMiddleTips("有一个玩家变成了" + playerBase.gameObject.name);
                                        }

                                        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                                        {
                                            // GetInventory event sync
                                            PlayerEventItem getInventoryEvent = new PlayerEventItem();
                                            getInventoryEvent.cbTeamType   = (byte)GameObjectsManager.s_LocalHumanTeamType;
                                            getInventoryEvent.wChairId     = (ushort)HNGameManager.m_iLocalChairID;
                                            getInventoryEvent.cbAIId       = HNMJ_Defines.INVALID_AI_ID;
                                            getInventoryEvent.cbEventKind  = (byte)PlayerBase.PlayerEventKind.GetInventory;
                                            getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id;
                                            getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Search;
                                            GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent);
                                        }
                                    }
                                }
                            }
                            break;

                        case "Boom":
                            if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 &&
                                Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 &&
                                !ListInventory[i].bTaked)
                            {
                                if (!HaveBoom && localHuman.Hp != 0)
                                {
                                    InventoryObjItem temp = ListInventory[i];
                                    temp.bTaked      = true;
                                    ListInventory[i] = temp;

                                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                                    {
                                        HaveBoom = true;
                                        InventoryRemove(i);
                                        //GameSceneUIHandler.ShowLog("你拾取了炸弹!!!");
                                        UIManager.GetInstance().ShowMiddleTips("你拾取了炸弹!!!");
                                        ControlManager.GetInstance().BoomButton.gameObject.SetActive(true);
                                    }

                                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                                    {
                                        // GetInventory event sync
                                        PlayerEventItem getInventoryEvent = new PlayerEventItem();
                                        getInventoryEvent.cbTeamType   = (byte)GameObjectsManager.s_LocalHumanTeamType;
                                        getInventoryEvent.wChairId     = (ushort)HNGameManager.m_iLocalChairID;
                                        getInventoryEvent.cbAIId       = HNMJ_Defines.INVALID_AI_ID;
                                        getInventoryEvent.cbEventKind  = (byte)PlayerBase.PlayerEventKind.GetInventory;
                                        getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id;
                                        getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Boom;
                                        GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent);
                                    }
                                }
                            }
                            break;

                        case "Blood":
                            if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 &&
                                Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 &&
                                !ListInventory[i].bTaked)
                            {
                                if (localHuman.Hp < PlayerBase.MaxHp && localHuman.Hp != 0)
                                {
                                    InventoryObjItem temp = ListInventory[i];
                                    temp.bTaked      = true;
                                    ListInventory[i] = temp;

                                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                                    {
                                        localHuman.Hp++;      //生命增加
                                        InventoryRemove(i);
                                        UIManager.GetInstance().ShowMiddleTips("你拾取了生命道具!!!");
                                    }

                                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                                    {
                                        // GetInventory event sync
                                        PlayerEventItem getInventoryEvent = new PlayerEventItem();
                                        getInventoryEvent.cbTeamType   = (byte)GameObjectsManager.s_LocalHumanTeamType;
                                        getInventoryEvent.wChairId     = (ushort)HNGameManager.m_iLocalChairID;
                                        getInventoryEvent.cbAIId       = HNMJ_Defines.INVALID_AI_ID;
                                        getInventoryEvent.cbEventKind  = (byte)PlayerBase.PlayerEventKind.GetInventory;
                                        getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id;
                                        getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Blood;
                                        GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent);

                                        // AddHp event
                                        PlayerEventItem addHpEvent = new PlayerEventItem();
                                        addHpEvent.cbTeamType  = (byte)GameObjectsManager.s_LocalHumanTeamType;
                                        addHpEvent.wChairId    = (ushort)HNGameManager.m_iLocalChairID;
                                        addHpEvent.cbAIId      = HNMJ_Defines.INVALID_AI_ID;
                                        addHpEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.AddHp;
                                        GameObjectsManager.GetInstance().PlayerEventList.Add(addHpEvent);
                                    }
                                }
                            }
                            break;

                        case "Speed":
                            if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 &&
                                Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 &&
                                !ListInventory[i].bTaked)
                            {
                                if (ControlManager.GetInstance()._etcJoystickL.axisX.speed == ControlManager.s_speed && localHuman.Hp != 0 && localHuman.m_isGrounded)
                                {
                                    InventoryObjItem temp = ListInventory[i];
                                    temp.bTaked      = true;
                                    ListInventory[i] = temp;

                                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                                    {
                                        InventoryRemove(i);
                                        UIManager.GetInstance().ShowMiddleTips("你拾取了加速道具!!!");
                                        ControlManager.GetInstance().SpeedChange(ControlManager.s_speed * 3);
                                        StartCoroutine(InventorySpeed());
                                    }

                                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                                    {
                                        // GetInventory event sync
                                        PlayerEventItem getInventoryEvent = new PlayerEventItem();
                                        getInventoryEvent.cbTeamType   = (byte)GameObjectsManager.s_LocalHumanTeamType;
                                        getInventoryEvent.wChairId     = (ushort)HNGameManager.m_iLocalChairID;
                                        getInventoryEvent.cbAIId       = HNMJ_Defines.INVALID_AI_ID;
                                        getInventoryEvent.cbEventKind  = (byte)PlayerBase.PlayerEventKind.GetInventory;
                                        getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id;
                                        getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Speed;
                                        GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent);
                                    }
                                }
                            }
                            break;

                        case "Key":
                            if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 &&
                                Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 &&
                                !ListInventory[i].bTaked)
                            {
                                //Debug.Log("--------Key1");
                                if (localHuman.transform.FindChild("Inventory_Arrow") == null && localHuman.Hp != 0)
                                {
                                    PlayerTeam team       = GameObjectsManager.GetInstance().GetPlayerTeam(PlayerTeam.PlayerTeamType.HideTeam);
                                    PlayerBase playerBase = null;
                                    if (team.GetPlayerNum() != 0)
                                    {
                                        int count = 0;
                                        while (true)
                                        {
                                            int index = (int)(MersenneTwister.MT19937.Int63() % team.GetPlayerNum());
                                            playerBase = GameObjectsManager.GetInstance().GetPlayer(PlayerTeam.PlayerTeamType.HideTeam, index);
                                            if (playerBase.Hp > 0)
                                            {
                                                break;
                                            }
                                            if (count > 50)      //防止没有存活导致死循环
                                            {
                                                playerBase = null;
                                                localHuman = null;
                                                break;
                                            }
                                            count++;
                                        }
                                        if (playerBase != null && localHuman != null)
                                        {
                                            if (DirectionKey.GetInstance != null)
                                            {
                                                InventoryObjItem temp = ListInventory[i];
                                                temp.bTaked      = true;
                                                ListInventory[i] = temp;

                                                if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                                                {
                                                    DirectionKey.GetInstance.Deal(localHuman.gameObject, playerBase.gameObject);
                                                    InventoryRemove(i);
                                                    UIManager.GetInstance().ShowMiddleTips("你拾取了钥匙道具!!!");
                                                }

                                                if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                                                {
                                                    // GetInventory event sync
                                                    PlayerEventItem getInventoryEvent = new PlayerEventItem();
                                                    getInventoryEvent.cbTeamType   = (byte)GameObjectsManager.s_LocalHumanTeamType;
                                                    getInventoryEvent.wChairId     = (ushort)HNGameManager.m_iLocalChairID;
                                                    getInventoryEvent.cbAIId       = HNMJ_Defines.INVALID_AI_ID;
                                                    getInventoryEvent.cbEventKind  = (byte)PlayerBase.PlayerEventKind.GetInventory;
                                                    getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id;
                                                    getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Key;
                                                    GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                        }
                    }
                }
            }
        }
    }
    public void PickupObject(GameObject objToPick, Vector3 pickupPos)
    {
        if (gameObject.GetComponent <PlayerBase>().TeamType == PlayerTeam.PlayerTeamType.HideTeam)  //躲藏的玩家无法执行找操作
        {
            return;
        }
        else
        {
            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
            {
                byte Gamestate = CServerItem.get().GetGameStatus();
                if (Gamestate != SocketDefines.GAME_STATUS_PLAY)
                {
                    return;
                }
            }
            else if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
            {
                if (GameManager.s_singleGameStatus != SocketDefines.GAME_STATUS_PLAY)
                {
                    return;
                }
            }
        }
        if (objToPick == null || this.Hp <= 0)
        {
            return;
        }

        if (this.IsAI)
        {
            //AI没有用射线检测,也就没有距离判断,所以这里要加入

            Vector3 distToPick = objToPick.transform.position - this.transform.position;
            if (distToPick.magnitude > ControlManager.s_MaxTouchCheckDistance)
            {
                Debug.LogError("-----------距离过远!!!!!" + distToPick.magnitude + " " + objToPick.transform.position + " " + this.transform.position);
                //if (objToPick.tag == "Hide" || objToPick.tag == "NormalFurniture") //objToPick.name
                {
                    UIManager.GetInstance().ShowPickupTooFarText();

                    return;
                }
            }
        }

        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
        {
            // Pick event sync
            PlayerEventItem pickEvent = new PlayerEventItem();
            pickEvent.cbTeamType  = (byte)TeamType;
            pickEvent.wChairId    = (ushort)ChairID;
            pickEvent.cbAIId      = (byte)AIId;
            pickEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.Pick;
            GameObjectsManager.GetInstance().PlayerEventList.Add(pickEvent);
        }
        else
        {
            if (IsAI || !ControlManager.isPerson_1st)  //只有第三人称才有拾取动画
            {
                if (IsLocalHuman())
                {
                    EnableModelDisplay();
                }

                PlayPickupAnim();
                //if (_avatarAnimator != null)
                //{
                //    _avatarAnimator.SetBool("Pickup_b", true);
                //}
            }
        }

        PlayerBase pickedPlayer    = null;
        string     strObjToPickTag = null;

        if (this.IsAI)
        {
            //this是AI时,传的objToPick是根节点(PlayerBase都在根节点)

            pickedPlayer = objToPick.GetComponent <PlayerBase>();

            if (pickedPlayer == null)
            {
                //objToPick是场景中的物体,不是躲藏者

                strObjToPickTag = objToPick.tag;
            }
            else
            {
                Transform model = pickedPlayer.transform.FindChild("Model");
                if (model != null)
                {
                    strObjToPickTag = model.tag;    //tag在model节点
                }
                else
                {
                    Debug.LogError("PickupObject IsAI: model==null");
                }
            }
        }
        else
        {
            //this不是AI时,objToPick如果是躲藏者,传的是Model子节点,否则传的也是根节点

            pickedPlayer = objToPick.transform.parent.GetComponent <PlayerBase>();
            if (pickedPlayer == null)
            {
                //objToPick是场景中的物体,不是躲藏者

                strObjToPickTag = objToPick.tag;
            }
            else
            {
                strObjToPickTag = objToPick.tag;
            }
        }

        if (strObjToPickTag == "Hide" || (strObjToPickTag == "LocalHuman" && pickedPlayer != null && pickedPlayer.TeamType == PlayerTeam.PlayerTeamType.HideTeam)) //objToPick.name
        {
            ObjNamePicked = pickedPlayer.gameObject.name;
            Debug.Log(gameObject.name + " touched Hide: " + ObjNamePicked);

            if (IsLocalHuman())
            {
                Debug.Log("I'm touched Hide: " + ObjNamePicked);
            }

            // Check if objToPick is alive
            if (pickedPlayer != null)
            {
                if (pickedPlayer.IsDead())
                {
                    Debug.Log("It was already dead!");
                }
                else
                {
                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                    {
                        if (IsAI && pickedPlayer.m_isStealth == 1) //AI警察不点隐身的躲藏者
                        {
                            return;
                        }
                        //击杀信息
                        if (gameObject.GetComponent <PlayerBase>().IsAI)
                        {
                            //String[] str = gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                            //String[] pickedStr = pickedPlayer.gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                            UIManager.GetInstance().ShowMiddleTips(gameObject.name + " 找到了: " + pickedPlayer.gameObject.name);
                        }
                        else
                        {
                            String[] str = GlobalUserInfo.getNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
                            //String[] pickedStr = pickedPlayer.gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                            UIManager.GetInstance().ShowMiddleTips(str[0] + " 找到了: " + pickedPlayer.gameObject.name);
                        }

                        // Heal self
                        AddHP();

                        if (m_hnGameManager != null && IsLocalHuman())  //本地玩家找到躲藏者提示
                        {
                            m_hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_HIDE_BEFOUNDED);
                        }

                        // make pickedPlayer dead and destroy later
                        pickedPlayer.MakeDead();
                        //if (!pickedPlayer.IsAI)
                        //{
                        //    PlayerChairIDOfPickedDead = pickedPlayer.ChairID;
                        //}
                    }
                    else
                    {
                        //Debug.LogWarning("+++++++++++++++++ " + pickedPlayer.m_isStealth + " " + IsAI);
                        if (pickedPlayer.m_isStealth == 1 && IsAI)  //AI警察不点隐身的躲藏者
                        {
                            //Debug.LogWarning("----------玩家隐身中");
                            return;
                        }
                        // Dead event sync
                        PlayerEventItem deadEvent = new PlayerEventItem();
                        deadEvent.cbTeamType  = (byte)pickedPlayer.TeamType;
                        deadEvent.wChairId    = (ushort)pickedPlayer.ChairID;
                        deadEvent.cbAIId      = pickedPlayer.AIId;
                        deadEvent.cbEventKind = (byte)PlayerEventKind.DeadByPicked;
                        //killer
                        deadEvent.nCustomData0 = (Int32)this.TeamType;
                        deadEvent.nCustomData1 = (Int32)this.ChairID;
                        deadEvent.nCustomData2 = (Int32)this.AIId;
                        GameObjectsManager.GetInstance().PlayerEventList.Add(deadEvent);
                    }

                    //警察找到躲藏者加分
                    GameScore += 50;
                }
            }
        }
        else if (strObjToPickTag == "NormalFurniture")
        {
            ObjNamePicked = objToPick.transform.parent.name;
            Debug.Log("touched normal furniture: " + ObjNamePicked);

            UIManager.GetInstance().ShowPickupWrongUI(pickupPos); //hit.point

            if (m_hnGameManager != null && IsLocalHuman())        //本地玩家点击错误物体提示
            {
                m_hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_EFFECT_PickObj);
            }
            if (IsLocalHuman())
            {
                UIManager.GetInstance().ShowMiddleTips("该物品不是玩家!");
            }
            if (UIManager.TimeLeft <= 45)   //剩余时间小于45秒时,警察无敌
            {
                return;
            }

            // Hurt self
            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
            {
                DecHP();
            }
            else
            {
                PlayerEventItem decHpEvent = new PlayerEventItem();
                decHpEvent.cbTeamType  = (byte)this.TeamType;
                decHpEvent.wChairId    = (ushort)this.ChairID;
                decHpEvent.cbAIId      = (byte)this.AIId;
                decHpEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.DecHp;
                GameObjectsManager.GetInstance().PlayerEventList.Add(decHpEvent);
            }
        }
        else if (strObjToPickTag == "Tagger")
        {
            ObjNamePicked = pickedPlayer.gameObject.name;
            Debug.Log("touched Tagger: " + ObjNamePicked);
        }
        else
        {
            Debug.LogError("PickupObject: incorrect objToPickTag=" + strObjToPickTag);
        }


        //判断是否团灭
        int taggerCount = 0;
        int hideCount   = 0;

        for (PlayerTeam.PlayerTeamType teamType = PlayerTeam.PlayerTeamType.TaggerTeam; teamType < PlayerTeam.PlayerTeamType.MaxTeamNum; teamType++)
        {
            PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(teamType);
            if (team == null)
            {
                continue;
            }
            for (int i = 0; i < team.GetPlayerNum(); i++)
            {
                PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayer(teamType, i);
                if (playerBase != null && playerBase.Hp != 0)
                {
                    if (teamType == PlayerTeam.PlayerTeamType.TaggerTeam)
                    {
                        taggerCount++;
                    }
                    else if (teamType == PlayerTeam.PlayerTeamType.HideTeam)
                    {
                        hideCount++;
                    }
                }
            }
        }
        if (taggerCount == 0 || hideCount == 0)
        {
            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
            {
                if (UIManager.GetInstance() != null)
                {
                    UIManager.GetInstance().ShowWinOrLose();
                }
                m_hnGameManager.StopSingleGame();
                m_hnGameManager.PlayAgainSingleGame();
            }
        }
    }
示例#25
0
 public void ShowPlayerList()
 {
     for (PlayerTeam.PlayerTeamType teamType = PlayerTeam.PlayerTeamType.TaggerTeam; teamType < PlayerTeam.PlayerTeamType.MaxTeamNum; teamType++)
     {
         PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(teamType);
         for (int i = 0; i < team.GetPlayerNum(); i++)
         {
             PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayer(teamType, i);
             if (playerBase != null)
             {
                 if (playerBase.TeamType == PlayerTeam.PlayerTeamType.TaggerTeam)
                 {
                     TaggerList[i].transform.Find("NumInfo").GetComponent <Text>().text = (i + 1).ToString();
                     string name  = "";
                     string state = "";
                     if (playerBase.IsAI)
                     {
                         //String[] str = playerBase.gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                         //name = str[0] + "_" + str[1] + "_" + str[2];
                         name = playerBase.gameObject.name;
                     }
                     else
                     {
                         if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                         {
                             String[] str = GlobalUserInfo.getNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
                             name = str[0];
                         }
                         else if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                         {
                             var    kernel = (GameScene)CServerItem.get().GetClientKernelSink();
                             string strNN  = kernel.getPlayerByChairID(playerBase.ChairID).GetNickName();
                             if (strNN != "")
                             {
                                 String[] str = strNN.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
                                 name = str[0];
                             }
                             else
                             {
                                 name  = playerBase.gameObject.name;
                                 state = "离开";
                             }
                         }
                     }
                     TaggerList[i].transform.Find("NameInfo").GetComponent <Text>().text = name;
                     if (playerBase.Hp != 0)
                     {
                         TaggerList[i].transform.Find("State").GetComponent <Text>().text = "";
                     }
                     else
                     {
                         TaggerList[i].transform.Find("State").GetComponent <Text>().text = "失败";
                     }
                     if (state == "离开")
                     {
                         TaggerList[i].transform.Find("State").GetComponent <Text>().text = "离开";
                     }
                     TaggerList[i].SetActive(true);
                 }
                 else
                 {
                     HideList[i].transform.Find("NumInfo").GetComponent <Text>().text = (i + 1).ToString();
                     string name  = "";
                     string state = "";
                     if (playerBase.IsAI)
                     {
                         //String[] str = playerBase.gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                         //name = str[0] + "_" + str[1] + "_" + str[2];
                         name = "机器人";
                     }
                     else
                     {
                         if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                         {
                             String[] str = GlobalUserInfo.getNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
                             name = str[0];
                         }
                         else if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                         {
                             var    kernel = (GameScene)CServerItem.get().GetClientKernelSink();
                             string strNN  = kernel.getPlayerByChairID(playerBase.ChairID).GetNickName();
                             if (strNN != "")
                             {
                                 String[] str = strNN.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
                                 name = str[0];
                             }
                             else
                             {
                                 name  = playerBase.gameObject.name;
                                 state = "离开";
                             }
                         }
                     }
                     HideList[i].transform.Find("NameInfo").GetComponent <Text>().text = name;
                     if (playerBase.Hp != 0)
                     {
                         HideList[i].transform.Find("State").GetComponent <Text>().text = "";
                     }
                     else
                     {
                         HideList[i].transform.Find("State").GetComponent <Text>().text = "被发现";
                     }
                     if (state == "离开")
                     {
                         HideList[i].transform.Find("State").GetComponent <Text>().text = "离开";
                     }
                     HideList[i].SetActive(true);
                 }
             }
         }
     }
 }
示例#26
0
    //void Update()
    //{

    //}
    private void OnCollisionEnter(Collision collision)
    {
        //if (collision.collider.tag == "Hide" || collision.collider.tag == "NormalFurniture")
        {
            Debug.Log("---------Boom!!!!!!!!!!!!");
            PlayerTeam team      = GameObjectsManager.GetInstance().GetPlayerTeam(PlayerTeam.PlayerTeamType.HideTeam);
            Human      localHuam = GameObjectsManager.GetInstance().GetLocalHuman();
            if (team != null)
            {
                for (int i = 0; i < team.GetPlayerNum(); i++)
                {
                    PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayer(PlayerTeam.PlayerTeamType.HideTeam, i);
                    if (playerBase != null)
                    {
                        if (Math.Abs(this.gameObject.transform.position.x - playerBase.gameObject.transform.position.x) < 5 &&
                            Math.Abs(this.gameObject.transform.position.y - playerBase.gameObject.transform.position.y) < 5 &&
                            Math.Abs(this.gameObject.transform.position.z - playerBase.gameObject.transform.position.z) < 5)
                        {
                            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                            {
                                playerBase.MakeDead();

                                //playerBase.PlayerChairIDOfPickedDead = playerBase.ChairID;
                                //Debug.Log(temp.name + "击杀了: " + playerBase.gameObject.name);
                                var kernel = (GameScene)CServerItem.get().GetClientKernelSink();
                                if (kernel != null)
                                {
                                    String[] str = kernel.getPlayerByChairID(HNGameManager.m_iLocalChairID).GetNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
                                    UIManager.GetInstance().ShowMiddleTips(str[0] + "击杀了: " + playerBase.gameObject.name);
                                    localHuam.AddHP();
                                }
                            }
                            else
                            {
                                // Dead event sync
                                PlayerEventItem deadEvent = new PlayerEventItem();
                                deadEvent.cbTeamType  = (byte)playerBase.TeamType;
                                deadEvent.wChairId    = (ushort)playerBase.ChairID;
                                deadEvent.cbAIId      = playerBase.AIId;
                                deadEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.DeadByBoom;
                                //killer
                                deadEvent.nCustomData0 = (Int32)localHuam.TeamType;
                                deadEvent.nCustomData1 = (Int32)localHuam.ChairID;
                                deadEvent.nCustomData2 = (Int32)localHuam.AIId;
                                GameObjectsManager.GetInstance().PlayerEventList.Add(deadEvent);
                            }
                        }
                    }
                }
            }

            //炸弹特效
            GameObject loadObj = Resources.Load("Player/Prefabs/Invenrtory/FX Comic Explosion 1 Large BOOM") as GameObject;
            GameObject BoomFX  = Instantiate(loadObj);
            BoomFX.transform.position = gameObject.transform.position;
            Destroy(this.gameObject);

            if (hnGameManager != null)
            {
                hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_EFFECT_Boom);
            }

            // Boom event sync
            PlayerEventItem boomEvent = new PlayerEventItem();
            boomEvent.cbTeamType   = (byte)GameObjectsManager.s_LocalHumanTeamType;
            boomEvent.wChairId     = (ushort)HNGameManager.m_iLocalChairID;
            boomEvent.cbAIId       = HNMJ_Defines.INVALID_AI_ID;
            boomEvent.cbEventKind  = (byte)PlayerBase.PlayerEventKind.Boom;
            boomEvent.nCustomData0 = (Int32)gameObject.transform.position.x;
            boomEvent.nCustomData1 = (Int32)gameObject.transform.position.y;
            boomEvent.nCustomData2 = (Int32)gameObject.transform.position.z;
            GameObjectsManager.GetInstance().PlayerEventList.Add(boomEvent);
        }
    }
示例#27
0
    //显示头顶信息
    public void ShowPlayerTopHeadInfo(PlayerBase playerBase)
    {
        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
        {
            if (GameManager.s_singleGameStatus == SocketDefines.GAME_STATUS_HIDE || GameManager.s_singleGameStatus == SocketDefines.GAME_STATUS_PLAY)
            {
                Human localHuman = GameObjectsManager.GetInstance().GetLocalHuman();
                if (localHuman != null)
                {
                    //本地玩家为警察时不显示躲藏者信息
                    if (localHuman.TeamType == PlayerTeam.PlayerTeamType.TaggerTeam && playerBase.TeamType == PlayerTeam.PlayerTeamType.HideTeam)
                    {
                        playerBase.SetTopInfoVisible(false);
                        return;
                    }
                    goto TopHeadInfo;
                }
                return;
            }
            else
            {
                return;
            }
        }
        else
        {
            if (CServerItem.get() == null)
            {
                return;
            }
            byte Gamestate = CServerItem.get().GetGameStatus();
            if (Gamestate == SocketDefines.GAME_STATUS_HIDE || Gamestate == SocketDefines.GAME_STATUS_PLAY)
            {
                Human localHuman = GameObjectsManager.GetInstance().GetLocalHuman();
                if (localHuman != null)
                {
                    //本地玩家为警察时不显示躲藏者信息
                    if (localHuman.TeamType == PlayerTeam.PlayerTeamType.TaggerTeam && playerBase.TeamType == PlayerTeam.PlayerTeamType.HideTeam)
                    {
                        playerBase.SetTopInfoVisible(false);
                        return;
                    }
                    goto TopHeadInfo;
                }
                else
                {
                    IClientUserItem pMeItem = CServerItem.get().GetMeUserItem();
                    if (pMeItem == null)
                    {
                        return;
                    }

                    int nStatus = pMeItem.GetUserStatus();
                    if (nStatus == SocketDefines.US_LOOKON)
                    {
                        goto TopHeadInfo;
                    }
                }
            }
            else
            {
                return;
            }
        }

TopHeadInfo:
        {
            GameObject InfoPanelObj = playerBase.gameObject.transform.Find("InfoPanel").gameObject;
            if (InfoPanelObj != null)
            {
                TextMesh nameText  = InfoPanelObj.transform.Find("Name").GetComponent <TextMesh>();
                TextMesh levelText = InfoPanelObj.transform.Find("Level").GetComponent <TextMesh>();
                if (playerBase.IsAI)
                {
                    nameText.text  = playerBase.gameObject.name;
                    nameText.color = Color.white;

                    if (levelText.text == "")
                    {
                        levelText.text = "等级:" + UnityEngine.Random.Range(0, 100);
                    }
                    levelText.color = Color.white;
                }
                else
                {
                    var    kernel = (GameScene)CServerItem.get().GetClientKernelSink();
                    string strNN  = "";
                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                    {
                        strNN = GlobalUserInfo.getNickName();
                    }
                    else if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                    {
                        if (kernel != null)
                        {
                            strNN = kernel.getPlayerByChairID(playerBase.ChairID).GetNickName();
                        }
                    }
                    if (strNN != "")
                    {
                        String[] str = strNN.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
                        nameText.text  = str[0];
                        nameText.color = Color.white;
                        if (kernel != null)
                        {
                            tagUserInfo userInfo = (tagUserInfo)kernel.getPlayerByChairID(playerBase.ChairID).GetUserInfo();
                            levelText.text = "等级:" + (userInfo.lExperience / 100).ToString();
                        }
                        else
                        {
                            levelText.text = "等级:" + (GlobalUserInfo.getUserExp() / 100).ToString();
                        }
                        levelText.color = Color.white;
                    }
                }
                if (InfoPanelObj != null)
                {
                    InfoPanelObj.transform.LookAt(Camera.main.transform);
                }
            }
            return;
        }
    }
示例#28
0
        private static void ReadMessage(int id, dynamic obj)
        {
            switch (id)
            {
            case 0:
                int objectId = (int)obj.id;
                int baseId   = (int)obj.bId;
                int x        = (int)obj.x;
                int y        = (int)obj.y;

                try
                {
                    var mobModel = Script.Call <dynamic>("getMobModel", baseId);
                    GameObject.Instantiate <Character>(objectId, x, y, 64, 64, mobModel.resource);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Err:" + objectId);
                    Console.WriteLine(ex.ToString());
                }
                break;

            case 1:
                if (GameObjectsManager.GetObject((int)obj.id, out GameObject go))
                {
                    GameObject.Destroy(go);
                }
                break;

            case 2:
                if (GameObjectsManager.GetObject((int)obj.id, out Character c))
                {
                    c.SetDestination((int)obj.x, (int)obj.y);
                }
                break;

            case 3:
                GameController.Instance.SetMap((int)obj.mapId);
                if (GameObjectsManager.GetObject((int)obj.id, out Character pl))
                {
                    GameController.Instance.SetPlayer(pl);
                    GameController.Instance.player.SetStat(Stat.LVL, (int)obj.lvl);
                    GameController.Instance.player.SetStat(Stat.EXP, (int)obj.exp);
                }
                break;

            case 4:
                GameController.Instance.SetMap((int)obj.mapId);
                GameController.Instance.player.SetPosition((int)obj.x, (int)obj.y);
                break;

            case 5:
                Stat stat = (Stat)(int)obj.stat;
                if (GameObjectsManager.GetObject((int)obj.id, out Character t))
                {
                    t.SetStat(stat, (int)obj.val);
                }
                break;

            case 6:
                DbUniqueItem[] items = JSON.Parse <DbUniqueItem[]>((string)obj.items);
                foreach (var item in items)
                {
                    Script.Call("setInventorySlot", item.slot, item.baseId);
                }
                break;
            }
        }
示例#29
0
 protected virtual void Initialize()
 {
     initialized = true;
     spriteBatch = new SpriteBatch(parent.GraphicsDevice);
     goManager   = new GameObjectsManager(parent.GraphicsDevice);
 }
示例#30
0
 public Actions()
 {
     Player      = new Player(CommonEnums.LocationType.Office);
     GameObjects = new GameObjectsManager();
     Locations   = new LocationsManager();
 }