From 51abf6dd27052eaa974cee3312f4841ff9633efe Mon Sep 17 00:00:00 2001 From: vincent4vx Date: Wed, 17 Oct 2018 19:01:20 +0200 Subject: [PATCH] close #63 Migrate all effects to fight module --- .../quatrevieux/araknemu/game/GameModule.java | 2 + .../araknemu/game/fight/Fight.java | 2 +- .../fight/castable/effect/EffectsHandler.java | 73 --------------- .../fight/module/CommonEffectsModule.java | 91 +++++++++++++++++++ .../castable/effect/EffectsHandlerTest.java | 5 +- .../fight/castable/effect/FunctionalTest.java | 2 + .../game/fight/turn/action/cast/CastTest.java | 2 + .../action/closeCombat/CloseCombatTest.java | 2 + 8 files changed, 104 insertions(+), 75 deletions(-) create mode 100644 src/main/java/fr/quatrevieux/araknemu/game/fight/module/CommonEffectsModule.java diff --git a/src/main/java/fr/quatrevieux/araknemu/game/GameModule.java b/src/main/java/fr/quatrevieux/araknemu/game/GameModule.java index 452c7ab15..62ad79f9a 100644 --- a/src/main/java/fr/quatrevieux/araknemu/game/GameModule.java +++ b/src/main/java/fr/quatrevieux/araknemu/game/GameModule.java @@ -51,6 +51,7 @@ import fr.quatrevieux.araknemu.game.exploration.map.cell.trigger.action.teleport.TeleportFactory; import fr.quatrevieux.araknemu.game.fight.FightService; import fr.quatrevieux.araknemu.game.fight.builder.ChallengeBuilderFactory; +import fr.quatrevieux.araknemu.game.fight.module.CommonEffectsModule; import fr.quatrevieux.araknemu.game.fight.module.RaulebaqueModule; import fr.quatrevieux.araknemu.game.fight.module.StatesModule; import fr.quatrevieux.araknemu.game.handler.loader.*; @@ -429,6 +430,7 @@ private void configureServices(ContainerConfigurator configurator) new ChallengeBuilderFactory() ), Arrays.asList( + CommonEffectsModule::new, StatesModule::new, RaulebaqueModule::new ) diff --git a/src/main/java/fr/quatrevieux/araknemu/game/fight/Fight.java b/src/main/java/fr/quatrevieux/araknemu/game/fight/Fight.java index 15bdd891a..f41224d42 100644 --- a/src/main/java/fr/quatrevieux/araknemu/game/fight/Fight.java +++ b/src/main/java/fr/quatrevieux/araknemu/game/fight/Fight.java @@ -37,7 +37,7 @@ final public class Fight implements Dispatcher, Sender { final private ListenerAggregate dispatcher = new DefaultListenerAggregate(); final private ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); final private FightTurnList turnList = new FightTurnList(this); - final private EffectsHandler effects = new EffectsHandler(this); + final private EffectsHandler effects = new EffectsHandler(); final private StopWatch duration = new StopWatch(); diff --git a/src/main/java/fr/quatrevieux/araknemu/game/fight/castable/effect/EffectsHandler.java b/src/main/java/fr/quatrevieux/araknemu/game/fight/castable/effect/EffectsHandler.java index be75a3617..0ae3ff604 100644 --- a/src/main/java/fr/quatrevieux/araknemu/game/fight/castable/effect/EffectsHandler.java +++ b/src/main/java/fr/quatrevieux/araknemu/game/fight/castable/effect/EffectsHandler.java @@ -1,19 +1,7 @@ package fr.quatrevieux.araknemu.game.fight.castable.effect; -import fr.quatrevieux.araknemu.data.constant.Characteristic; -import fr.quatrevieux.araknemu.game.fight.Fight; import fr.quatrevieux.araknemu.game.fight.castable.CastScope; import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.EffectHandler; -import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.armor.HealOrMultiplyDamageHandler; -import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.armor.ReduceDamageHandler; -import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.armor.SpellReturnHandler; -import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.characteristic.*; -import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.damage.DamageHandler; -import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.damage.StealLifeHandler; -import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.misc.PushStateHandler; -import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.misc.RemoveStateHandler; -import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.misc.SkipTurnHandler; -import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.shifting.TeleportHandler; import fr.quatrevieux.araknemu.game.fight.fighter.Fighter; import java.util.HashMap; @@ -23,69 +11,8 @@ * Handle fight effects */ final public class EffectsHandler { - final private Fight fight; - final private Map handlers = new HashMap<>(); - public EffectsHandler(Fight fight) { - this.fight = fight; - - register(4, new TeleportHandler(fight)); - - register(91, new StealLifeHandler(Element.WATER, fight)); - register(92, new StealLifeHandler(Element.EARTH, fight)); - register(93, new StealLifeHandler(Element.AIR, fight)); - register(94, new StealLifeHandler(Element.FIRE, fight)); - register(95, new StealLifeHandler(Element.NEUTRAL, fight)); - - register(96, new DamageHandler(Element.WATER, fight)); - register(97, new DamageHandler(Element.EARTH, fight)); - register(98, new DamageHandler(Element.AIR, fight)); - register(99, new DamageHandler(Element.FIRE, fight)); - register(100, new DamageHandler(Element.NEUTRAL, fight)); - - register(140, new SkipTurnHandler(fight)); - register(950, new PushStateHandler(fight)); - register(951, new RemoveStateHandler()); - - register(79, new HealOrMultiplyDamageHandler()); - register(105, new ReduceDamageHandler()); - register(106, new SpellReturnHandler(fight)); - register(265, new ReduceDamageHandler()); - - register(111, new AddActionPointsHandler(fight)); - register(120, new AddActionPointsHandler(fight)); - register(168, new RemoveActionPointsHandler(fight)); - - register(78, new AddMovementPointsHandler(fight)); - register(128, new AddMovementPointsHandler(fight)); - register(169, new RemoveMovementPointsHandler(fight)); - - register(112, new AddCharacteristicHandler(fight, Characteristic.FIXED_DAMAGE)); - register(115, new AddCharacteristicHandler(fight, Characteristic.CRITICAL_BONUS)); - register(117, new AddCharacteristicHandler(fight, Characteristic.SIGHT_BOOST)); - register(118, new AddCharacteristicHandler(fight, Characteristic.STRENGTH)); - register(119, new AddCharacteristicHandler(fight, Characteristic.AGILITY)); - register(122, new AddCharacteristicHandler(fight, Characteristic.FAIL_MALUS)); - register(123, new AddCharacteristicHandler(fight, Characteristic.LUCK)); - register(124, new AddCharacteristicHandler(fight, Characteristic.WISDOM)); - register(126, new AddCharacteristicHandler(fight, Characteristic.INTELLIGENCE)); - register(138, new AddCharacteristicHandler(fight, Characteristic.PERCENT_DAMAGE)); - register(178, new AddCharacteristicHandler(fight, Characteristic.HEALTH_BOOST)); - register(182, new AddCharacteristicHandler(fight, Characteristic.MAX_SUMMONED_CREATURES)); - - register(116, new RemoveCharacteristicHandler(fight, Characteristic.SIGHT_BOOST)); - register(145, new RemoveCharacteristicHandler(fight, Characteristic.FIXED_DAMAGE)); - register(152, new RemoveCharacteristicHandler(fight, Characteristic.LUCK)); - register(154, new RemoveCharacteristicHandler(fight, Characteristic.AGILITY)); - register(155, new RemoveCharacteristicHandler(fight, Characteristic.INTELLIGENCE)); - register(156, new RemoveCharacteristicHandler(fight, Characteristic.WISDOM)); - register(157, new RemoveCharacteristicHandler(fight, Characteristic.STRENGTH)); - register(171, new RemoveCharacteristicHandler(fight, Characteristic.CRITICAL_BONUS)); - register(179, new RemoveCharacteristicHandler(fight, Characteristic.HEALTH_BOOST)); - register(186, new RemoveCharacteristicHandler(fight, Characteristic.PERCENT_DAMAGE)); - } - public void register(int effectId, EffectHandler applier) { handlers.put(effectId, applier); } diff --git a/src/main/java/fr/quatrevieux/araknemu/game/fight/module/CommonEffectsModule.java b/src/main/java/fr/quatrevieux/araknemu/game/fight/module/CommonEffectsModule.java new file mode 100644 index 000000000..b13b291ab --- /dev/null +++ b/src/main/java/fr/quatrevieux/araknemu/game/fight/module/CommonEffectsModule.java @@ -0,0 +1,91 @@ +package fr.quatrevieux.araknemu.game.fight.module; + +import fr.quatrevieux.araknemu.core.event.Listener; +import fr.quatrevieux.araknemu.data.constant.Characteristic; +import fr.quatrevieux.araknemu.game.fight.Fight; +import fr.quatrevieux.araknemu.game.fight.castable.effect.EffectsHandler; +import fr.quatrevieux.araknemu.game.fight.castable.effect.Element; +import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.armor.HealOrMultiplyDamageHandler; +import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.armor.ReduceDamageHandler; +import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.armor.SpellReturnHandler; +import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.characteristic.*; +import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.damage.DamageHandler; +import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.damage.StealLifeHandler; +import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.misc.PushStateHandler; +import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.misc.RemoveStateHandler; +import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.misc.SkipTurnHandler; +import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.shifting.TeleportHandler; + +/** + * Module for register common fight effects + */ +final public class CommonEffectsModule implements FightModule { + final private Fight fight; + + public CommonEffectsModule(Fight fight) { + this.fight = fight; + } + + @Override + public void effects(EffectsHandler handler) { + handler.register(4, new TeleportHandler(fight)); + + handler.register(91, new StealLifeHandler(Element.WATER, fight)); + handler.register(92, new StealLifeHandler(Element.EARTH, fight)); + handler.register(93, new StealLifeHandler(Element.AIR, fight)); + handler.register(94, new StealLifeHandler(Element.FIRE, fight)); + handler.register(95, new StealLifeHandler(Element.NEUTRAL, fight)); + + handler.register(96, new DamageHandler(Element.WATER, fight)); + handler.register(97, new DamageHandler(Element.EARTH, fight)); + handler.register(98, new DamageHandler(Element.AIR, fight)); + handler.register(99, new DamageHandler(Element.FIRE, fight)); + handler.register(100, new DamageHandler(Element.NEUTRAL, fight)); + + handler.register(140, new SkipTurnHandler(fight)); + handler.register(950, new PushStateHandler(fight)); + handler.register(951, new RemoveStateHandler()); + + handler.register(79, new HealOrMultiplyDamageHandler()); + handler.register(105, new ReduceDamageHandler()); + handler.register(106, new SpellReturnHandler(fight)); + handler.register(265, new ReduceDamageHandler()); + + handler.register(111, new AddActionPointsHandler(fight)); + handler.register(120, new AddActionPointsHandler(fight)); + handler.register(168, new RemoveActionPointsHandler(fight)); + + handler.register(78, new AddMovementPointsHandler(fight)); + handler.register(128, new AddMovementPointsHandler(fight)); + handler.register(169, new RemoveMovementPointsHandler(fight)); + + handler.register(112, new AddCharacteristicHandler(fight, Characteristic.FIXED_DAMAGE)); + handler.register(115, new AddCharacteristicHandler(fight, Characteristic.CRITICAL_BONUS)); + handler.register(117, new AddCharacteristicHandler(fight, Characteristic.SIGHT_BOOST)); + handler.register(118, new AddCharacteristicHandler(fight, Characteristic.STRENGTH)); + handler.register(119, new AddCharacteristicHandler(fight, Characteristic.AGILITY)); + handler.register(122, new AddCharacteristicHandler(fight, Characteristic.FAIL_MALUS)); + handler.register(123, new AddCharacteristicHandler(fight, Characteristic.LUCK)); + handler.register(124, new AddCharacteristicHandler(fight, Characteristic.WISDOM)); + handler.register(126, new AddCharacteristicHandler(fight, Characteristic.INTELLIGENCE)); + handler.register(138, new AddCharacteristicHandler(fight, Characteristic.PERCENT_DAMAGE)); + handler.register(178, new AddCharacteristicHandler(fight, Characteristic.HEALTH_BOOST)); + handler.register(182, new AddCharacteristicHandler(fight, Characteristic.MAX_SUMMONED_CREATURES)); + + handler.register(116, new RemoveCharacteristicHandler(fight, Characteristic.SIGHT_BOOST)); + handler.register(145, new RemoveCharacteristicHandler(fight, Characteristic.FIXED_DAMAGE)); + handler.register(152, new RemoveCharacteristicHandler(fight, Characteristic.LUCK)); + handler.register(154, new RemoveCharacteristicHandler(fight, Characteristic.AGILITY)); + handler.register(155, new RemoveCharacteristicHandler(fight, Characteristic.INTELLIGENCE)); + handler.register(156, new RemoveCharacteristicHandler(fight, Characteristic.WISDOM)); + handler.register(157, new RemoveCharacteristicHandler(fight, Characteristic.STRENGTH)); + handler.register(171, new RemoveCharacteristicHandler(fight, Characteristic.CRITICAL_BONUS)); + handler.register(179, new RemoveCharacteristicHandler(fight, Characteristic.HEALTH_BOOST)); + handler.register(186, new RemoveCharacteristicHandler(fight, Characteristic.PERCENT_DAMAGE)); + } + + @Override + public Listener[] listeners() { + return new Listener[0]; + } +} diff --git a/src/test/java/fr/quatrevieux/araknemu/game/fight/castable/effect/EffectsHandlerTest.java b/src/test/java/fr/quatrevieux/araknemu/game/fight/castable/effect/EffectsHandlerTest.java index 47ff5dfbf..bc73b1ad7 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/fight/castable/effect/EffectsHandlerTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/fight/castable/effect/EffectsHandlerTest.java @@ -6,6 +6,7 @@ import fr.quatrevieux.araknemu.game.fight.castable.effect.buff.Buff; import fr.quatrevieux.araknemu.game.fight.castable.effect.buff.BuffHook; import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.damage.DamageHandler; +import fr.quatrevieux.araknemu.game.fight.module.CommonEffectsModule; import fr.quatrevieux.araknemu.game.spell.Spell; import fr.quatrevieux.araknemu.game.spell.SpellConstraints; import fr.quatrevieux.araknemu.game.spell.effect.SpellEffect; @@ -32,7 +33,9 @@ public void setUp() throws Exception { fight = createFight(); fight.nextState(); - handler = new EffectsHandler(fight); + handler = new EffectsHandler(); + + new CommonEffectsModule(fight).effects(handler); requestStack.clear(); } diff --git a/src/test/java/fr/quatrevieux/araknemu/game/fight/castable/effect/FunctionalTest.java b/src/test/java/fr/quatrevieux/araknemu/game/fight/castable/effect/FunctionalTest.java index c606f55d1..6baa2fb61 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/fight/castable/effect/FunctionalTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/fight/castable/effect/FunctionalTest.java @@ -7,6 +7,7 @@ import fr.quatrevieux.araknemu.game.fight.castable.spell.SpellConstraintsValidator; import fr.quatrevieux.araknemu.game.fight.fighter.player.PlayerFighter; import fr.quatrevieux.araknemu.game.fight.map.FightCell; +import fr.quatrevieux.araknemu.game.fight.module.CommonEffectsModule; import fr.quatrevieux.araknemu.game.fight.state.PlacementState; import fr.quatrevieux.araknemu.game.fight.turn.FightTurn; import fr.quatrevieux.araknemu.game.fight.turn.action.cast.Cast; @@ -41,6 +42,7 @@ public void setUp() throws Exception { dataSet.pushFunctionalSpells(); fight = createFight(); + fight.register(new CommonEffectsModule(fight)); fighter1 = player.fighter(); fighter2 = other.fighter(); diff --git a/src/test/java/fr/quatrevieux/araknemu/game/fight/turn/action/cast/CastTest.java b/src/test/java/fr/quatrevieux/araknemu/game/fight/turn/action/cast/CastTest.java index ec0cfe1d3..de74c05be 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/fight/turn/action/cast/CastTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/fight/turn/action/cast/CastTest.java @@ -5,6 +5,7 @@ import fr.quatrevieux.araknemu.game.fight.castable.validator.CastConstraintValidator; import fr.quatrevieux.araknemu.game.fight.castable.spell.SpellConstraintsValidator; import fr.quatrevieux.araknemu.game.fight.fighter.Fighter; +import fr.quatrevieux.araknemu.game.fight.module.CommonEffectsModule; import fr.quatrevieux.araknemu.game.fight.turn.FightTurn; import fr.quatrevieux.araknemu.game.fight.turn.action.ActionResult; import fr.quatrevieux.araknemu.game.fight.turn.action.ActionType; @@ -32,6 +33,7 @@ public void setUp() throws Exception { fight = createFight(); fight.nextState(); + fight.register(new CommonEffectsModule(fight)); turn = new FightTurn(fighter = player.fighter(), fight, Duration.ofSeconds(30)); fighter.move(fight.map().get(185)); diff --git a/src/test/java/fr/quatrevieux/araknemu/game/fight/turn/action/closeCombat/CloseCombatTest.java b/src/test/java/fr/quatrevieux/araknemu/game/fight/turn/action/closeCombat/CloseCombatTest.java index 546bd9c22..3c88b29a8 100644 --- a/src/test/java/fr/quatrevieux/araknemu/game/fight/turn/action/closeCombat/CloseCombatTest.java +++ b/src/test/java/fr/quatrevieux/araknemu/game/fight/turn/action/closeCombat/CloseCombatTest.java @@ -6,6 +6,7 @@ import fr.quatrevieux.araknemu.game.fight.castable.weapon.WeaponConstraintsValidator; import fr.quatrevieux.araknemu.game.fight.exception.FightException; import fr.quatrevieux.araknemu.game.fight.fighter.Fighter; +import fr.quatrevieux.araknemu.game.fight.module.CommonEffectsModule; import fr.quatrevieux.araknemu.game.fight.turn.FightTurn; import fr.quatrevieux.araknemu.game.fight.turn.action.ActionResult; import fr.quatrevieux.araknemu.game.fight.turn.action.ActionType; @@ -34,6 +35,7 @@ public void setUp() throws Exception { fight = createFight(); fight.nextState(); + fight.register(new CommonEffectsModule(fight)); turn = new FightTurn(fighter = player.fighter(), fight, Duration.ofSeconds(30)); fighter.move(fight.map().get(171));