Created AnimDataKeyframeEvent

AnimStepper will generate Keyframe events for non-zero keyframes
Created constants for keyframe values and debug toString method
Added logging to AnimStepper
This commit is contained in:
Collin Smith 2020-08-22 14:54:04 -07:00
parent 37a4df94d9
commit a51e4f0b47
4 changed files with 56 additions and 2 deletions

View File

@ -37,6 +37,20 @@ public class Engine {
return COMPOSITE_NAME[component];
}
public static final byte KEYFRAME_NIL = 0;
public static final byte KEYFRAME_ATK = 1;
public static final byte KEYFRAME_MIS = 2;
public static final byte KEYFRAME_SND = 3;
public static final byte KEYFRAME_SKL = 4;
private static final String[] KEYFRAME_NAME = {
"", "ATK", "MIS", "SND", "SKL"
};
public static String getKeyframe(byte keyframe) {
return KEYFRAME_NAME[keyframe];
}
public static final class Object {
public static final int SUBCLASS_SHRINE = 1 << 0; // displays "<shrine_type> Shrine"
public static final int SUBCLASS_OBELISH = 1 << 1; // does nothing

View File

@ -4,13 +4,16 @@ import org.apache.logging.log4j.Logger;
import com.artemis.ComponentMapper;
import net.mostlyoriginal.api.event.common.EventSystem;
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.Engine;
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.AnimDataKeyframeEvent;
import com.riiablo.engine.server.event.SkillCastEvent;
import com.riiablo.log.LogManager;
@ -42,6 +45,12 @@ public class Actioneer extends PassiveSystem {
srvstfunc(entityId, skill.srvstfunc);
}
@Subscribe
public void onKeyframe(AnimDataKeyframeEvent event) {
log.debug("onKeyframe: {}, {} ({})", event.entityId, event.keyframe, Engine.getKeyframe(event.keyframe));
// if isCasting(id): srvdofunc(id, spell.srcdofunc)
}
// start func
private void srvstfunc(int entityId, int srvstfunc) {
log.trace("srvstfunc({},{})", entityId, srvstfunc);

View File

@ -1,16 +1,23 @@
package com.riiablo.engine.server;
import org.apache.logging.log4j.Logger;
import com.artemis.ComponentMapper;
import com.artemis.annotations.All;
import com.artemis.systems.IntervalIteratingSystem;
import net.mostlyoriginal.api.event.common.EventSystem;
import com.riiablo.codec.Animation;
import com.riiablo.engine.Engine;
import com.riiablo.engine.server.component.AnimData;
import com.riiablo.engine.server.event.AnimDataFinishedEvent;
import net.mostlyoriginal.api.event.common.EventSystem;
import com.riiablo.engine.server.event.AnimDataKeyframeEvent;
import com.riiablo.log.LogManager;
@All(AnimData.class)
public class AnimStepper extends IntervalIteratingSystem {
private static final Logger log = LogManager.getLogger(AnimStepper.class);
protected ComponentMapper<AnimData> mAnimData;
protected EventSystem events;
@ -27,5 +34,11 @@ public class AnimStepper extends IntervalIteratingSystem {
animData.frame -= animData.numFrames;
events.dispatch(AnimDataFinishedEvent.obtain(entityId));
}
final byte keyframe = animData.keyframes[animData.frame >>> 8];
if (keyframe > Engine.KEYFRAME_NIL) {
log.debug("broadcasting AnimDataKeyframeEvent({},{})", entityId, Engine.getKeyframe(keyframe));
events.dispatch(AnimDataKeyframeEvent.obtain(entityId, keyframe));
}
}
}

View File

@ -0,0 +1,18 @@
package com.riiablo.engine.server.event;
import com.artemis.annotations.EntityId;
import net.mostlyoriginal.api.event.common.Event;
public class AnimDataKeyframeEvent implements Event {
@EntityId
public int entityId;
public byte keyframe;
public static AnimDataKeyframeEvent obtain(int entityId, byte keyframe) {
AnimDataKeyframeEvent event = new AnimDataKeyframeEvent();
event.entityId = entityId;
event.keyframe = keyframe;
return event;
}
}