示例#1
0
        private void OnTrapTriggered(Object p_sender, EventArgs p_args)
        {
            TrapEventArgs trapEventArgs = p_args as TrapEventArgs;

            if (trapEventArgs != null && trapEventArgs.Trap == MyController)
            {
                EventHandler eventHandler = delegate(Object p_localSender, EventArgs p_localArgs)
                {
                    DelayedEventManager.InvokeEvent(EDelayType.ON_FX_HIT, EEventType.TRAP_TRIGGERED, p_sender, p_args);
                };
                String gfx = trapEventArgs.TrapEffect.GFX;
                if (!String.IsNullOrEmpty(gfx))
                {
                    FXQueue fxqueue = Helper.ResourcesLoad <FXQueue>(gfx, false);
                    if (fxqueue != null)
                    {
                        fxqueue = Helper.Instantiate <FXQueue>(fxqueue);
                        FXArgs args = new FXArgs(gameObject, gameObject, gameObject, gameObject, Vector3.zero, transform.forward, -transform.right, Vector3.zero);
                        fxqueue.Finished += eventHandler;
                        fxqueue.Execute(args);
                    }
                    else
                    {
                        eventHandler(this, EventArgs.Empty);
                        Debug.LogError("OnTrapTriggered: given GFX does not exist! " + gfx);
                    }
                }
                else
                {
                    eventHandler(this, EventArgs.Empty);
                    Debug.LogWarning("OnTrapTriggered: Trap GFX is missing!");
                }
            }
        }
示例#2
0
 public void HandleAnimationOverrideFX(EAnimType pType, FXArgs pArgs)
 {
     if (m_Effects != null && m_Effects.Contains(pType))
     {
         m_Effects.Load(pType).Configurate(m_AnimationEventHandler, pArgs);
     }
 }
示例#3
0
 public override void AttackCritical(FXArgs p_fxArgs, Action p_fxFinishedCallback)
 {
     m_CommandQueue.Enqueue(delegate
     {
         m_State.ChangeState(EState.IDLE, Random.Range(0f, 0.1f));
     });
     m_CommandQueue.Enqueue(delegate
     {
         HandleAnimationOverrideFX(EAnimType.ATTACK_CRITICAL, p_fxArgs);
         HandleMeleeFX(p_fxArgs);
         m_AnimationEventHandler.RegisterAnimationCallback(EAnimEventType.HIT, delegate
         {
             ChangeStateFromAttackToIdle(p_fxFinishedCallback);
         });
         Single length = m_animator.GetCurrentAnimatorStateInfo(0).length;
         m_State.ChangeState(EState.ATTACK, length);
         if (m_animatorControl.AttackCriticalMeleeMaxValue != 0)
         {
             m_animatorControl.AttackCritical();
         }
         else
         {
             m_animatorControl.Attack();
         }
     });
 }
示例#4
0
        protected void HandleRangedFX(EResultType pResult, FXArgs fxArgs, Action pOnFXFinished)
        {
            String text;

            if (pResult == EResultType.BLOCK)
            {
                text = m_EffectAttackRangedBlockedPath;
            }
            else
            {
                text = m_EffectAttackRangedPath;
            }
            if (!String.IsNullOrEmpty(text))
            {
                FXDescription fxdescription = Helper.ResourcesLoad <FXDescription>(text, false);
                if (fxdescription != null)
                {
                    fxdescription           = Helper.Instantiate <FXDescription>(fxdescription);
                    fxdescription.Finished += delegate(Object sender, EventArgs e)
                    {
                        ChangeStateFromAttackToIdle(pOnFXFinished);
                    };
                    fxdescription.Configurate(m_AnimationEventHandler, fxArgs);
                    return;
                }
            }
            ChangeStateFromAttackToIdle(pOnFXFinished);
            Debug.LogError("Ranged FX not found!");
        }
示例#5
0
 public void Hit(FXArgs p_fxArgs)
 {
     m_CommandQueue.Enqueue(delegate
     {
         HandleAnimationOverrideFX(EAnimType.HIT, p_fxArgs);
         PlayAnimation(EAnimType.HIT, EState.HIT, -1f, 1f);
     });
 }
示例#6
0
        protected virtual void OnDie()
        {
            FXArgs pArgs = new FXArgs(gameObject, gameObject, gameObject, gameObject, Vector3.zero, Vector3.forward, Vector3.left, Vector3.zero);

            m_monsterCombatView.HandleAnimationOverrideFX(EAnimType.DIE, pArgs);
            Single p_dieAnimationDuration = m_monsterCombatView.PlayAnimation(EAnimType.DIE, CombatViewBase.EState.HIT, -1f, 1f);
            DieFX  dieFX = gameObject.AddComponent <DieFX>();

            dieFX.Init(MyController, EventArgs.Empty, p_dieAnimationDuration);
        }
示例#7
0
 public override void AttackRanged(FXArgs p_fxArgs, Action p_fxFinishedCallback, EResultType p_Result)
 {
     m_CommandQueue.Enqueue(delegate
     {
         m_State.ChangeState(EState.IDLE, Random.Range(0f, 0.3f));
     });
     m_CommandQueue.Enqueue(delegate
     {
         HandleAnimationOverrideFX(EAnimType.ATTACK_RANGED, p_fxArgs);
         HandleRangedFX(p_Result, p_fxArgs, p_fxFinishedCallback);
         PlayAnimation(EAnimType.ATTACK_RANGED, EState.ATTACK_RANGED, -1f, 1f, 2f);
     });
 }
