mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-03-05 23:20:32 +07:00
Decoupled client-side code from Actioneer
Created SpellcastEvent and SpellcastHandler to handle client-side effects
This commit is contained in:
parent
e42288f8f6
commit
a1bc6c48fb
24
core/src/com/riiablo/engine/client/SpellcastHandler.java
Normal file
24
core/src/com/riiablo/engine/client/SpellcastHandler.java
Normal file
@ -0,0 +1,24 @@
|
||||
package com.riiablo.engine.client;
|
||||
|
||||
import net.mostlyoriginal.api.event.common.Subscribe;
|
||||
import net.mostlyoriginal.api.system.core.PassiveSystem;
|
||||
|
||||
import com.riiablo.Riiablo;
|
||||
import com.riiablo.codec.excel.Skills;
|
||||
import com.riiablo.engine.server.event.SpellcastEvent;
|
||||
|
||||
public class SpellcastHandler extends PassiveSystem {
|
||||
protected OverlayManager overlays;
|
||||
|
||||
@Subscribe
|
||||
public void onSpellcast(SpellcastEvent event) {
|
||||
final Skills.Entry skill = Riiablo.files.skills.get(event.skillId);
|
||||
|
||||
Riiablo.audio.play(skill.stsound, true);
|
||||
|
||||
if (!skill.castoverlay.isEmpty()) {
|
||||
overlays.set(event.entityId, skill.castoverlay);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -3,26 +3,26 @@ package com.riiablo.engine.server;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import com.artemis.ComponentMapper;
|
||||
import net.mostlyoriginal.api.event.common.EventSystem;
|
||||
import net.mostlyoriginal.api.system.core.PassiveSystem;
|
||||
|
||||
import com.riiablo.Riiablo;
|
||||
import com.riiablo.codec.excel.Skills;
|
||||
import com.riiablo.engine.client.OverlayManager;
|
||||
import com.riiablo.engine.server.component.Class;
|
||||
import com.riiablo.engine.server.component.MovementModes;
|
||||
import com.riiablo.engine.server.component.Sequence;
|
||||
import com.riiablo.engine.server.event.SpellcastEvent;
|
||||
import com.riiablo.log.LogManager;
|
||||
|
||||
public class Actioneer extends PassiveSystem {
|
||||
private static final Logger log = LogManager.getLogger(Actioneer.class);
|
||||
|
||||
protected OverlayManager overlays;
|
||||
|
||||
protected ComponentMapper<Class> mClass;
|
||||
protected ComponentMapper<Sequence> mSequence;
|
||||
protected ComponentMapper<MovementModes> mMovementModes;
|
||||
|
||||
// TODO: much of this should be split into different systems or events (e.g., onSpellCast)
|
||||
protected EventSystem events;
|
||||
|
||||
public void cast(int entityId, int skillId) {
|
||||
if (mSequence.has(entityId)) return;
|
||||
final Skills.Entry skill = Riiablo.files.skills.get(skillId);
|
||||
@ -36,13 +36,6 @@ public class Actioneer extends PassiveSystem {
|
||||
}
|
||||
|
||||
mSequence.create(entityId).sequence(mode, mMovementModes.get(entityId).NU);
|
||||
|
||||
// FIXME: below uses client-side-only code -- may change to event-based model
|
||||
// does server even need to care about overlays?
|
||||
Riiablo.audio.play(skill.stsound, true);
|
||||
|
||||
if (!skill.castoverlay.isEmpty()) {
|
||||
overlays.set(entityId, skill.castoverlay);
|
||||
}
|
||||
events.dispatch(SpellcastEvent.obtain(entityId, skillId));
|
||||
}
|
||||
}
|
||||
|
17
core/src/com/riiablo/engine/server/event/SpellcastEvent.java
Normal file
17
core/src/com/riiablo/engine/server/event/SpellcastEvent.java
Normal file
@ -0,0 +1,17 @@
|
||||
package com.riiablo.engine.server.event;
|
||||
|
||||
import com.artemis.annotations.EntityId;
|
||||
import net.mostlyoriginal.api.event.common.Event;
|
||||
|
||||
public class SpellcastEvent implements Event {
|
||||
@EntityId
|
||||
public int entityId;
|
||||
public int skillId;
|
||||
|
||||
public static SpellcastEvent obtain(int entityId, int skillId) {
|
||||
SpellcastEvent event = new SpellcastEvent();
|
||||
event.entityId = entityId;
|
||||
event.skillId = skillId;
|
||||
return event;
|
||||
}
|
||||
}
|
@ -73,6 +73,7 @@ import com.riiablo.engine.client.OverlayManager;
|
||||
import com.riiablo.engine.client.OverlayStepper;
|
||||
import com.riiablo.engine.client.SelectableManager;
|
||||
import com.riiablo.engine.client.SoundEmitterHandler;
|
||||
import com.riiablo.engine.client.SpellcastHandler;
|
||||
import com.riiablo.engine.client.WarpSubstManager;
|
||||
import com.riiablo.engine.client.ZoneChangeTracker;
|
||||
import com.riiablo.engine.client.ZoneEntryDisplayer;
|
||||
@ -570,8 +571,8 @@ public class GameScreen extends ScreenAdapter implements GameLoadingScreen.Loada
|
||||
;
|
||||
if (!DEBUG_TOUCHPAD && Gdx.app.getType() == Application.ApplicationType.Desktop) {
|
||||
builder.with(new CursorMovementSystem());
|
||||
/** FIXME: below is tightly coupled with client-side-only code {@link Actioneer#cast} */
|
||||
builder.with(new Actioneer()); // TODO: move to more appropriate spot in list
|
||||
builder.with(new SpellcastHandler()); // TODO: move to more appropriate spot in list
|
||||
builder.with(new OverlayManager()); // TODO: move to more appropriate spot in list
|
||||
builder.with(new OverlayStepper()); // TODO: move to more appropriate spot in list
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user