Exemplo n.º 1
0
        public override void execute(short cmd, short ErrCode, byte[] payloads)
        {
            base.execute(cmd, ErrCode, payloads);
                        #if PROTOBUFF
            #region ######
            TimerMgr.Register("delayHeartBeat", 15f, () => {
                DebugTool.LogRed("发送心跳包");
                //              var mydata = GameProxy.mine;
                //              msg.PlayerInfo playerinfo = new msg.PlayerInfo ();
                //              playerinfo.FrameIndex = 0;
                //              playerinfo.Level = mydata.level;
                //              playerinfo.Userid = mydata.userid;
                //              playerinfo.Nickname = mydata.nickname;
                //              playerinfo.SpawnPos = mydata.spawnPos;//TODO 处理拉回
                Netmanager.sendHeartBeating();
            });
            #endregion


            try {
                var data       = getData <msg.Rspn_HeartBeating> ();
                var statusCode = data.Status;
                // List<msg.PlayerInfo> playerList = data.PlayerList;
                // 暂不使用心跳把拉回坐标 2019.3.26 facade.DispatchEvent (new CEvent (Event_Player.SyncPos_HeartBeat.ToString (), new object[]{ playerList }));

                DebugTool.LogRed(string.Format("收到服务器返回 心跳包:<<<<<<<<<  statusCode :{0}", statusCode));
            } catch (Exception ex) {
                DebugTool.LogError(ex.Message);
            }
//			TimerMgr.Register ("delayHeartBeat", 15f, () => {
//				DebugTool.LogRed ("发送心跳包");
//				msg.PlayerInfo playerinfo = new msg.PlayerInfo();
//				playerinfo.FrameIndex = 0 ;
//				playerinfo.Level =
//				Netmanager.sendHeartBeating (playerinfo);
//			});
                        #else
            foreach (var item in payloads)
            {
                DebugTool.LogYellow(item);
            }
            getData();

            var statusCode = ReadInt();

            DebugTool.LogRed(string.Format("收到服务器返回 心跳包:<<<<<<<<<  statusCode :{0}", statusCode));
            TimerMgr.Register("delayHeartBeat", 15f, () => {
                DebugTool.LogRed("发送心跳包");
                Netmanager.sendHeartBeating();
            });
                        #endif

//			facade.DispatchEvent (new CEvent (Event_Player.New_player.ToString (), new object[]{ data }));
        }
        private void Updated()
        {
            if (minStopDis < role.stepOffset)
            {
                minStopDis = role.stepOffset;
            }

            //tt -= Time.deltaTime;

            if (this.role == null || this.anim == null)
            {
                return;
            }

            //============================================================================

            if (_targetPoint != Vector3.zero)
            {
                targetPos = _targetPoint;
            }
            //======= debug print
            //if (tt < 0f)
            //{
            //var boo = dis > minStopDis;
            //if (boo) Debug.Log("can move :: " + boo + " - > dis:: " + dis + " stopDis:: " + minStopDis + " / speed::" + curSpeed + " / turn::" + curTurn);

            //tt = 5f;
            //}
            Debug.DrawLine(this.role.transform.position, this.role.transform.position + this.role.gameObject.transform.forward, Color.grey);
            //        Debug.DrawLine(this.role.transform.position, this.role.transform.position + Vector3.back, Color.green);
            //        Debug.DrawLine(this.role.transform.position, this.role.transform.position + Vector3.forward, Color.green);
            //        Debug.DrawLine(this.role.transform.position, this.role.transform.position + Vector3.left, Color.green);
            //        Debug.DrawLine(this.role.transform.position, this.role.transform.position + Vector3.right, Color.green);
            //        Debug.DrawLine(this.role.transform.position, targetPos + this.role.transform.forward * 1.2f, Color.yellow);
            //        Debug.DrawLine(this.role.transform.position, targetPos, Color.blue);
            //=======


            //        if (!_isMovingTarget)
            //        {
            //            vv = .4f;
            //        }
            //=================
            //        Debug.Log("->> " + dis +"|"+ minStopDis);
            //		if (setDis > minStopDis)
            //		{
            //			arrived = false;
            //			//			step = 0;
            //		}
            //		else
            //		{
            //			arrived = true;
            //			//			step = 1;
            //		}

            //=================
            dis = ((Vector3.Distance(this.role.transform.position, targetPos)));             // + this.role.transform.forward * .2f)));

            var target_offset = targetPos + this.role.transform.forward * 1.2f;

            //		Debug.DrawLine(targetPos + this.role.transform.forward * 1f ,targetPos, Color.red);
            //	Debug.DrawLine(targetPos , target_offset, Color.red);
            //		dir = 0f;
            //		_dir = Mathf.Clamp(_dir, -.4f, .4f);
            if (arrived == false)
            {
                dir = Vector3.Dot(this.role.transform.right, target_offset - this.role.transform.position);
                //						Debug.Log (" 未到达目的地 ");
                switch (walkMode)
                {
                case true:
                {                        //走
                    //Debug.Log("walk");
                    if (dis <= edgs)     // / 2f)//近距
                    {
                        if (Forward > .4f * ss)
                        {
                            Forward -= .001f * ss;
                        }
                        //							Forward = 1f;
                        else
                        {
                            Forward = .3f;
                        }
                    }
                    else if (dis > edgs)                                //远距
                    {
                        Forward = .6f * ss;
                    }
                    //					Forward = 1f * ss;
                }
                break;

                case false:
                {                        //跑
                    //Debug.Log("run");
                    if (dis <= edgs)     // / 2f)//近距
                    {
                        if (Forward > .4f * ss)
                        {
                            Forward -= .001f * ss;
                        }
                        //							Forward = 1f;
                        else
                        {
                            Forward = .3f;
                        }
                    }
                    else if (dis > edgs)                                //远距
                    {
                        Forward = 1f * ss;
                    }
                    //					Forward = 1f * ss;
                }
                break;
                }

                if (!lockOnece)
                {
                    Forward = 0f;
                }
                //if (angle < 45f && Forward > .9f * ss)
                //{
                //    var rt = Quaternion.LookRotation(new Vector3(targetPos.x, 0f, targetPos.z) - new Vector3(role.transform.position.x, 0f, role.transform.position.z));
                //    //Debug.Log("ooo" + rt.eulerAngles);
                //    this.role.transform.rotation = Quaternion.Lerp(role.transform.rotation, rt, Time.deltaTime * 10f);

                //}


                //dir = (int)(dir * 10f) / 10f;
                //_dir *= 200f;

                //dir = Mathf.Lerp(dir, _dir, Time.deltaTime * 5f);



                if (_isMovingTarget)
                {
                    //				edgs = .7f;
                    //
                    anim.SetFloat("Forward", Forward);
                }
                else
                {
                    //				edgs = .7f;

                    //				Debug.Log ("angle : " + angle);
                    if (_moveAfterTurn)
                    {
                        var angle = Vector3.Angle(this.role.transform.forward, target_offset - role.transform.position);
                        if (angle < 20f)
                        {
                            anim.SetFloat("Forward", Forward);
                        }
                        else
                        {
                            anim.SetFloat("Forward", 0f);
                        }
                    }
                    else
                    {
                        anim.SetFloat("Forward", Forward);
                    }
                }
                if (anim != null)
                {
                    anim.SetFloat("Turn", dir);
                }
            }
            else
            {
                dir     = 0f;
                Forward = 0f;
                if (anim != null)
                {
                    anim.SetFloat("Forward", Forward);
                    anim.SetFloat("Turn", dir);
                }
            }

            if (!lockOnece)
            {
                Forward = 0f;
            }
            //ball.transform.position = this.dog.position + Vector3.right;
            //ball2.transform.position = this.dog.position + Vector3.forward;
            //ball3.transform.position = this.dog.position;
            //float angle = Mathf.Acos(Vector3.Dot(targetPos, this.transform.position)) * Mathf.Rad2Deg;
            //        }

            //=================
            var vv     = 0f;        //1.2f;
            var setDis = dis + vv;

            //		Debug.Log("dis:"+dis + " | minStopDis: " + minStopDis);
            if (setDis <= minStopDis)
            {
                // 到达目的地


                //			if (toAutoToward && angle > 1f && !_isMovingTarget)
                //			{
                //				//						Debug.DrawLine (this.role.transform.position, targetPos, Color.red, 3f);
                //				Debug.Log("目标自动朝向s :");
                //				//				anim.SetFloat("Turn", dir);
                //				toTurn = true;
                //			}
                //			else
                //			{

                if (lockOnece)
                {
                    lockOnece = false;
                    //Debug.Log("到了");

                    //-----------------------------
                    if (toAutoToward)
                    {
                        Forward = 0f;
                        anim.SetFloat("Forward", Forward);
                        //__direction = Vector3.back;
                        //                    __direction = Vector3.zero;
                        switch (Direction)
                        {
                        case TowardDirection.South:
                            __direction = Vector3.back;
                            break;

                        case TowardDirection.North:
                            __direction = Vector3.forward;
                            break;

                        case TowardDirection.East:
                            __direction = Vector3.left;
                            break;

                        case TowardDirection.West:
                            __direction = Vector3.right;
                            break;

                        default:
                            __direction = Vector3.zero;
                            break;
                        }
                        //DebugTool.LogRed("Direction: " + Direction);

                        var tt = 3f;                        //* Mathf.Abs(dir) / 360f;
                        //					DebugTool.LogYellow (tt + " | "+ dir);


                        //                    DebugTool.LogCyan("目标已抵达1 : delayTime : " + tt);
                        //DebugTool.LogCyan("目标已抵达1 :");
                        if (this._endCallback != null)
                        {
                            this._endCallback();
                            this._endCallback = null;
                        }
                        //					var vxv = targetPos - (this.role.gameObject.transform.forward);//this.role.transform.position
                        //					var ang = Quaternion.LookRotation(vxv);
                        //
                        //					DebugTool.LogRed(" : dir : " + Vector3.Angle(targetPos, this.role.gameObject.transform.forward) + "  ang : " + ang.eulerAngles + " : " + angle );
                        //					Debug.DrawLine(this.role.transform.position + this.role.gameObject.transform.forward, targetPos, Color.yellow);

                        TimerMgr.Register("delayTurnAnim", tt, () => {
                            arrived = true;
                            //						DebugTool.LogCyan ("delayTurnAnim stop");
                            dir     = 0f;
                            Forward = 0f;
                            if (anim != null)
                            {
                                anim.SetFloat("Forward", Forward);
                                //							anim.SetFloat ("Turn", dir);
                            }
                            //DebugTool.LogCyan("目标已抵达2 :");
                            //				if (this._endCallback != null) {
                            //					this._endCallback ();
                            //					this._endCallback = null;
                            //
                            //				}
                        }, () => {
                            //DebugTool.LogCyan("目标已抵达 :turn :: " + dir);
                            //						DebugTool.LogCyan ("delayTurnAnim" + _dir);
                            //dir = (int)(dir * 10f) / 10f;
                            //_dir *= 200f;
                            targetPos = this.role.transform.position + __direction * .5f;
                            //						target = this.role.transform.position + __direction * .51f;
                            var _dir = Vector3.Dot(this.role.transform.right, targetPos - this.role.transform.position);


                            this.dir = _dir;
                            //						dir = Mathf.Lerp (dir, _dir, Time.deltaTime * 5f);
                            if (anim != null)
                            {
                                anim.SetFloat("Turn", dir);
                                Forward = 0f;
                                anim.SetFloat("Forward", Forward);
                            }
                            //							if (dir < 1f) {
                            //								//Debug.Log("目标已抵达 : after turn" + Direction);
                            //								this._endCallback ();
                            //								this._endCallback = null;
                            //							}
                        });
                    }
                    else
                    {
                        //					TimerMgr.Register ("delayStopAnim", 1.5f, () => {
                        //						DebugTool.LogCyan ("delayStopAnim");
                        arrived = true;
                        Forward = 0f;
                        if (anim != null)
                        {
                            anim.SetFloat("Forward", Forward);
                            //							anim.SetFloat ("Turn", dir);
                        }
                        //DebugTool.LogCyan("目标已抵达 :");
                        if (this._endCallback != null)
                        {
                            this._endCallback();
                            this._endCallback = null;
                            //							arrived = true;
                        }
                        //-----------------------------
                        //					});
                    }
                }
                //				this.role.transform.position += (targetPos - this.role.transform.position) * Time.deltaTime;
                //			}
                _targetPoint = Vector3.zero;
            }
        }