Refactor event system | make Context events-aware | introduce GamePauseEvent

This commit is contained in:
2021-04-08 23:00:42 +02:00
parent 808155533d
commit d3293e3004
9 changed files with 81 additions and 19 deletions

View File

@@ -4,6 +4,8 @@ import com.bartlomiejpluta.base.api.animation.Animation;
import com.bartlomiejpluta.base.api.audio.Sound;
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.gui.GUI;
import com.bartlomiejpluta.base.api.image.Image;
import com.bartlomiejpluta.base.api.input.Input;
@@ -18,6 +20,7 @@ import com.bartlomiejpluta.base.util.lambda.UncheckedFunction;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.function.Consumer;
public interface Context extends Updatable, Renderable, Disposable {
GameRunner getGameRunner();
@@ -70,6 +73,10 @@ public interface Context extends Updatable, Renderable, Disposable {
boolean togglePause();
<E extends Event> void addEventListener(EventType<E> type, Consumer<E> listener);
<E extends Event> void removeEventListener(EventType<E> type, Consumer<E> listener);
void init(Screen screen, Input input, Camera camera);
void input(Input input);

View File

@@ -0,0 +1,19 @@
package com.bartlomiejpluta.base.api.context;
import com.bartlomiejpluta.base.api.event.Event;
import com.bartlomiejpluta.base.api.event.EventType;
import com.bartlomiejpluta.base.lib.event.BaseEvent;
import lombok.EqualsAndHashCode;
import lombok.Value;
@Value
@EqualsAndHashCode(callSuper = true)
public class GamePauseEvent extends BaseEvent {
public static final EventType<GamePauseEvent> TYPE = new EventType<>("GAME_PAUSE_EVENT");
boolean paused;
@Override
public EventType<? extends Event> getType() {
return TYPE;
}
}

View File

@@ -1,11 +1,12 @@
package com.bartlomiejpluta.base.api.map.layer.base;
import com.bartlomiejpluta.base.api.animation.Animation;
import com.bartlomiejpluta.base.api.event.Reactive;
import com.bartlomiejpluta.base.api.map.model.GameMap;
import com.bartlomiejpluta.base.internal.logic.Updatable;
import com.bartlomiejpluta.base.internal.render.Renderable;
public interface Layer extends Renderable, Updatable {
public interface Layer extends Renderable, Updatable, Reactive {
GameMap getMap();
void pushAnimation(Animation animation);

View File

@@ -1,12 +1,13 @@
package com.bartlomiejpluta.base.api.map.model;
import com.bartlomiejpluta.base.api.event.Reactive;
import com.bartlomiejpluta.base.api.map.layer.color.ColorLayer;
import com.bartlomiejpluta.base.api.map.layer.image.ImageLayer;
import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer;
import com.bartlomiejpluta.base.api.map.layer.tile.TileLayer;
import org.joml.Vector2fc;
public interface GameMap {
public interface GameMap extends Reactive {
float getWidth();
float getHeight();

View File

@@ -1,8 +1,10 @@
package com.bartlomiejpluta.base.lib.event;
import com.bartlomiejpluta.base.api.event.Event;
import lombok.EqualsAndHashCode;
import lombok.Getter;
@EqualsAndHashCode
public abstract class BaseEvent implements Event {
@Getter