public void SwitchState(EffectStateType state)
 {
     State = state;
     if (state == EffectStateType.Dead)
     {
         Clear();
     }
 }
Exemple #2
0
        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;
        }