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 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!"); } } }
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); } }