示例#8
0
 private void MonsterCastBuff(TestSpell spell)
 {
     if (m_ActiveMonster == null)
     {
         return;
     }
     foreach (BuffFX buffFX in m_MonsterBuffEffects)
     {
         if (buffFX != null)
         {
             buffFX.Destroy();
         }
     }
     m_MonsterBuffEffects.Clear();
     foreach (FXQueue fxqueue in m_MonsterBuffGameObjects)
     {
         if (fxqueue != null)
         {
             Destroy(fxqueue.gameObject, 5f);
         }
     }
     m_MonsterBuffGameObjects.Clear();
     foreach (String text in spell.TargetBuffEffectPath)
     {
         if (!String.IsNullOrEmpty(text))
         {
             BuffFX buffFX2 = Helper.ResourcesLoad <BuffFX>(text, false);
             if (buffFX2 != null)
             {
                 Vector3 forward    = m_Party.transform.forward;
                 Vector3 p_slotLeft = -m_Party.transform.right;
                 buffFX2 = Helper.Instantiate <BuffFX>(buffFX2);
                 FXQueue fxqueue2 = new GameObject("FXQueue " + buffFX2.name).AddComponent <FXQueue>();
                 fxqueue2.SetData(new FXQueue.Entry[]
                 {
                     new FXQueue.Entry(buffFX2, 0f, 0f)
                 }, 0);
                 FXArgs args = new FXArgs(m_ActiveMonster, m_ActiveMonster, m_ActiveMonster, m_ActiveMonster, m_ActiveMonster.transform.position, forward, p_slotLeft, m_ActiveMonster.transform.position);
                 fxqueue2.Execute(args);
                 m_MonsterBuffGameObjects.Add(fxqueue2);
                 m_MonsterBuffEffects.Add(buffFX2);
                 m_ActiveMonsterAnimationHandler.Hit();
             }
             else
             {
                 Debug.LogError("MonsterCastBuff: BuffEffect not found! " + text);
             }
         }
     }
 }
示例#9
0
 public override void AttackRanged(FXArgs p_fxArgs, Action p_fxFinishedCallback, EResultType p_Result)
 {
     m_CommandQueue.Enqueue(delegate
     {
         m_State.ChangeState(EState.IDLE, Random.Range(0f, 0.1f));
     });
     m_CommandQueue.Enqueue(delegate
     {
         HandleAnimationOverrideFX(EAnimType.ATTACK_RANGED, p_fxArgs);
         HandleRangedFX(p_Result, p_fxArgs, p_fxFinishedCallback);
         Single length = m_animator.GetCurrentAnimatorStateInfo(0).length;
         m_State.ChangeState(EState.ATTACK_RANGED, length);
         m_animatorControl.AttackRange();
     });
 }
示例#10
0
 public void PAX_AttackRanged(FXArgs p_fxArgs, Action p_fxFinishedCallback)
 {
     m_CommandQueue.Enqueue(delegate
     {
         HandleAnimationOverrideFX(EAnimType.ATTACK_RANGED, p_fxArgs);
         PlayAnimation(EAnimType.ATTACK_RANGED, EState.IDLE, -1f, 1f);
         m_AnimationEventHandler.RegisterAnimationCallback(EAnimEventType.RANGE_SHOOT, delegate
         {
             if (p_fxFinishedCallback != null)
             {
                 p_fxFinishedCallback();
             }
         });
     });
 }
示例#11
0
 public void Ability(FXArgs p_fxArgs, Action p_fxFinishedCallback)
 {
     m_CommandQueue.Enqueue(delegate
     {
         HandleAnimationOverrideFX(EAnimType.ABILITY1, p_fxArgs);
         PlayAnimation(EAnimType.ABILITY1, EState.HIT, -1f, 1f);
         m_AnimationEventHandler.RegisterAnimationCallback(EAnimEventType.HIT, delegate
         {
             if (p_fxFinishedCallback != null)
             {
                 p_fxFinishedCallback();
             }
         });
     });
 }
示例#12
0
 public override void AttackCritical(FXArgs p_fxArgs, Action p_fxFinishedCallback)
 {
     m_CommandQueue.Enqueue(delegate
     {
         m_State.ChangeState(EState.IDLE, Random.Range(0f, 0.3f));
     });
     m_CommandQueue.Enqueue(delegate
     {
         HandleAnimationOverrideFX(EAnimType.ATTACK_CRITICAL, p_fxArgs);
         m_AnimationEventHandler.RegisterAnimationCallback(EAnimEventType.HIT, delegate
         {
             ChangeStateFromAttackToIdle(p_fxFinishedCallback);
         });
         PlayAnimation(EAnimType.ATTACK_CRITICAL, EState.ATTACK, -1f, 1f);
     });
 }
示例#13
0
        protected void HandleMeleeFX(FXArgs fxArgs)
        {
            String effectMeleeAttackPath = m_EffectMeleeAttackPath;

            if (!String.IsNullOrEmpty(effectMeleeAttackPath))
            {
                FXDescription fxdescription = Helper.ResourcesLoad <FXDescription>(effectMeleeAttackPath, false);
                if (fxdescription != null)
                {
                    fxdescription = Helper.Instantiate <FXDescription>(fxdescription);
                    fxdescription.Configurate(m_AnimationEventHandler, fxArgs);
                }
                else
                {
                    Debug.LogError("Melee FX not found! '" + m_EffectMeleeAttackPath + "'");
                }
            }
        }
示例#14
0
 public void Configurate(BaseEventHandler p_handler, FXArgs p_args)
 {
     if (p_handler == null)
     {
         throw new ArgumentNullException("handler");
     }
     if (p_args == null)
     {
         throw new ArgumentNullException("args");
     }
     for (Int32 i = 0; i < m_FXQueueMap.Length; i++)
     {
         if (!(m_FXQueueMap[i] == null))
         {
             m_FXQueueMap[i] = Helper.Instantiate <FXQueue>(m_FXQueueMap[i]);
             m_FXQueueMap[i].EffectArguments = p_args;
             m_FXQueueMap[i].Finished       += HandleFinishedFXQueue;
             p_handler.RegisterAnimationCallback((EAnimEventType)i, new Action(m_FXQueueMap[i].Execute));
         }
     }
 }
