Implement event system scaffolding
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.bartlomiejpluta.base.api.entity;
|
||||
|
||||
import com.bartlomiejpluta.base.api.animation.Animated;
|
||||
import com.bartlomiejpluta.base.api.event.Reactive;
|
||||
import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer;
|
||||
import com.bartlomiejpluta.base.api.move.Direction;
|
||||
import com.bartlomiejpluta.base.api.move.Movable;
|
||||
@@ -9,7 +10,7 @@ import com.bartlomiejpluta.base.internal.render.Renderable;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public interface Entity extends Movable, Animated, Renderable, Updatable {
|
||||
public interface Entity extends Reactive, Movable, Animated, Renderable, Updatable {
|
||||
|
||||
Direction getFaceDirection();
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
package com.bartlomiejpluta.base.api.entity;
|
||||
|
||||
import com.bartlomiejpluta.base.api.move.Movement;
|
||||
|
||||
public interface EntityStepInListener extends Entity {
|
||||
void onEntityStepIn(Movement movement, Entity entity);
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
package com.bartlomiejpluta.base.api.entity;
|
||||
|
||||
import com.bartlomiejpluta.base.api.move.Movement;
|
||||
|
||||
public interface EntityStepOutListener extends Entity {
|
||||
void onEntityStepOut(Movement movement, Entity entity);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.bartlomiejpluta.base.api.event;
|
||||
|
||||
public interface Event {
|
||||
EventType<? extends Event> getType();
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.bartlomiejpluta.base.api.event;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@EqualsAndHashCode
|
||||
@RequiredArgsConstructor
|
||||
public final class EventType<E extends Event> {
|
||||
private final String type;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.bartlomiejpluta.base.api.event;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public interface Reactive {
|
||||
<E extends Event> void handleEvent(E event);
|
||||
|
||||
<E extends Event> void addEventListener(EventType<E> type, Consumer<E> listener);
|
||||
|
||||
<E extends Event> void removeEventListener(EventType<E> type, Consumer<E> listener);
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.bartlomiejpluta.base.api.map.layer.object;
|
||||
|
||||
import com.bartlomiejpluta.base.api.entity.Entity;
|
||||
import com.bartlomiejpluta.base.api.event.Event;
|
||||
import com.bartlomiejpluta.base.api.map.layer.base.Layer;
|
||||
import com.bartlomiejpluta.base.api.move.Movement;
|
||||
import org.joml.Vector2ic;
|
||||
@@ -24,8 +25,5 @@ public interface ObjectLayer extends Layer {
|
||||
|
||||
void pushMovement(Movement movement);
|
||||
|
||||
// Notifiers
|
||||
void notifyEntityStepIn(Movement movement, Entity entity);
|
||||
|
||||
void notifyEntityStepOut(Movement movement, Entity entity);
|
||||
void fireEvent(Event event);
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ public final class EntityMovement implements Movement {
|
||||
public boolean perform() {
|
||||
var result = object.move(this);
|
||||
if (result) {
|
||||
object.getLayer().notifyEntityStepOut(this, object);
|
||||
object.getLayer().fireEvent(new MoveEvent(MoveEvent.Action.BEGIN, object, this));
|
||||
}
|
||||
|
||||
return result;
|
||||
@@ -40,6 +40,6 @@ public final class EntityMovement implements Movement {
|
||||
|
||||
@Override
|
||||
public void onFinish() {
|
||||
object.getLayer().notifyEntityStepIn(this, object);
|
||||
object.getLayer().fireEvent(new MoveEvent(MoveEvent.Action.END, object, this));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.bartlomiejpluta.base.api.move;
|
||||
|
||||
import com.bartlomiejpluta.base.api.event.Event;
|
||||
import com.bartlomiejpluta.base.api.event.EventType;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
public final class MoveEvent implements Event {
|
||||
public enum Action {BEGIN, END}
|
||||
|
||||
private final Action action;
|
||||
private final Movable movable;
|
||||
private final Movement movement;
|
||||
|
||||
@Override
|
||||
public EventType<? extends Event> getType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
public static EventType<MoveEvent> TYPE = new EventType<>("MOVE_EVENT");
|
||||
}
|
||||
@@ -2,6 +2,8 @@ package com.bartlomiejpluta.base.lib.entity;
|
||||
|
||||
import com.bartlomiejpluta.base.api.camera.Camera;
|
||||
import com.bartlomiejpluta.base.api.entity.Entity;
|
||||
import com.bartlomiejpluta.base.api.event.Event;
|
||||
import com.bartlomiejpluta.base.api.event.EventType;
|
||||
import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer;
|
||||
import com.bartlomiejpluta.base.api.move.Direction;
|
||||
import com.bartlomiejpluta.base.api.move.EntityMovement;
|
||||
@@ -14,6 +16,7 @@ import org.joml.Vector2fc;
|
||||
import org.joml.Vector2ic;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public abstract class EntityDelegate implements Entity {
|
||||
protected final Entity entity;
|
||||
@@ -267,6 +270,21 @@ public abstract class EntityDelegate implements Entity {
|
||||
entity.setZIndex(zIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <E extends Event> void handleEvent(E event) {
|
||||
entity.handleEvent(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <E extends Event> void addEventListener(EventType<E> type, Consumer<E> listener) {
|
||||
entity.addEventListener(type, listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <E extends Event> void removeEventListener(EventType<E> type, Consumer<E> listener) {
|
||||
entity.removeEventListener(type, listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Void> performInstantAnimation() {
|
||||
return entity.performInstantAnimation();
|
||||
|
||||
Reference in New Issue
Block a user