public void SwitchState(EffectStateType state) { State = state; if (state == EffectStateType.Dead) { Clear(); } }
protected override BTStatus Execute() { if (m_EffectEntinyId == 0) { return(BTStatus.Failure); } EffectBase effect = GameEntry.Entity.GetEntity(m_EffectEntinyId)?.Logic as EffectBase; if (effect == null) { return(BTStatus.Failure); } EffectStateType pState = effect.State; switch (pState) { case EffectStateType.Error: { return(BTStatus.Failure); } case EffectStateType.Update: { if (m_CacheTransform == null && effect.CachedTransform != null) { m_CacheTransform = effect.CachedTransform; GameEntry.BT.SaveData(this, JudgeName, m_CacheTransform); } object var = GameEntry.BT.GetData(this, Constant.Define.BTJudgeList); if (var != null && Data.DeadType == FlyObjDeadType.UntilColliderTar) { effect.SwitchState(EffectStateType.Dead); } return(BTStatus.Running); } case EffectStateType.Wait: { return(BTStatus.Running); } case EffectStateType.Dead: { Clear(); return(BTStatus.Success); } default: { return(BTStatus.Failure); } } }
public void Load() { if (m_Owner?.CachedTransform == null) { return; } switch (m_EffectData.BindType) { case EffectBindType.World: { CachedTransform.position = m_EffectData.PosOffset; CachedTransform.eulerAngles = m_EffectData.EulerOffset; } break; case EffectBindType.Trans: { if (m_EffectData.Parent == null) { CachedTransform.position = m_EffectData.PosOffset; CachedTransform.eulerAngles = m_EffectData.EulerOffset; } else { m_EffectData.SetParent = true; CachedTransform.position = m_EffectData.Parent.position + m_EffectData.PosOffset; CachedTransform.eulerAngles = m_EffectData.Parent.eulerAngles + m_EffectData.EulerOffset; } } break; case EffectBindType.OwnBody: { CachedTransform.eulerAngles = m_Owner.CachedTransform.localEulerAngles + m_EffectData.EulerOffset; CachedTransform.position = m_Owner.GetBind(ActorBindPosType.Body, m_EffectData.PosOffset); } break; case EffectBindType.OwnHead: { CachedTransform.eulerAngles = m_Owner.CachedTransform.localEulerAngles + m_EffectData.EulerOffset; CachedTransform.position = m_Owner.GetBind(ActorBindPosType.Head, m_EffectData.PosOffset); } break; case EffectBindType.OwnFoot: { CachedTransform.eulerAngles = m_Owner.CachedTransform.localEulerAngles + m_EffectData.EulerOffset; CachedTransform.position = m_Owner.GetBind(ActorBindPosType.Foot, m_EffectData.PosOffset); } break; case EffectBindType.OwnHand: { m_EffectData.SetParent = true; Transform[] hands = m_Owner.GetHands(); if (hands != null && hands[0] != null) { m_EffectData.Parent = hands[0]; CachedTransform.position = m_EffectData.Parent.position + m_EffectData.PosOffset; CachedTransform.eulerAngles = m_EffectData.Parent.eulerAngles + m_EffectData.EulerOffset; } else { CachedTransform.position = m_EffectData.PosOffset; CachedTransform.eulerAngles = m_EffectData.EulerOffset; } } break; case EffectBindType.TarBody: { ActorBase actor = m_Target ?? m_Owner; CachedTransform.position = actor.GetBind(ActorBindPosType.Head, m_EffectData.PosOffset); } break; case EffectBindType.TarFoot: { ActorBase actor = m_Target ?? m_Owner; CachedTransform.position = actor.GetBind(ActorBindPosType.Foot, m_EffectData.PosOffset); } break; case EffectBindType.TarHead: { ActorBase actor = m_Target ?? m_Owner; CachedTransform.position = actor.GetBind(ActorBindPosType.Head, m_EffectData.PosOffset); } break; case EffectBindType.OwnVTar: { if (m_Owner?.CachedTransform != null && m_Target != null) { Vector3 pos1 = m_Target.GetBind(ActorBindPosType.Body, Vector3.zero); Vector3 pos2 = m_Owner.GetBind(ActorBindPosType.Body, Vector3.zero); CachedTransform.position = (pos1 - pos2) * 0.5f + pos2; } else { if (m_Owner?.CachedTransform != null) { CachedTransform.position = m_Owner.GetBind(ActorBindPosType.Body, Vector3.zero) + m_Owner.Dir * 10; } } } break; } if (m_EffectData.SetParent && m_EffectData.Parent != null) { CachedTransform.parent = m_EffectData.Parent; } m_StartPos = CachedTransform.position; this.State = EffectStateType.Update; }