Split InteractiveEntity to separate listeners and remove position checks
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
package com.bartlomiejpluta.base.api.entity;
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.base.api.move.Movement;
|
||||||
|
|
||||||
|
public interface EntityStepInListener extends Entity {
|
||||||
|
void onEntityStepIn(Movement movement, Entity entity);
|
||||||
|
}
|
||||||
@@ -2,8 +2,6 @@ package com.bartlomiejpluta.base.api.entity;
|
|||||||
|
|
||||||
import com.bartlomiejpluta.base.api.move.Movement;
|
import com.bartlomiejpluta.base.api.move.Movement;
|
||||||
|
|
||||||
public interface InteractiveEntity extends Entity {
|
public interface EntityStepOutListener extends Entity {
|
||||||
void onEntityStepIn(Movement movement, Entity entity);
|
|
||||||
|
|
||||||
void onEntityStepOut(Movement movement, Entity entity);
|
void onEntityStepOut(Movement movement, Entity entity);
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,8 @@ package com.bartlomiejpluta.base.engine.world.map.layer.object;
|
|||||||
import com.bartlomiejpluta.base.api.ai.NPC;
|
import com.bartlomiejpluta.base.api.ai.NPC;
|
||||||
import com.bartlomiejpluta.base.api.camera.Camera;
|
import com.bartlomiejpluta.base.api.camera.Camera;
|
||||||
import com.bartlomiejpluta.base.api.entity.Entity;
|
import com.bartlomiejpluta.base.api.entity.Entity;
|
||||||
import com.bartlomiejpluta.base.api.entity.InteractiveEntity;
|
import com.bartlomiejpluta.base.api.entity.EntityStepInListener;
|
||||||
|
import com.bartlomiejpluta.base.api.entity.EntityStepOutListener;
|
||||||
import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer;
|
import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer;
|
||||||
import com.bartlomiejpluta.base.api.map.layer.object.PassageAbility;
|
import com.bartlomiejpluta.base.api.map.layer.object.PassageAbility;
|
||||||
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
||||||
@@ -28,7 +29,8 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
|||||||
@Getter
|
@Getter
|
||||||
private final ArrayList<Entity> entities = new ArrayList<>();
|
private final ArrayList<Entity> entities = new ArrayList<>();
|
||||||
|
|
||||||
private final List<InteractiveEntity> interactiveEntities = new ArrayList<>();
|
private final List<EntityStepInListener> stepInListeners = new ArrayList<>();
|
||||||
|
private final List<EntityStepOutListener> stepOutListeners = new ArrayList<>();
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final PassageAbility[][] passageMap;
|
private final PassageAbility[][] passageMap;
|
||||||
@@ -53,8 +55,12 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
|||||||
layer.entities.remove(entity);
|
layer.entities.remove(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity instanceof InteractiveEntity) {
|
if (entity instanceof EntityStepInListener) {
|
||||||
interactiveEntities.add((InteractiveEntity) entity);
|
stepInListeners.add((EntityStepInListener) entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entity instanceof EntityStepOutListener) {
|
||||||
|
stepOutListeners.add((EntityStepOutListener) entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
entity.setStepSize(stepSize.x(), stepSize.y());
|
entity.setStepSize(stepSize.x(), stepSize.y());
|
||||||
@@ -67,8 +73,12 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
|||||||
public void removeEntity(Entity entity) {
|
public void removeEntity(Entity entity) {
|
||||||
entities.remove(entity);
|
entities.remove(entity);
|
||||||
|
|
||||||
if (entity instanceof InteractiveEntity) {
|
if (entity instanceof EntityStepInListener) {
|
||||||
interactiveEntities.remove(entity);
|
stepInListeners.remove(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entity instanceof EntityStepOutListener) {
|
||||||
|
stepOutListeners.remove(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
entity.onRemove(this);
|
entity.onRemove(this);
|
||||||
@@ -168,23 +178,15 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void notifyEntityStepIn(Movement movement, Entity entity) {
|
public void notifyEntityStepIn(Movement movement, Entity entity) {
|
||||||
var target = movement.getTo();
|
for (var listener : stepInListeners) {
|
||||||
|
listener.onEntityStepIn(movement, entity);
|
||||||
for (var listener : interactiveEntities) {
|
|
||||||
if (listener.getCoordinates().equals(target)) {
|
|
||||||
listener.onEntityStepIn(movement, entity);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void notifyEntityStepOut(Movement movement, Entity entity) {
|
public void notifyEntityStepOut(Movement movement, Entity entity) {
|
||||||
var source = movement.getFrom();
|
for (var listener : stepOutListeners) {
|
||||||
|
listener.onEntityStepOut(movement, entity);
|
||||||
for (var listener : interactiveEntities) {
|
|
||||||
if (listener.getCoordinates().equals(source)) {
|
|
||||||
listener.onEntityStepOut(movement, entity);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user