Make Entity supports KeyEventHandler

This commit is contained in:
2021-04-01 21:33:29 +02:00
parent f5f8ec1595
commit 075b0e67dc
3 changed files with 42 additions and 2 deletions

View File

@@ -8,6 +8,8 @@ import com.bartlomiejpluta.base.api.entity.Entity;
import com.bartlomiejpluta.base.api.gui.GUI;
import com.bartlomiejpluta.base.api.image.Image;
import com.bartlomiejpluta.base.api.input.Input;
import com.bartlomiejpluta.base.api.input.KeyEvent;
import com.bartlomiejpluta.base.api.input.KeyEventHandler;
import com.bartlomiejpluta.base.api.map.handler.MapHandler;
import com.bartlomiejpluta.base.api.runner.GameRunner;
import com.bartlomiejpluta.base.api.screen.Screen;
@@ -39,7 +41,7 @@ import java.util.List;
@Slf4j
@Builder
public class DefaultContext implements Context {
public class DefaultContext implements Context, KeyEventHandler {
@NonNull
private final GameEngine engine;
@@ -103,6 +105,8 @@ public class DefaultContext implements Context {
this.input = input;
this.camera = camera;
input.addKeyEventHandler(this);
gameRunner.init(this);
}
@@ -232,6 +236,19 @@ public class DefaultContext implements Context {
}
}
@Override
public void handleKeyEvent(KeyEvent event) {
if (map == null || event.isConsumed()) {
return;
}
for (var layer : map.getLayers()) {
if (layer instanceof KeyEventHandler) {
((KeyEventHandler) layer).handleKeyEvent(event);
}
}
}
@Override
public void update(float dt) {
gameRunner.update(dt);

View File

@@ -5,6 +5,8 @@ import com.bartlomiejpluta.base.api.camera.Camera;
import com.bartlomiejpluta.base.api.entity.Entity;
import com.bartlomiejpluta.base.api.entity.EntityStepInListener;
import com.bartlomiejpluta.base.api.entity.EntityStepOutListener;
import com.bartlomiejpluta.base.api.input.KeyEvent;
import com.bartlomiejpluta.base.api.input.KeyEventHandler;
import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer;
import com.bartlomiejpluta.base.api.map.layer.object.PassageAbility;
import com.bartlomiejpluta.base.api.map.model.GameMap;
@@ -24,13 +26,14 @@ import java.util.Queue;
import static java.lang.Float.compare;
import static java.lang.Integer.compare;
public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
public class DefaultObjectLayer extends BaseLayer implements ObjectLayer, KeyEventHandler {
@Getter
private final ArrayList<Entity> entities = new ArrayList<>();
private final List<EntityStepInListener> stepInListeners = new ArrayList<>();
private final List<EntityStepOutListener> stepOutListeners = new ArrayList<>();
private final List<KeyEventHandler> keyEventHandlers = new ArrayList<>();
@Getter
private final PassageAbility[][] passageMap;
@@ -63,6 +66,10 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
stepOutListeners.add((EntityStepOutListener) entity);
}
if (entity instanceof KeyEventHandler) {
keyEventHandlers.add((KeyEventHandler) entity);
}
entity.setStepSize(stepSize.x(), stepSize.y());
entities.add(entity);
@@ -81,6 +88,10 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
stepOutListeners.remove(entity);
}
if (entity instanceof KeyEventHandler) {
keyEventHandlers.remove(entity);
}
entity.onRemove(this);
}
@@ -176,6 +187,17 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
return z == 0 ? compare(a.getPosition().y(), b.getPosition().y()) : z;
}
@Override
public void handleKeyEvent(KeyEvent event) {
for (var handler : keyEventHandlers) {
if (event.isConsumed()) {
return;
}
handler.handleKeyEvent(event);
}
}
@Override
public void notifyEntityStepIn(Movement movement, Entity entity) {
for (var listener : stepInListeners) {