示例#15
0
        protected virtual void OnEntityCastSpell(Object p_sender, EventArgs p_args)
        {
            if (p_sender != MyController)
            {
                return;
            }
            SpellEventArgs args         = (SpellEventArgs)p_args;
            MonsterSpell   spell        = (MonsterSpell)args.Spell;
            EventHandler   eventHandler = delegate(Object sender, EventArgs e)
            {
                DelayedEventManager.InvokeEvent(EDelayType.ON_FX_HIT, EEventType.MONSTER_CAST_SPELL, p_sender, args);
                MyController.AttackingDone.Trigger();
                if (spell.SpellType == EMonsterSpell.FLICKER)
                {
                    m_MainView.SetEntityPosition();
                }
                if (MyController is Monster)
                {
                    ((Monster)MyController).BuffHandler.FlushActionLog(MonsterBuffHandler.ELogEntryPhase.ON_CAST_SPELL);
                    ((Monster)MyController).BuffHandler.RemoveFlaggedBuffs();
                }
                SpellEffectEntryEventArgs p_args9 = new SpellEffectEntryEventArgs(p_sender, args);
                LegacyLogic.Instance.ActionLog.PushEntry(p_args9);
                foreach (SpellTarget spellTarget2 in args.SpellTargets)
                {
                    if (spellTarget2.Target is Character)
                    {
                        ((Character)spellTarget2.Target).ConditionHandler.FlushActionLog();
                        ((Character)spellTarget2.Target).ConditionHandler.FlushDelayedActionLog();
                        LegacyLogic.Instance.WorldManager.Party.Buffs.FlushActionLog();
                    }
                }
                if (MyController is Monster)
                {
                    ((Monster)MyController).BuffHandler.FlushActionLog(MonsterBuffHandler.ELogEntryPhase.ON_END_TURN);
                }
            };
            FXDescription fxdescription = Helper.ResourcesLoad <FXDescription>(spell.EffectKey, false);

            if (fxdescription == null)
            {
                Debug.LogError("FXDescription not found! at " + spell.EffectKey, this);
                eventHandler(this, EventArgs.Empty);
                return;
            }
            fxdescription           = Helper.Instantiate <FXDescription>(fxdescription);
            fxdescription.Finished += eventHandler;
            Vector3 p_slotOriginPosition;
            Vector3 p_slotForward;
            Vector3 p_slotLeft;
            Vector3 p_slotTargetPosition;

            ViewManager.GetSlotDatas(MyController.Position, LegacyLogic.Instance.WorldManager.Party.Position, out p_slotOriginPosition, out p_slotForward, out p_slotLeft, out p_slotTargetPosition);
            Int32 animationID;

            if (Int32.TryParse(spell.EffectAnimationClip, out animationID))
            {
                m_animatorControl.AttackMagic(animationID);
            }
            else
            {
                Debug.LogError("Error parse animation id for attack magic '" + spell.EffectAnimationClip + "'");
                m_animatorControl.AttackMagic();
            }
            GameObject  gameObject = this.gameObject;
            ETargetType targetType = spell.TargetType;

            if (args.SpellTargets.Count == 0)
            {
                Debug.LogError("Error, missing targets for effects\n" + DebugUtil.DumpObjectText(spell));
                FXArgs p_args2 = new FXArgs(gameObject, gameObject, gameObject, gameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, new List <GameObject>
                {
                    gameObject
                });
                fxdescription.Configurate(m_eventHandler, p_args2);
                return;
            }
            if ((targetType & ETargetType.MONSTER) == ETargetType.MONSTER)
            {
                PlayerEntityView  playerEntityView = ViewManager.Instance.FindViewAndGetComponent <PlayerEntityView>(LegacyLogic.Instance.WorldManager.Party);
                MovingEntity      movingEntity     = null;
                List <GameObject> list             = new List <GameObject>();
                foreach (SpellTarget spellTarget in args.SpellTargets)
                {
                    GameObject gameObject2 = null;
                    if (spellTarget.Target is Character)
                    {
                        if (movingEntity == null)
                        {
                            movingEntity = LegacyLogic.Instance.WorldManager.Party;
                        }
                        gameObject2 = playerEntityView.GetMemberGameObject(((Character)spellTarget.Target).Index);
                    }
                    else if (spellTarget.Target is MovingEntity)
                    {
                        if (movingEntity == null)
                        {
                            movingEntity = (MovingEntity)spellTarget.Target;
                        }
                        gameObject2 = ViewManager.Instance.FindView((MovingEntity)spellTarget.Target);
                    }
                    if (gameObject2 != null)
                    {
                        list.Add(gameObject2);
                    }
                }
                ViewManager.GetSlotDatas(MyController.Position, movingEntity.Position, out p_slotOriginPosition, out p_slotForward, out p_slotLeft, out p_slotTargetPosition);
                FXArgs p_args3 = new FXArgs(gameObject, playerEntityView.gameObject, gameObject, playerEntityView.gameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, list);
                fxdescription.Configurate(m_eventHandler, p_args3);
            }
            else if ((targetType & ETargetType.MULTY) == ETargetType.MULTY)
            {
                PlayerEntityView  playerEntityView2 = ViewManager.Instance.FindViewAndGetComponent <PlayerEntityView>(LegacyLogic.Instance.WorldManager.Party);
                List <GameObject> list2             = new List <GameObject>(4);
                for (Int32 i = 0; i < 4; i++)
                {
                    list2.Add(playerEntityView2.GetMemberGameObject(i));
                }
                FXArgs p_args4 = new FXArgs(gameObject, playerEntityView2.gameObject, gameObject, playerEntityView2.gameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, list2);
                fxdescription.Configurate(m_eventHandler, p_args4);
            }
            else if ((targetType & ETargetType.SINGLE) == ETargetType.SINGLE)
            {
                Boolean flag = true;
                foreach (AttackedTarget attackedTarget in args.SpellTargetsOfType <AttackedTarget>())
                {
                    Character  character   = (Character)attackedTarget.Target;
                    GameObject characterGO = FXHelper.GetCharacterGO(character.Index);
                    if (!flag)
                    {
                        fxdescription = Helper.Instantiate <FXDescription>(fxdescription);
                    }
                    FXArgs p_args5 = new FXArgs(gameObject, characterGO, gameObject, characterGO, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, new List <GameObject>
                    {
                        characterGO
                    });
                    fxdescription.Configurate(m_eventHandler, p_args5);
                    flag = false;
                }
                foreach (MonsterBuffTarget monsterBuffTarget in args.SpellTargetsOfType <MonsterBuffTarget>())
                {
                    Character  character2   = (Character)monsterBuffTarget.Target;
                    GameObject characterGO2 = FXHelper.GetCharacterGO(character2.Index);
                    if (!flag)
                    {
                        fxdescription = Helper.Instantiate <FXDescription>(fxdescription);
                    }
                    FXArgs p_args6 = new FXArgs(gameObject, characterGO2, gameObject, characterGO2, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, new List <GameObject>
                    {
                        characterGO2
                    });
                    fxdescription.Configurate(m_eventHandler, p_args6);
                    flag = false;
                }
            }
            else if ((targetType & ETargetType.ADJACENT) == ETargetType.ADJACENT)
            {
                FXArgs p_args7 = new FXArgs(gameObject, gameObject, gameObject, gameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition);
                fxdescription.Configurate(m_eventHandler, p_args7);
            }
            else
            {
                FXArgs p_args8 = new FXArgs(gameObject, gameObject, gameObject, gameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition);
                fxdescription.Configurate(m_eventHandler, p_args8);
            }
        }
