public override void OnResponse(string data)
    {
        //由于SendRequest执行的时机,点击创建房间后,是在加载RoomPanel时马上获得该Request执行SendRequest,然后又很快的执行OnResponse,所以SendRequest与OnResponse
        //执行间隔很短,OnResponse的执行可能在Start之前完成,就会导致_roomPanel报空
        //所以放在更早的Awake进行初始化。这里不能进行初始化,因为新开线程不能调用主线程的内容
        //
        //解析data
        string[] dataArr = data.Split('#');

        ReturnType returnType = (ReturnType)int.Parse(dataArr[0]);

        if (returnType == ReturnType.Successful)
        {
            //说明创建房间成功-剩余工作交给RoomPanel进行
            //获得服务器分配的角色
            RoleColor roleColor = (RoleColor)(int.Parse(dataArr[1]));
            //设置该客户端的角色类型
            GameFacade.Instance.PlayerManager.SetCurrentControllRoleColor(roleColor);
            _roomPanel.HandleCreatRoomResponse(true);
        }
        else if (returnType == ReturnType.Failed)
        {
            //说明创建房间失败-剩余工作交给RoomPanel进行
            _roomPanel.HandleCreatRoomResponse(false);
        }
    }
示例#2
0
    /// <summary>
    /// 发送同步箭请求
    /// </summary>
    /// <param name="roleType">发射这个箭的角色类型</param>
    /// <param name="positon">箭的位置</param>
    /// <param name="rotation">箭的方向</param>
    public void SendRequest(RoleColor roleColor, Vector3 positon, Vector3 rotation)
    {
        string  data             = (int)roleColor + "*" + positon.x + "#" + positon.y + "#" + positon.z + "*" + rotation.x + "#" + rotation.y + "#" + rotation.z;
        Request syncArrowRequest = new Request((int)requestType, (int)actionType, data);

        byte[] dataBytes = ConverterTool.SerialRequestObj(syncArrowRequest);
        GameFacade.Instance.ClientManager.SendMsgToServer(dataBytes);
        //GameFacade.Instance.ClientManager.SendRequestToServer(requestCode, actionCode, data);
    }
示例#3
0
    /// <summary>
    ///
    /// </summary>
    private void SyncRemoteRoleArrow(RoleColor roleColor, Vector3 position, Vector3 eulerAngles)
    {
        //获得远端角色的箭的预制体
        GameObject remoteRoleArrowPrefab = GameFacade.Instance.PlayerManager.roleDataDict.TryGet(roleColor).ArrowPrefab;
        //在这个客户端进行实例化
        GameObject remoteArr = Instantiate(remoteRoleArrowPrefab, position, Quaternion.Euler(eulerAngles));

        //设置箭的类型-远端箭
        remoteArr.GetComponent <Arrow>().arrowInstantType = ArrowInstantiateType.Remote;
    }
    /// <summary>
    /// 为当前控制的角色添加组件
    /// </summary>
    public void AddComponentToCurrentControllRole()
    {
        //添加移动组件
        _currentControllRoleGo.AddComponent <PlayerMove>();
        //获取该角色的角色类型-【虽然和这里的_currentControllRoleType相同】
        RoleColor roleColor = _currentControllRoleGo.GetComponent <RoleInfo>().roleColor;
        //添加攻击组件
        PlayerAttack pa = _currentControllRoleGo.AddComponent <PlayerAttack>();

        //设置箭的预制体
        pa.arrowPrefab = roleDataDict.TryGet(roleColor).ArrowPrefab;
    }
示例#5
0
    /// <summary>
    /// 处理同步箭请求的响应
    /// </summary>
    /// <param name="data"></param>
    public override void OnResponse(string data)
    {
        //解析数据
        string[]  dataArr   = data.Split('*');
        RoleColor arrowType = (RoleColor)int.Parse(dataArr[0]);//获得箭是那种角色发的

        string[] positionArr    = dataArr[1].Split('#');
        string[] eulerAnglesArr = dataArr[2].Split('#');
        Vector3  position       = new Vector3(float.Parse(positionArr[0]), float.Parse(positionArr[1]), float.Parse(positionArr[2]));
        Vector3  eulerAngles    = new Vector3(float.Parse(eulerAnglesArr[0]), float.Parse(eulerAnglesArr[1]), float.Parse(eulerAnglesArr[2]));

        //按照这些数据进行创建-改变标志位-后交给Update来处理
        _remoteRoleArrowInitPosition    = position;
        _remoteRoleArrowInitEulerAngles = eulerAngles;
        _remoteRoleColor = arrowType;
        isNeedSyncArrow  = true;//改变标志位-执行
    }
    /// <summary>
    /// 处理加入房间请求的响应
    /// </summary>
    /// <param name="data"></param>
    public override void OnResponse(string data)
    {
        //解析响应数据
        string[]   dataStrArr = data.Split('-');//1级分割
        ReturnType returnType = (ReturnType)int.Parse(dataStrArr[0]);

        if (returnType == ReturnType.Successful)
        {
            //解析服务器分配的角色类型
            RoleColor roleColor = (RoleColor)int.Parse(dataStrArr[1]);
            //设置角色类型
            GameFacade.Instance.PlayerManager.SetCurrentControllRoleColor(roleColor);
            //用于存储解析出来的数据
            List <User>  userList  = new List <User>();
            List <Score> scoreList = new List <Score>();
            //加入房间成功
            string[] usersdataStrArr = dataStrArr[2].Split('*');//二级分割
            foreach (string temp in usersdataStrArr)
            {
                string[] userdata   = temp.Split('#'); //三级分割
                string   username   = userdata[1];     //从1下标开始,0是id,目前用不上
                int      totalCount = int.Parse(userdata[2]);
                int      winCount   = int.Parse(userdata[3]);
                User     user       = new User();
                user.Username = username;
                Score score = new Score();
                score.TotalCount = totalCount;
                score.WinCount   = winCount;
                userList.Add(user);
                scoreList.Add(score);
            }
            //后续操作交给RoomListPanel
            _roomListPanel.HandleJoinRoomResponse(true, userList, scoreList);
        }
        else if (returnType == ReturnType.Failed)
        {
            //加入房间失败.
            //后续操作交给RoomListPanel
            _roomListPanel.HandleJoinRoomResponse(false, null, null);
        }
    }
 /// <summary>
 /// 设置当前控制角色【弃用】
 /// </summary>
 /// <param name="roleType"></param>
 //public void SetCurrentControllRoleType(RoleType roleType)
 //{
 //    _currentControllRoleType = roleType;
 //}
 public void SetCurrentControllRoleColor(RoleColor roleColor)
 {
     _currentControllRoleColor = roleColor;
 }
 /// <summary>
 /// 角色数据模型
 /// </summary>
 /// <param name="roleType">角色类型</param>
 /// <param name="rolePrefabPath">角色预制体路径</param>
 /// <param name="arrowPrefabPath">该角色箭的预制体路径</param>
 /// <param name="effectPrefab">该角色箭的命中特效预制体路径</param>
 public RoleData(RoleColor roleColor, string rolePrefabPath, string arrowPrefabPath)
 {
     _roleColor   = roleColor;
     _rolePrefab  = Resources.Load(rolePrefabPath) as GameObject;
     _arrowPrefab = Resources.Load(arrowPrefabPath) as GameObject;
 }