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!"); } } }
public void HandleAnimationOverrideFX(EAnimType pType, FXArgs pArgs) { if (m_Effects != null && m_Effects.Contains(pType)) { m_Effects.Load(pType).Configurate(m_AnimationEventHandler, pArgs); } }
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(); } }); }
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!"); }
public void Hit(FXArgs p_fxArgs) { m_CommandQueue.Enqueue(delegate { HandleAnimationOverrideFX(EAnimType.HIT, p_fxArgs); PlayAnimation(EAnimType.HIT, EState.HIT, -1f, 1f); }); }
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); }
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); }); }
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); } } } }
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(); }); }
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(); } }); }); }
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(); } }); }); }
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); }); }
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 + "'"); } } }
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)); } } }
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); } }
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); }
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); }
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!"); } } }
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); } } }
public void FX_HitNow(FXArgs p_fxArgs) { HandleAnimationOverrideFX(EAnimType.HIT, p_fxArgs); PlayAnimation(EAnimType.HIT, EState.HIT, -1f, 1f); }
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, "'" })); } } }
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); } }
public abstract void AttackCritical(FXArgs p_fxArgs, Action p_fxFinishedCallback);
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; }
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); } }