示例#16
0
    public void MonsterCastSpell(ETarget target, TestSpell spell)
    {
        m_LastSpellIsMonster = false;
        m_LastSpell          = spell;
        m_TargetOrWizard     = target;
        FXDescription fxdescription = Helper.ResourcesLoad <FXDescription>(spell.EffectPath, false);

        if (fxdescription == null)
        {
            Debug.LogError("FXDescription not found! at " + spell.EffectPath, this);
            return;
        }
        if (target == ETarget.Party)
        {
            target = (ETarget)UnityEngine.Random.Range(1, 4);
        }
        GameObject gameObject;

        switch (target)
        {
        case ETarget.Member1:
            gameObject = m_Member1;
            break;

        case ETarget.Member2:
            gameObject = m_Member2;
            break;

        case ETarget.Member3:
            gameObject = m_Member3;
            break;

        case ETarget.Member4:
            gameObject = m_Member4;
            break;

        default:
            return;
        }
        Vector3 forward    = m_ActiveMonster.transform.forward;
        Vector3 p_slotLeft = -m_ActiveMonster.transform.right;

        m_ActiveMonsterAnimationHandler.AttackMagic(spell.AnimationNum);
        AnimatorEventHandler component     = m_ActiveMonsterAnimationHandler.GetComponent <AnimatorEventHandler>();
        GameObject           activeMonster = m_ActiveMonster;
        ETargetType          targetType    = spell.TargetType;
        FXArgs p_args;

        if ((targetType & ETargetType.MULTY) == ETargetType.MULTY)
        {
            p_args = new FXArgs(activeMonster, m_PartySlot, activeMonster, m_PartySlot, activeMonster.transform.position, forward, p_slotLeft, m_PartySlot.transform.position, new List <GameObject>
            {
                m_Member1,
                m_Member2,
                m_Member3,
                m_Member4
            });
        }
        else if ((targetType & ETargetType.SINGLE) == ETargetType.SINGLE)
        {
            p_args = new FXArgs(activeMonster, gameObject, activeMonster, gameObject, activeMonster.transform.position, forward, p_slotLeft, m_PartySlot.transform.position, new List <GameObject>
            {
                gameObject
            });
        }
        else if ((targetType & ETargetType.ADJACENT) == ETargetType.ADJACENT)
        {
            p_args = new FXArgs(activeMonster, activeMonster, activeMonster, activeMonster, activeMonster.transform.position, forward, p_slotLeft, m_PartySlot.transform.position, new List <GameObject>
            {
                gameObject
            });
        }
        else
        {
            p_args = new FXArgs(activeMonster, activeMonster, activeMonster, activeMonster, activeMonster.transform.position, forward, p_slotLeft, m_PartySlot.transform.position, new List <GameObject>
            {
                gameObject
            });
        }
        fxdescription = Helper.Instantiate <FXDescription>(fxdescription);
        fxdescription.Configurate(component, p_args);
    }
示例#17
0
    public void PartyCastSpell(ETarget wizard, TestSpell spell)
    {
        m_LastSpellIsMonster = false;
        m_LastSpell          = spell;
        m_TargetOrWizard     = wizard;
        if (!String.IsNullOrEmpty(spell.EffectPath))
        {
            FXQueue fxqueue = Helper.ResourcesLoad <FXQueue>(spell.EffectPath, false);
            if (fxqueue != null && m_ActiveMonster != null)
            {
                if (wizard == ETarget.Party)
                {
                    wizard = (ETarget)UnityEngine.Random.Range(1, 4);
                }
                GameObject gameObject;
                switch (wizard)
                {
                case ETarget.Member1:
                    gameObject = m_Member1;
                    break;

                case ETarget.Member2:
                    gameObject = m_Member2;
                    break;

                case ETarget.Member3:
                    gameObject = m_Member3;
                    break;

                case ETarget.Member4:
                    gameObject = m_Member4;
                    break;

                default:
                    return;
                }
                Vector3     forward    = m_Party.transform.forward;
                Vector3     p_slotLeft = -m_Party.transform.right;
                ETargetType targetType = spell.TargetType;
                FXArgs      args;
                if ((targetType & ETargetType.PARTY) == ETargetType.PARTY)
                {
                    args = new FXArgs(m_PartySlot, m_PartySlot, m_PartySlot, m_PartySlot, m_PartySlot.transform.position, forward, p_slotLeft, m_PartySlot.transform.position, new List <GameObject>
                    {
                        m_PartySlot
                    });
                }
                else if ((targetType & ETargetType.LINE_OF_SIGHT) == ETargetType.LINE_OF_SIGHT)
                {
                    args = new FXArgs(m_PartySlot, m_MonsterSlot, m_PartySlot, m_MonsterSlot, m_PartySlot.transform.position, forward, p_slotLeft, m_MonsterSlot.transform.position, new List <GameObject>
                    {
                        m_ActiveMonster
                    });
                }
                else if ((targetType & ETargetType.MULTY) == ETargetType.MULTY)
                {
                    args = new FXArgs(gameObject, m_MonsterSlot, gameObject, m_MonsterSlot, m_PartySlot.transform.position, forward, p_slotLeft, m_MonsterSlot.transform.position, new List <GameObject>
                    {
                        m_ActiveMonster
                    });
                }
                else if ((targetType & ETargetType.SINGLE) == ETargetType.SINGLE)
                {
                    FXTags     component  = m_ActiveMonster.GetComponent <FXTags>();
                    GameObject p_endPoint = m_ActiveMonster;
                    if (component != null)
                    {
                        p_endPoint = component.FindOne("HitSpot");
                    }
                    else
                    {
                        Debug.LogError("FXTags not found!!\nTarget=" + m_ActiveMonster, m_ActiveMonster);
                    }
                    args = new FXArgs(gameObject, m_MonsterSlot, gameObject, p_endPoint, m_PartySlot.transform.position, forward, p_slotLeft, m_MonsterSlot.transform.position, new List <GameObject>
                    {
                        m_ActiveMonster
                    });
                }
                else if ((targetType & ETargetType.ADJACENT) == ETargetType.ADJACENT)
                {
                    args = new FXArgs(gameObject, m_PartySlot, gameObject, m_PartySlot, m_PartySlot.transform.position, forward, p_slotLeft, m_MonsterSlot.transform.position, new List <GameObject>
                    {
                        m_ActiveMonster
                    });
                }
                else
                {
                    Debug.LogError("error !! spellType: " + targetType);
                    args = new FXArgs(gameObject, m_ActiveMonster, gameObject, m_ActiveMonster, m_PartySlot.transform.position, forward, p_slotLeft, m_MonsterSlot.transform.position, new List <GameObject>
                    {
                        m_ActiveMonster
                    });
                }
                FXQueue fxqueue2 = Helper.Instantiate <FXQueue>(fxqueue);
                fxqueue2.Finished += delegate(Object sender, EventArgs e)
                {
                    m_ActiveMonsterAnimationHandler.Hit();
                };
                fxqueue2.Execute(args);
            }
            else
            {
                Debug.LogError("SpellEffect not found! " + spell.EffectPath);
            }
        }
        PartyCastBuff(spell);
        MonsterCastBuff(spell);
    }
