public override void OnHitMonster(Monster monster) { InteractionType interactionType = InteractionType.Sword; if (Player.CurrentState == Player.SwingBigSwordState) interactionType = InteractionType.BiggoronSword; else if (Player.CurrentState == Player.SpinSwordState) interactionType = InteractionType.SwordSpin; // Trigger the monster's sword reaction. monster.TriggerInteraction(interactionType, unit, new WeaponInteractionEventArgs() { Weapon = itemSword }); // Stab if holding sword. if (Player.CurrentState == Player.HoldSwordState) Player.HoldSwordState.Stab(false); else if (Player.CurrentState == Player.SwingSwordState) Player.SwingSwordState.AllowSwordHold = false; }
// Instantly kill the monster. public static void SoftKill(Monster monster, Entity sender, EventArgs args) { monster.SoftKill(); }
public void TriggerMonsterReaction(Monster monster) { // Destroy the seed and create the effect. Entity effect = DestroyWithEffect(); // Trigger the immediate seed effect actions. if (type == SeedType.Scent) monster.TriggerInteraction(InteractionType.ScentSeed, effect); else if (type == SeedType.Pegasus) monster.TriggerInteraction(InteractionType.PegasusSeed, effect); else if (type == SeedType.Mystery) monster.TriggerInteraction(InteractionType.MysterySeed, effect); }
public override void OnCollideMonster(Monster monster) { monster.TriggerInteraction(InteractionType.RodFire, this); }
public override void OnCollideMonster(Monster monster) { if (!isReturning && !isHooked && !isLifting) monster.TriggerInteraction(InteractionType.SwitchHook, this); }
public static void Kill(Monster monster, Entity sender, EventArgs args) { if (sender is Unit) (sender as Unit).Kill(); else sender.Destroy(); }
//----------------------------------------------------------------------------- // Basic Sender Reactions //----------------------------------------------------------------------------- public static void Destroy(Monster monster, Entity sender, EventArgs args) { sender.Destroy(); }
public static void Bump(Monster monster, Entity sender, EventArgs args) { if (sender is Unit) (sender as Unit).Bump(monster.Center); }
// Burn the monster for 1 damage. public static void Burn(Monster monster, Entity sender, EventArgs args) { monster.Burn(1); if (sender is Fire) sender.Destroy(); }
// Bump the monster. public static void Bump(Monster monster, Entity sender, EventArgs args) { AudioSystem.PlaySound(GameData.SOUND_BOMB_BOUNCE); monster.Bump(sender.Center); }
public void Trigger(Monster monster, Entity sender, EventArgs args) { if (handler != null) handler.Invoke(monster, sender, args); }
public virtual void OnHitMonster(Monster monster) { }
public override void OnHitMonster(Monster monster) { monster.TriggerInteraction(InteractionType.Shield, unit, new WeaponInteractionEventArgs() { Weapon = itemShield }); }
// Stun the monster. public static void Stun(Monster monster, Entity sender, EventArgs args) { monster.Stun(); }
// Stun the monster. public static void ClingEffect(Monster monster, Entity sender, EventArgs args) { Effect effect = new EffectCling(); Vector2F effectPos = (monster.Center + sender.Center) * 0.5f; if (args is InteractionArgs) effectPos = (args as InteractionArgs).ContactPoint; monster.RoomControl.SpawnEntity(effect, effectPos); AudioSystem.PlaySound(GameData.SOUND_EFFECT_CLING); }
// Switch places with the monster (Only for switch-hook interactions). public static void SwitchHook(Monster monster, Entity sender, EventArgs args) { SwitchHookProjectile hook = sender as SwitchHookProjectile; hook.SwitchWithEntity(monster); monster.BeginState(new MonsterBusyState(20)); }
// Damage the monster for 4 damage. public static void Damage4(Monster monster, Entity sender, EventArgs args) { monster.Hurt(4, sender.Center); }
public static void Damage(Monster monster, Entity sender, EventArgs args) { if (sender is Unit) (sender as Unit).Hurt(1, monster.Center); }
// Send the monster in a gale. public static void Gale(Monster monster, Entity sender, EventArgs args) { monster.EnterGale((EffectGale) sender); }
public static void Intercept(Monster monster, Entity sender, EventArgs args) { if (sender is IInterceptable) (sender as IInterceptable).Intercept(); }
// Trigger a random seed effect. public static void MysterySeed(Monster monster, Entity sender, EventArgs args) { // Random: burn, stun, damage, gale int rand = GRandom.NextInt(4); SeedEntity seed = (SeedEntity) sender; if (rand == 0) seed.SeedType = SeedType.Ember; else if (rand == 1) seed.SeedType = SeedType.Scent; else if (rand == 2) seed.SeedType = SeedType.Pegasus; else seed.SeedType = SeedType.Gale; monster.TriggerInteraction(Monster.GetSeedInteractionType(seed.SeedType), sender, args); }
public override void OnCollideMonster(Monster monster) { monster.OnSeedHit(this); }
// Bump the monster and sender. public static void Parry(Monster monster, Entity sender, EventArgs args) { monster.Bump(sender.Center); Unit unitSender = sender as Unit; if (unitSender != null && !unitSender.IsBeingKnockedBack) { unitSender.Bump(monster.Center); AudioSystem.PlaySound(GameData.SOUND_EFFECT_CLING); } }
public override void OnCollideMonster(Monster monster) { monster.TriggerInteraction(InteractionType.Boomerang, this); }
// Bump the monster and sender. public static void ParryWithClingEffect(Monster monster, Entity sender, EventArgs args) { monster.Bump(sender.Center); Unit unitSender = sender as Unit; if (unitSender != null && !unitSender.IsBeingKnockedBack && !monster.IsBeingKnockedBack) { unitSender.Bump(monster.Center); AudioSystem.PlaySound(GameData.SOUND_EFFECT_CLING); Effect effect = new EffectCling(); Vector2F effectPos = (monster.Center + sender.Center) * 0.5f; if (args is InteractionArgs) effectPos = (args as InteractionArgs).ContactPoint; monster.RoomControl.SpawnEntity(effect, effectPos); } }
public override void OnCollideMonster(Monster monster) { monster.TriggerInteraction(InteractionType.SwordBeam, this); }
public virtual void OnCollideMonster(Monster monster) { }