Example #1
0
    /// <summary>
    /// 玩家状态变更
    /// </summary>
    void OnGetPlayerList(byte[] p)
    {
        if (playerListProto == null)
        {
            playerListProto = new ProtoPlayerList();
        }

        Util.DeSerializeProto <ProtoPlayerList>(p, playerListProto);

        if (Connection.GetInstance().differentUdpPort&& playerListProto != null)
        {
            ProtoPlayerInfo selfInfo = model.GetPlayerInfo();
            int             selfID   = 255;
            selfID = selfInfo == null ? selfID : selfInfo.id;
            for (int i = 0; i < playerListProto.players.Length; i++)
            {
                ProtoPlayerInfo info = playerListProto.players[i];
                if (selfID != info.id)
                {
                    Connection.GetInstance().AddBroadCastPort(info.id);
                }
            }
        }
        Debug.Log("刷新玩家信息");
    }
Example #2
0
    public void ActiveObject(int objectIndex, int serverID)
    {
        bool isPreSet = objectIndex >= 0;
        int  index    = isPreSet ? objectIndex : -objectIndex;

        if (isPreSet)
        {
            if (index < preSetPrefabs.Length)
            {
                GameObject go = preSetPrefabs[index];
                if (go == null)
                {
                    return;
                }
                go.SetActive(true);
                SceneGameObject sgo = go.GetComponent <SceneGameObject>();
                if (sgo != null)
                {
                    ProtoPlayerInfo selfInfo = playerModel.GetPlayerInfo();
                    if (selfInfo != null)
                    {
                        sgo.SetSyncStatus(objectIndex, serverID, true, selfInfo.pos, sgo.GetStartPos(), sgo.GetStartRot());
                        sceneModel.AddSceneObject(sgo);
                    }
                }
            }
        }
    }
Example #3
0
    /// <summary>
    /// 获取用户ID
    /// </summary>
    void OnLogin(byte[] pData)
    {
        ProtoPlayerInfo proto = ObjectPool.protoPool.GetOrCreate <ProtoPlayerInfo>(ProtoPool.ProtoRecycleType.PlayerInfo);

        if (proto.Parse(pData))
        {
            model.SetPlayerInfo(proto);
            Connection.GetInstance().RemoveBroadCastPort(proto.id);
            Connection.GetInstance().SetUpMutiDataUdp(proto.id);
        }
    }
Example #4
0
    /// <summary>
    /// 创建场景对象
    /// </summary>
    /// <param name="objInfo"></param>
    public void CreateObject(int objectIndex, int serverID, ProtoCreateObject sync)
    {
        bool isPreSet = objectIndex >= 0;
        int  index    = isPreSet ? objectIndex : -objectIndex;

        if (index < cratePrefabs.Length)
        {
            GameObject prefab = cratePrefabs[index];
            if (prefab == null)
            {
                Debug.LogError("生成AI:无效对象索引" + objectIndex);
                return;
            }
            GameObject go = GameObject.Instantiate(prefab);
#if UNITY_EDITOR
            go.name = "" + serverID;
#endif
            if (!go.activeSelf)
            {
                go.SetActive(true);
            }
            //获取/初始化配置数据
            BaseAI ai = go.GetComponent <BaseAI>();
            if (ai != null)
            {
                if (Connection.GetInstance().isHost == true)
                {
                    AppearObjectData objCfg = AICreater.GetObjectCfg(sync.hashCode);
                    if (objCfg != null)
                    {
                        ai.InitAIData(objCfg);
                    }
                }
                sceneModel.RegisterAI(ai);
            }

            //设置同步组件
            SceneGameObject sgo = go.GetComponent <SceneGameObject>();
            if (sgo != null)
            {
                ProtoPlayerInfo selfInfo = playerModel.GetPlayerInfo();
                if (selfInfo != null)
                {
                    sgo.SetSyncStatus(objectIndex, serverID, true, selfInfo.pos, sync.GetPos(), sync.GetRot());
                    sceneModel.AddSceneObject(sgo);
                }
            }
        }
        else
        {
            Debug.LogError("生成AI:无效对象索引" + objectIndex);
        }
    }
Example #5
0
 /// <summary>
 /// 发送上传输入
 /// </summary>
 void SendSyncInput(EventArgs args)
 {
     if (playerInfo == null)
     {
         playerInfo = PlayerController.instance.GetModel <PlayerModel>(PlayerModel.name).GetPlayerInfo();
     }
     if (playerInfo == null)
     {
         return;
     }
     selfInputData[0] = playerInfo.pos;
     selfInputData[1] = inputModel.selfFires[0];
     selfInputData[2] = inputModel.selfFires[1];
     Send(ProtoIDCfg.SYNC_INPUT, selfInputData, ProtoType.Importance);
 }
Example #6
0
    void OnMsgLogin(TcpHost.SocketAccept socket, byte[] protoData)
    {
        ProtoPlayerInfo p;
        byte            id = (byte)socket.id;

        if (playerInfos.TryGetValue((byte)id, out p))
        {
            p.connectStatus = 1;
            host.RemoveClient(id);
        }
        else
        {
            byte   loginPos     = protoData[0];
            bool[] inPosPlayers = new bool[10];
            bool   canUsePos    = true;
            foreach (var player in playerInfos)
            {
                if (player.Value.pos == loginPos)
                {
                    canUsePos = false;
                }
                inPosPlayers[player.Value.pos] = true;
            }
            if (!canUsePos)
            {
                for (int i = 1; i < inPosPlayers.Length; i++)
                {
                    if (inPosPlayers[i] == false)
                    {
                        loginPos = (byte)i;
                        break;
                    }
                }
            }
            p               = new ProtoPlayerInfo();
            p.hp            = PlayerCfg.HP;
            p.score         = PlayerCfg.score;
            p.connectStatus = 1;
            p.id            = id;
            p.pos           = loginPos;

            playerInfos.Add(id, p);
            Debug.LogWarning("玩家加入" + id);
            SyncPlayerList();
        }
        //返回角色数据
        SendMsg(socket.id, ProtoIDCfg.LOGIN, p);
    }
Example #7
0
 public void SetPlayerInfo(ProtoPlayerInfo playerProto)
 {
     playerID = playerProto.id;
     selfInfo = playerProto;
     Debug.Log("玩家ID:" + playerID + " 位置:" + playerProto.pos);
 }