示例#18
0
        private void OnCharacterAttacksRanged(Object p_sender, EventArgs p_args)
        {
            AttacksEventArgs attacksEventArgs = (AttacksEventArgs)p_args;

            if (attacksEventArgs.Attacks.Count == 0)
            {
                OnCharacterFXDone(p_sender, p_args);
                return;
            }
            Character character = (Character)p_sender;
            Boolean   flag      = true;

            foreach (AttacksEventArgs.AttackedTarget attackedTarget in attacksEventArgs.Attacks)
            {
                Monster     monster  = (Monster)attackedTarget.AttackTarget;
                EResultType result   = attackedTarget.AttackResult.Result;
                FXQueue     rangedFX = GetRangedFX(attacksEventArgs.IsTryingToPushToParty, character, result);
                if (rangedFX != null)
                {
                    Vector3 p_slotOriginPosition;
                    Vector3 p_slotForward;
                    Vector3 p_slotLeft;
                    Vector3 p_slotTargetPosition;
                    ViewManager.GetSlotDatas(((Party)MyController).Position, monster.Position, out p_slotOriginPosition, out p_slotForward, out p_slotLeft, out p_slotTargetPosition);
                    GameObject memberGameObject = m_PartyView.GetMemberGameObject(character.Index);
                    GameObject gameObject       = null;
                    GameObject gameObject2      = null;
                    if (result == EResultType.EVADE)
                    {
                        gameObject  = ViewManager.Instance.FindView(monster);
                        gameObject2 = new GameObject("Miss hit point on the ground");
                        Destroy(gameObject2, 30f);
                        gameObject2.transform.position = gameObject.transform.position + (transform.position - gameObject.transform.position).normalized + transform.right * 2f * (UnityEngine.Random.value - 0.5f);
                    }
                    else
                    {
                        FXTags fxtags = ViewManager.Instance.FindViewAndGetComponent <FXTags>(monster);
                        if (fxtags != null)
                        {
                            gameObject  = fxtags.gameObject;
                            gameObject2 = fxtags.FindOne((result != EResultType.BLOCK) ? "HitSpot" : "BlockHitSpot");
                        }
                    }
                    if (memberGameObject == null || gameObject == null || gameObject2 == null)
                    {
                        if (flag)
                        {
                            OnRangedFXHit(p_sender, p_args);
                        }
                        OnCharacterFXDone(p_sender, p_args);
                        Debug.LogError(String.Concat(new Object[]
                        {
                            "Attacker/Target not found!\nAttacker=",
                            memberGameObject,
                            "\ntargetGO=",
                            gameObject,
                            "\nfxEndpointGO=",
                            gameObject2
                        }));
                        break;
                    }
                    FXArgs  args    = new FXArgs(memberGameObject, gameObject, memberGameObject, gameObject2, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition);
                    FXQueue fxqueue = Helper.Instantiate <FXQueue>(rangedFX);
                    fxqueue.Execute(args);
                    if (flag)
                    {
                        flag              = false;
                        fxqueue.Finished += delegate(Object o, EventArgs e)
                        {
                            OnRangedFXHit(p_sender, p_args);
                        };
                    }
                }
                else
                {
                    if (flag)
                    {
                        flag = false;
                        OnRangedFXHit(p_sender, p_args);
                    }
                    OnCharacterFXDone(p_sender, p_args);
                    Debug.LogError("Ranged FX(" + result + ") missing!");
                }
            }
        }
