protected override void StartExecute(bool isFastNav) { EntitySelf entSelf = EntityWorld.Instance.EntSelf; if (entSelf != null && entSelf.Actor) { if (this.mCurGoods != null) { Vector3 vector = new Vector3((float)this.mCurGoods.position.get_Item(0), (float)this.mCurGoods.position.get_Item(1), (float)this.mCurGoods.position.get_Item(2)) * 0.01f; Vector3 vector2 = new Vector3((float)this.mCurGoods.flyPosition.get_Item(0), (float)this.mCurGoods.flyPosition.get_Item(1), (float)this.mCurGoods.flyPosition.get_Item(2)) * 0.01f; if (this.mCurGoods.scene == MySceneManager.Instance.CurSceneID) { Vector3 vector3 = Vector3.get_zero(); if (this.mCurGoods.face.get_Count() >= 3) { vector3 = new Vector3((float)this.mCurGoods.face.get_Item(0), (float)this.mCurGoods.face.get_Item(1), (float)this.mCurGoods.face.get_Item(2)) * 0.01f; } Quaternion quaternion = Quaternion.Euler(vector3.x, vector3.y, vector3.z); Vector3 vector4 = quaternion * Vector3.get_forward() * 2f; float distanceNoY = XUtility.GetDistanceNoY(entSelf.Actor.FixTransform.get_position(), vector); if (isFastNav) { this.FastCollectGoods(distanceNoY, vector, vector2); } else { this.NormalCollectGoods(distanceNoY, vector); } } else if (isFastNav) { base.IsAutoNav = true; MainTaskManager.Instance.DelaySendFlyShoe(true, this.mCurGoods.scene, vector2); } else { base.IsAutoNav = false; TownCountdownUI townCountdownUI = UIManagerControl.Instance.OpenUI("TownCountdownUI", null, false, UIType.NonPush) as TownCountdownUI; townCountdownUI.StartTransmit(base.Task.taskId, this.mCurGoods.scene); } } else { Debug.LogFormat("<color=red>Error:</color>采集任务[{0}]数据已被销毁!!!", new object[] { base.Task.taskId }); } } }
protected override void OnStopExecuteTask() { base.OnStopExecuteTask(); if (this.IsActive && !this.mIsStart && this.mIsEnd) { NPC nPC = DataReader <NPC> .Get(this.mEndNpc); if (nPC != null) { Vector3 npcPosition = MainTaskManager.Instance.GetNpcPosition(nPC, 1f); if (EntityWorld.Instance.ActSelf == null || EntityWorld.Instance.ActSelf.FixTransform == null) { return; } float distanceNoY = XUtility.GetDistanceNoY(EntityWorld.Instance.ActSelf.FixTransform.get_position(), npcPosition); if (distanceNoY <= 1f && nPC.scene == MySceneManager.Instance.CurSceneID) { Debug.Log("更新NPC状态,自动移动到点:" + npcPosition); Vector3 zero; if (nPC.position.get_Count() == 3) { zero = new Vector3((float)nPC.position.get_Item(0), (float)nPC.position.get_Item(1), (float)nPC.position.get_Item(2)); } else { zero = Vector3.get_zero(); } TaskNPCManager.Instance.UpdateNPC(this.mBeginNpc, new NPCInformation { id = this.mBeginNpc, position = zero, status = NPCStatus.NAV_TO_POINT }); } } } }