From 8a820effc8adb39087cbc2a91da252fdf79d08da Mon Sep 17 00:00:00 2001 From: Collin Smith Date: Thu, 20 Aug 2020 22:39:02 -0700 Subject: [PATCH] Created Actioneer system to manage entity actions such as spell casting --- .../engine/client/CursorMovementSystem.java | 11 +++++-- .../com/riiablo/engine/server/Actioneer.java | 32 +++++++++++++++++++ core/src/com/riiablo/screen/GameScreen.java | 2 ++ 3 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 core/src/com/riiablo/engine/server/Actioneer.java diff --git a/core/src/com/riiablo/engine/client/CursorMovementSystem.java b/core/src/com/riiablo/engine/client/CursorMovementSystem.java index 2049e4b2..47225624 100644 --- a/core/src/com/riiablo/engine/client/CursorMovementSystem.java +++ b/core/src/com/riiablo/engine/client/CursorMovementSystem.java @@ -1,5 +1,7 @@ package com.riiablo.engine.client; +import org.apache.logging.log4j.Logger; + import com.artemis.Aspect; import com.artemis.BaseSystem; import com.artemis.ComponentMapper; @@ -18,18 +20,20 @@ import com.riiablo.Riiablo; import com.riiablo.camera.IsometricCamera; import com.riiablo.engine.Engine; import com.riiablo.engine.client.component.Hovered; +import com.riiablo.engine.server.Actioneer; import com.riiablo.engine.server.Pathfinder; import com.riiablo.engine.server.component.Interactable; import com.riiablo.engine.server.component.Position; import com.riiablo.engine.server.component.Target; import com.riiablo.item.Item; +import com.riiablo.log.LogManager; import com.riiablo.map.Map; import com.riiablo.map.RenderSystem; import com.riiablo.profiler.ProfilerSystem; import com.riiablo.save.ItemController; public class CursorMovementSystem extends BaseSystem { - private static final String TAG = "CursorMovementSystem"; + private static final Logger log = LogManager.getLogger(CursorMovementSystem.class); protected ComponentMapper mTarget; protected ComponentMapper mPosition; @@ -40,6 +44,7 @@ public class CursorMovementSystem extends BaseSystem { protected MenuManager menuManager; protected DialogManager dialogManager; protected ProfilerSystem profiler; + protected Actioneer actioneer; @Wire(name = "iso") protected IsometricCamera iso; @@ -77,9 +82,9 @@ public class CursorMovementSystem extends BaseSystem { if (hit) return; if (Gdx.input.isButtonPressed(Input.Buttons.LEFT) && UIUtils.shift()) { - // static primary cast + actioneer.cast(renderer.getSrc(), Riiablo.charData.getAction(Input.Buttons.LEFT)); } else if (Gdx.input.isButtonPressed(Input.Buttons.RIGHT)) { - // secondary cast + actioneer.cast(renderer.getSrc(), Riiablo.charData.getAction(Input.Buttons.RIGHT)); } else { updateLeft(); } diff --git a/core/src/com/riiablo/engine/server/Actioneer.java b/core/src/com/riiablo/engine/server/Actioneer.java new file mode 100644 index 00000000..e37df608 --- /dev/null +++ b/core/src/com/riiablo/engine/server/Actioneer.java @@ -0,0 +1,32 @@ +package com.riiablo.engine.server; + +import org.apache.logging.log4j.Logger; + +import com.artemis.ComponentMapper; +import net.mostlyoriginal.api.system.core.PassiveSystem; + +import com.riiablo.Riiablo; +import com.riiablo.codec.excel.Skills; +import com.riiablo.engine.server.component.Class; +import com.riiablo.engine.server.component.MovementModes; +import com.riiablo.engine.server.component.Sequence; +import com.riiablo.log.LogManager; + +public class Actioneer extends PassiveSystem { + private static final Logger log = LogManager.getLogger(Actioneer.class); + + protected ComponentMapper mClass; + protected ComponentMapper mSequence; + protected ComponentMapper mMovementModes; + + public void cast(int entityId, int skillId) { + if (mSequence.has(entityId)) return; + final Skills.Entry skill = Riiablo.files.skills.get(skillId); + log.trace("casting skill: {}", skill); + + byte mode = (byte) mClass.get(entityId).type.getMode(skill.anim); + log.trace("mode: {}", mode); + + mSequence.create(entityId).sequence(mode, mMovementModes.get(entityId).NU); + } +} diff --git a/core/src/com/riiablo/screen/GameScreen.java b/core/src/com/riiablo/screen/GameScreen.java index b2b397de..ec2f92f6 100644 --- a/core/src/com/riiablo/screen/GameScreen.java +++ b/core/src/com/riiablo/screen/GameScreen.java @@ -79,6 +79,7 @@ import com.riiablo.engine.client.debug.PathDebugger; import com.riiablo.engine.client.debug.PathfindDebugger; import com.riiablo.engine.client.debug.RenderSystemDebugger; import com.riiablo.engine.server.AIStepper; +import com.riiablo.engine.server.Actioneer; import com.riiablo.engine.server.AngularVelocity; import com.riiablo.engine.server.AnimDataResolver; import com.riiablo.engine.server.AnimStepper; @@ -567,6 +568,7 @@ public class GameScreen extends ScreenAdapter implements GameLoadingScreen.Loada ; if (!DEBUG_TOUCHPAD && Gdx.app.getType() == Application.ApplicationType.Desktop) { builder.with(new CursorMovementSystem()); + builder.with(new Actioneer()); } if (socket == null) { builder.with(new ItemGenerator());