コード例 #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
ファイル: TestMain.cs プロジェクト: blockspacer/MMXLegacy
    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);
    }
コード例 #3
0
ファイル: PlayerCombatView.cs プロジェクト: acosin/MMXLegacy
        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!");
                }
            }
        }
コード例 #4
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);
            }
        }