示例#19
0
        protected virtual void OnEntityAbilityAdded(Object p_sender, EventArgs p_args)
        {
            AbilityEventArgs abilityEventArgs = (AbilityEventArgs)p_args;

            if (abilityEventArgs.Monster == MyController)
            {
                String gfx       = abilityEventArgs.Ability.StaticData.Gfx;
                String animation = abilityEventArgs.Ability.StaticData.Animation;
                if (!String.IsNullOrEmpty(animation))
                {
                    Int32 animationID = Int32.Parse(animation);
                    if (m_old)
                    {
                        m_Animation.Play(animation, -1f, 1f);
                    }
                    else if (m_animatorControl.DieState == 0)
                    {
                        m_animatorControl.AttackMagic(animationID);
                    }
                }
                if (!String.IsNullOrEmpty(gfx))
                {
                    if (gfx == "SKIP_FX")
                    {
                        return;
                    }
                    BuffFX buffFX = Helper.ResourcesLoad <BuffFX>(gfx, false);
                    if (buffFX != null)
                    {
                        buffFX = Helper.Instantiate <BuffFX>(buffFX);
                        FXQueue fxqueue = new GameObject(name + " " + buffFX.name + " FXQueue").AddComponent <FXQueue>();
                        fxqueue.SetData(new FXQueue.Entry[]
                        {
                            new FXQueue.Entry(buffFX, 0f, 0f)
                        }, 0);
                        if (abilityEventArgs.Ability.StaticData.TargetType == ETargetType.PARTY)
                        {
                            FXArgs args = new FXArgs(gameObject, FXHelper.GetPlayerEntity().gameObject, gameObject, FXHelper.GetPlayerEntity().gameObject, transform.position, transform.forward, -transform.right, FXHelper.GetPlayerEntity().transform.position, new List <GameObject>
                            {
                                FXHelper.GetPlayerEntity().gameObject
                            });
                            fxqueue.Execute(args);
                        }
                        else
                        {
                            FXArgs args2 = new FXArgs(gameObject, gameObject, gameObject, gameObject, transform.position, transform.forward, -transform.right, transform.position, new List <GameObject>
                            {
                                gameObject
                            });
                            fxqueue.Execute(args2);
                        }
                        m_Queues.Add(fxqueue);
                    }
                    else
                    {
                        Debug.LogError("OnAbilityEvent: Ability's  given GFX does not exist! " + gfx);
                    }
                }
                else
                {
                    Debug.LogWarning("OnAbilityEvent: Ability GFX is missing!");
                }
                if (abilityEventArgs.Ability.StaticData.NameKey == "MONSTER_ABILITY_EXPLOSIVE")
                {
                    DelayedEventManagerWorker delayedEventManagerWorker = new GameObject("ExplosiveHelper").AddComponent <DelayedEventManagerWorker>();
                    DontDestroyOnLoad(delayedEventManagerWorker);
                    delayedEventManagerWorker.StartCoroutine(PlayLateShakeFX(delayedEventManagerWorker.gameObject));
                    Destroy(gameObject, m_explosiveAbilityDelay);
                }
            }
        }
示例#20
0
 public void FX_HitNow(FXArgs p_fxArgs)
 {
     HandleAnimationOverrideFX(EAnimType.HIT, p_fxArgs);
     PlayAnimation(EAnimType.HIT, EState.HIT, -1f, 1f);
 }
示例#21
0
 protected void OnBuffEvent(Object p_sender, EventArgs p_args)
 {
     if (IsBuffAddEventForMe(p_sender, p_args))
     {
         String text;
         String text2;
         GetBuffBaseFXPath(p_sender, p_args, out text, out text2);
         if (!String.IsNullOrEmpty(text) && !String.IsNullOrEmpty(text2))
         {
             if (text == "SKIP_FX")
             {
                 return;
             }
             String text3 = null;
             if (m_BuffAppliedBySpellMap.ContainsKey(text2))
             {
                 text3 = m_BuffAppliedBySpellMap[text2];
                 if (Helper.ResourcesLoadLinked <BuffFX>(text + text3, false) != null)
                 {
                     text += text3;
                 }
             }
             BuffFX buffFX = Helper.ResourcesLoadLinked <BuffFX>(text, false);
             if (buffFX != null)
             {
                 if (m_LastAddFrame == Time.frameCount)
                 {
                     return;
                 }
                 m_LastAddFrame = Time.frameCount;
                 if (text3 == "SPELL_FIRE_TORCHLIGHT" || text3 == "SPELL_LIGHT_ORB" || text3 == "SPELL_DARK_VISION" || text3 == "SPELL_LIGHT_ORB_LONG" || text3 == "SPELL_FIRE_TORCHLIGHT_LONG")
                 {
                     CancelAllFX();
                 }
                 else
                 {
                     CancelAllFX_butNotVisionFX();
                 }
                 buffFX = Helper.Instantiate <BuffFX>(buffFX);
                 buffFX.SetBuffRemoveCondition(BuffRemoveEventType, (Object p_RemoveEventSender, EventArgs p_RemoveEventArgs) => IsBuffRemovedByThisEvent(p_sender, p_args, p_RemoveEventSender, p_RemoveEventArgs));
                 FXQueue fxqueue = new GameObject(name + " " + buffFX.name + " FXQueue").AddComponent <FXQueue>();
                 fxqueue.SetData(new FXQueue.Entry[]
                 {
                     new FXQueue.Entry(buffFX, 0f, 0f)
                 }, 0);
                 FXArgs args = new FXArgs(gameObject, gameObject, gameObject, gameObject, Vector3.zero, transform.forward, -transform.right, Vector3.zero);
                 fxqueue.Execute(args);
                 if (text3 == "SPELL_FIRE_TORCHLIGHT" || text3 == "SPELL_LIGHT_ORB" || text3 == "SPELL_DARK_VISION" || text3 == "SPELL_LIGHT_ORB_LONG" || text3 == "SPELL_FIRE_TORCHLIGHT_LONG")
                 {
                     m_QueuesLight.Add(fxqueue);
                 }
                 else
                 {
                     m_Queues.Add(fxqueue);
                 }
             }
             else
             {
                 Debug.LogError("OnBuffEvent: buff's (" + GetBuffDebugName(p_sender, p_args) + ") given GFX does not exist! " + text);
             }
         }
         else
         {
             Debug.LogWarning(String.Concat(new String[]
             {
                 "OnBuffEvent: buff(",
                 GetBuffDebugName(p_sender, p_args),
                 ") GFX or buffKey missing! gfx='",
                 text,
                 "' buffKey='",
                 text2,
                 "'"
             }));
         }
     }
 }
