Created Actioneer system to manage entity actions such as spell casting

This commit is contained in:
Collin Smith 2020-08-20 22:39:02 -07:00
parent 885df8f4e2
commit 8a820effc8
3 changed files with 42 additions and 3 deletions

View File

@ -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<Target> mTarget;
protected ComponentMapper<Position> 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();
}

View File

@ -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<Class> mClass;
protected ComponentMapper<Sequence> mSequence;
protected ComponentMapper<MovementModes> 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);
}
}

View File

@ -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());