public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime) { GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo; if (null == senderObj) { return(false); } m_Myself = senderObj.GfxObj; if (null == m_Myself) { return(false); } if (curSectionTime < StartTime) { return(true); } if (m_IsExecuted && curSectionTime > (StartTime + m_RemainTime)) { return(false); } Vector3 pos = m_Myself.transform.position; m_Target = senderObj.TargetGfxObj; if (!m_IsExecuted && (null == m_Target && !string.IsNullOrEmpty(m_SelectTargetType))) { TargetManager mgr = instance.CustomDatas.GetData <TargetManager>(); if (null == mgr) { mgr = new TargetManager(); instance.CustomDatas.AddData(mgr); } int targetId = EntityController.Instance.SelectTargetForSkill(m_SelectTargetType, senderObj.ObjId, senderObj.ConfigData, senderObj.Seq, mgr.Targets); if (targetId > 0) { mgr.Add(targetId); m_Target = EntityController.Instance.GetGameObject(targetId); senderObj.TargetObjId = targetId; senderObj.TargetGfxObj = m_Target; } } if (null != m_Target) { m_IsExecuted = true; if (!m_IsHaveRotateSpeed || m_RotateSpeed.y == 0) { TriggerUtil.Lookat(m_Myself, m_Target.transform.position); } else { float maxRotateDelta = m_RotateSpeed.y * TriggerUtil.ConvertToSecond(delta); TriggerUtil.Lookat(m_Myself, m_Target.transform.position, maxRotateDelta); } } return(true); }
public override void Reset() { if (m_IsExecuted && m_RemainTime > 0 && null != m_Myself && null != m_Target) { TriggerUtil.Lookat(m_Myself, m_Target.transform.position); } m_IsExecuted = false; m_Myself = null; m_Target = null; }
public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime) { GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo; if (null == senderObj) { return(false); } Scene scene = senderObj.Scene; EntityInfo obj = senderObj.GfxObj; if (null == obj) { return(false); } if (curSectionTime < StartTime) { return(true); } if (m_IsExecuted && curSectionTime > (StartTime + m_RemainTime)) { return(false); } Vector3 pos = obj.GetMovementStateInfo().GetPosition3D(); EntityInfo target = senderObj.TargetGfxObj; if (!m_IsExecuted && (null == target || !string.IsNullOrEmpty(m_SelectTargetType))) { if (string.IsNullOrEmpty(m_SelectTargetType)) { int targetType = scene.EntityController.GetTargetType(senderObj.ActorId, senderObj.ConfigData, senderObj.Seq); if (targetType == (int)SkillTargetType.Friend || targetType == (int)SkillTargetType.RandFriend) { m_RealSelectTargetType = "randfriend"; } else { m_RealSelectTargetType = "randenemy"; } } TargetManager mgr = instance.CustomDatas.GetData <TargetManager>(); if (null == mgr) { mgr = new TargetManager(); instance.CustomDatas.AddData(mgr); } int targetId = scene.EntityController.SelectTargetForSkill(m_RealSelectTargetType, senderObj.ActorId, senderObj.ConfigData, senderObj.Seq, mgr.Targets); if (targetId > 0) { mgr.Add(targetId); target = scene.EntityController.GetGameObject(targetId); senderObj.TargetActorId = targetId; senderObj.TargetGfxObj = target; } } if (null != target) { m_IsExecuted = true; if (!m_IsHaveRotateSpeed || m_RotateSpeed.Y == 0) { TriggerUtil.Lookat(scene, obj, target.GetMovementStateInfo().GetPosition3D()); } else { float maxRotateDelta = m_RotateSpeed.Y * TriggerUtil.ConvertToSecond(delta); TriggerUtil.Lookat(scene, obj, target.GetMovementStateInfo().GetPosition3D(), maxRotateDelta); } } return(true); }