示例#22
0
        protected virtual void OnMonsterAttacksGeneric(Object p_sender, AttacksEventArgs p_args, Boolean p_isRanged)
        {
            PlayerEntityView playerEntity = FXHelper.GetPlayerEntity();
            Vector3          p_slotOriginPosition;
            Vector3          p_slotForward;
            Vector3          p_slotLeft;
            Vector3          p_slotTargetPosition;

            ViewManager.GetSlotDatas(MyController.Position, LegacyLogic.Instance.WorldManager.Party.Position, out p_slotOriginPosition, out p_slotForward, out p_slotLeft, out p_slotTargetPosition);
            Boolean          flag        = false;
            GameObject       gameObject  = null;
            List <Action>    callbacks   = new List <Action>(p_args.Attacks.Count);
            EResultType      eresultType = EResultType.HIT;
            Int32            num         = 0;
            List <Character> targets     = new List <Character>();

            AttacksEventArgs.AttackedTarget attack;
            foreach (AttacksEventArgs.AttackedTarget attack2 in p_args.Attacks)
            {
                attack = attack2;
                num++;
                if (attack.AttackTarget is Character)
                {
                    Character    chara  = (Character)attack.AttackTarget;
                    AttackResult result = attack.AttackResult;
                    targets.Add(chara);
                    if (playerEntity != null)
                    {
                        gameObject = playerEntity.GetMemberGameObject(chara.Index);
                    }
                    if (gameObject == null)
                    {
                        Debug.LogError("Could not find target character! Char-Index: " + chara.Index);
                    }
                    else
                    {
                        flag |= attack.IsCriticalAttack;
                        callbacks.Add(delegate
                        {
                            if (p_sender is Monster && ((Monster)p_sender).AbilityHandler.HasEntriesForPhase(EExecutionPhase.BEFORE_MONSTER_ATTACK))
                            {
                                ((Monster)p_sender).AbilityHandler.FlushActionLog(EExecutionPhase.BEFORE_MONSTER_ATTACK);
                                chara.ConditionHandler.FlushActionLog();
                            }
                            if (((Monster)p_sender).AbilityHandler.HasEntriesForPhase(EExecutionPhase.AFTER_DAMAGE_CALCULATION))
                            {
                                ((Monster)p_sender).AbilityHandler.FlushActionLog(EExecutionPhase.AFTER_DAMAGE_CALCULATION);
                            }
                            CombatEntryEventArgs p_args2 = new CombatEntryEventArgs(p_sender, chara, result, attack.BloodMagicEventArgs);
                            LegacyLogic.Instance.ActionLog.PushEntry(p_args2);
                            if (LegacyLogic.Instance.WorldManager.Party.Buffs.HasBuff(EPartyBuffs.SHADOW_CLOAK) && result.Result == EResultType.EVADE)
                            {
                                LegacyLogic.Instance.WorldManager.Party.Buffs.RemoveBuff(EPartyBuffs.SHADOW_CLOAK);
                            }
                            if (LegacyLogic.Instance.WorldManager.Party.Buffs.HasBuff(EPartyBuffs.CELESTIAL_ARMOR))
                            {
                                if (LegacyLogic.Instance.WorldManager.Party.Buffs.GetBuff(EPartyBuffs.CELESTIAL_ARMOR).IsExpired())
                                {
                                    LegacyLogic.Instance.WorldManager.Party.Buffs.RemoveBuff(EPartyBuffs.CELESTIAL_ARMOR);
                                }
                                LegacyLogic.Instance.WorldManager.Party.Buffs.FlushActionLog();
                            }
                            chara.FightHandler.FlushCounterAttackActionLog();
                            LegacyLogic.Instance.WorldManager.Party.Buffs.FlushActionLog();
                            if (p_sender is Monster && ((Monster)p_sender).AbilityHandler.HasEntriesForPhase(EExecutionPhase.AFTER_MONSTER_ATTACK))
                            {
                                ((Monster)p_sender).AbilityHandler.FlushActionLog(EExecutionPhase.AFTER_MONSTER_ATTACK);
                                chara.ConditionHandler.FlushActionLog();
                            }
                        });
                        if (attack.AttackResult.Result == EResultType.BLOCK)
                        {
                            eresultType = EResultType.BLOCK;
                        }
                        else if (eresultType != EResultType.BLOCK && attack.AttackResult.Result == EResultType.EVADE)
                        {
                            eresultType = EResultType.EVADE;
                        }
                    }
                }
            }
            Action action = delegate
            {
                DelayedEventManager.InvokeEvent(EDelayType.ON_FX_HIT, (!p_isRanged) ? EEventType.MONSTER_ATTACKS : EEventType.MONSTER_ATTACKS_RANGED, p_sender, p_args);
                if (!p_isRanged)
                {
                    foreach (AttacksEventArgs.AttackedTarget attackedTarget in p_args.Attacks)
                    {
                        ((Monster)MyController).CombatHandler.TriggerCounterAttacks(attackedTarget.AttackTarget, attackedTarget.AttackResult);
                    }
                }
                foreach (Action action2 in callbacks)
                {
                    action2();
                }
                foreach (Character character in targets)
                {
                    character.ConditionHandler.FlushDelayedActionLog();
                }
            };

            if (gameObject == null)
            {
                gameObject = playerEntity.GetMemberGameObject(UnityEngine.Random.Range(0, 4));
                if (gameObject == null)
                {
                    Debug.LogError("No target character could be found! Will skip whole FX! Num of Attacks = " + p_args.Attacks.Count);
                    action();
                    return;
                }
            }
            FXArgs p_fxArgs = new FXArgs(this.gameObject, gameObject, this.gameObject, gameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition);

            if (p_isRanged)
            {
                AttackRanged(p_fxArgs, action, (!flag) ? eresultType : EResultType.CRITICAL_HIT);
            }
            else if (flag)
            {
                AttackCritical(p_fxArgs, action);
            }
            else
            {
                Attack(p_fxArgs, action);
            }
        }
示例#23
0
 public abstract void AttackCritical(FXArgs p_fxArgs, Action p_fxFinishedCallback);
示例#24
0
 public abstract void AttackRanged(FXArgs p_fxArgs, Action p_fxFinishedCallback, EResultType p_Result);
		private void OnBeginEffect(UnityEventArgs<FXArgs> p_args)
		{
			m_Args = p_args.EventArgs;
			m_BeginEffect = true;
			m_FXplayed = false;
		}
示例#26
0
        private void OnCharacterCastSpell(Object p_sender, EventArgs p_args)
        {
            Character      character      = (Character)p_sender;
            SpellEventArgs spellEventArgs = (SpellEventArgs)p_args;

            if (character != null)
            {
                SpellEffectEntryEventArgs p_args2 = new SpellEffectEntryEventArgs(p_sender, (SpellEventArgs)p_args);
                character.FightHandler.FeedDelayedActionLog(p_args2);
            }
            if (spellEventArgs.SpellTargets.Count == 0)
            {
                OnFXCancel(p_sender, p_args);
                return;
            }
            FXQueue fxqueue = Helper.ResourcesLoad <FXQueue>(spellEventArgs.Spell.EffectKey, false);

            if (fxqueue == null)
            {
                Debug.LogError(String.Concat(new Object[]
                {
                    "PlayerSpellView: OnCharacterCastSpell: Character FXQueue not found! at '",
                    spellEventArgs.Spell.EffectKey,
                    "' ",
                    spellEventArgs
                }));
                OnFXCancel(p_sender, p_args);
                return;
            }
            Party             party = (Party)MyController;
            List <GameObject> list  = new List <GameObject>(spellEventArgs.SpellTargets.Count);

            foreach (SpellTarget spellTarget in spellEventArgs.SpellTargets)
            {
                if (spellTarget.Target is Character)
                {
                    Character  character2  = (Character)spellTarget.Target;
                    GameObject characterGO = FXHelper.GetCharacterGO(character2.Index);
                    if (!list.Contains(characterGO))
                    {
                        list.Add(characterGO);
                    }
                }
                else
                {
                    GameObject gameObject = ViewManager.Instance.FindView((BaseObject)spellTarget.Target);
                    if (gameObject != null && !list.Contains(gameObject))
                    {
                        list.Add(gameObject);
                    }
                }
                if (spellTarget.Target is Party)
                {
                    break;
                }
            }
            if (list.Count == 0)
            {
                Debug.LogError("PlayerSpellView: OnCharacterCastSpell: No views found! " + spellEventArgs);
                OnFXCancel(p_sender, p_args);
                return;
            }
            Vector3 p_slotOriginPosition;
            Vector3 p_slotForward;
            Vector3 p_slotLeft;
            Vector3 p_slotTargetPosition;

            if (spellEventArgs.SpellTargets[0].Target is Monster)
            {
                ViewManager.GetSlotDatas(party.Position, ((Monster)spellEventArgs.SpellTargets[0].Target).Position, out p_slotOriginPosition, out p_slotForward, out p_slotLeft, out p_slotTargetPosition);
            }
            else
            {
                Position position = party.Position + party.Direction;
                if (LegacyLogic.Instance.MapLoader.Grid.GetSlot(position) != null)
                {
                    ViewManager.GetSlotDatas(party.Position, position, out p_slotOriginPosition, out p_slotForward, out p_slotLeft, out p_slotTargetPosition);
                }
                else
                {
                    ViewManager.GetSlotDatas(party.Position, party.Position, out p_slotOriginPosition, out p_slotForward, out p_slotLeft, out p_slotTargetPosition);
                }
            }
            GameObject  memberGameObject = m_PartyView.GetMemberGameObject(character.Index);
            ETargetType targetType       = spellEventArgs.Spell.TargetType;

            if ((targetType & ETargetType.LINE_OF_SIGHT) == ETargetType.LINE_OF_SIGHT)
            {
                MovingEntity movingEntity = (MovingEntity)spellEventArgs.SpellTargets[0].Target;
                GameObject   slotOrigin   = ViewManager.Instance.GetSlotOrigin(movingEntity.Position);
                FXArgs       args         = new FXArgs(memberGameObject, slotOrigin, memberGameObject, slotOrigin, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, list);
                FXQueue      fxqueue2     = Helper.Instantiate <FXQueue>(fxqueue);
                fxqueue2.Finished += delegate(Object sender, EventArgs e)
                {
                    OnFXQueueFinish(p_sender, p_args);
                };
                fxqueue2.Execute(args);
            }
            else if ((targetType & ETargetType.MULTY) == ETargetType.MULTY)
            {
                GameObject slotOrigin2;
                if (spellEventArgs.SpellTargets[0].Target is MovingEntity)
                {
                    MovingEntity movingEntity2 = (MovingEntity)spellEventArgs.SpellTargets[0].Target;
                    slotOrigin2 = ViewManager.Instance.GetSlotOrigin(movingEntity2.Position);
                }
                else
                {
                    slotOrigin2 = ViewManager.Instance.GetSlotOrigin(party.Position);
                }
                FXArgs  args2    = new FXArgs(memberGameObject, slotOrigin2, memberGameObject, slotOrigin2, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, list);
                FXQueue fxqueue3 = Helper.Instantiate <FXQueue>(fxqueue);
                fxqueue3.Finished += delegate(Object sender, EventArgs e)
                {
                    OnFXQueueFinish(p_sender, p_args);
                };
                fxqueue3.Execute(args2);
            }
            else if ((targetType & ETargetType.SINGLE) == ETargetType.SINGLE)
            {
                Boolean flag = true;
                foreach (GameObject gameObject2 in list)
                {
                    GameObject p_endPoint = gameObject2;
                    FXTags     component  = gameObject2.GetComponent <FXTags>();
                    if (component != null)
                    {
                        p_endPoint = component.FindOne("HitSpot");
                    }
                    else
                    {
                        Debug.LogError("FXTags not found!!\nTarget=" + component, component);
                    }
                    FXArgs  args3    = new FXArgs(memberGameObject, gameObject2, memberGameObject, p_endPoint, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, list);
                    FXQueue fxqueue4 = Helper.Instantiate <FXQueue>(fxqueue);
                    if (flag)
                    {
                        flag = false;
                        fxqueue4.Finished += delegate(Object sender, EventArgs e)
                        {
                            OnFXQueueFinish(p_sender, p_args);
                        };
                    }
                    fxqueue4.Execute(args3);
                }
            }
            else if ((targetType & ETargetType.ADJACENT) == ETargetType.ADJACENT)
            {
                GameObject slotOrigin3 = ViewManager.Instance.GetSlotOrigin(party.Position);
                FXArgs     args4       = new FXArgs(memberGameObject, slotOrigin3, memberGameObject, slotOrigin3, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, list);
                FXQueue    fxqueue5    = Helper.Instantiate <FXQueue>(fxqueue);
                fxqueue5.Finished += delegate(Object sender, EventArgs e)
                {
                    OnFXQueueFinish(p_sender, p_args);
                };
                fxqueue5.Execute(args4);
            }
            else
            {
                Debug.Log("error !! spellType: " + targetType);
                FXArgs  args5    = new FXArgs(memberGameObject, memberGameObject, memberGameObject, memberGameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, list);
                FXQueue fxqueue6 = Helper.Instantiate <FXQueue>(fxqueue);
                fxqueue6.Finished += delegate(Object sender, EventArgs e)
                {
                    OnFXQueueFinish(p_sender, p_args);
                };
                fxqueue6.Execute(args5);
            }
        }