Extended InteractableComponent to support counter for number of concurrent interactions and added support in Npc AI for this

This commit is contained in:
Collin Smith 2019-11-25 04:10:02 -08:00
parent ef0b99a02a
commit 38ceb8cd72
2 changed files with 12 additions and 4 deletions

View File

@ -14,6 +14,7 @@ import com.riiablo.codec.excel.MonStats;
import com.riiablo.engine.Engine; import com.riiablo.engine.Engine;
import com.riiablo.engine.component.AngleComponent; import com.riiablo.engine.component.AngleComponent;
import com.riiablo.engine.component.CofComponent; import com.riiablo.engine.component.CofComponent;
import com.riiablo.engine.component.InteractableComponent;
import com.riiablo.engine.component.MapComponent; import com.riiablo.engine.component.MapComponent;
import com.riiablo.engine.component.PathComponent; import com.riiablo.engine.component.PathComponent;
import com.riiablo.engine.component.PathfindComponent; import com.riiablo.engine.component.PathfindComponent;
@ -34,6 +35,7 @@ import java.util.Iterator;
public class Npc extends AI { public class Npc extends AI {
private static final String TAG = "Npc"; private static final String TAG = "Npc";
private static final ComponentMapper<InteractableComponent> interactableComponent = ComponentMapper.getFor(InteractableComponent.class);
private static final ComponentMapper<PositionComponent> positionComponent = ComponentMapper.getFor(PositionComponent.class); private static final ComponentMapper<PositionComponent> positionComponent = ComponentMapper.getFor(PositionComponent.class);
private static final ComponentMapper<AngleComponent> angleComponent = ComponentMapper.getFor(AngleComponent.class); private static final ComponentMapper<AngleComponent> angleComponent = ComponentMapper.getFor(AngleComponent.class);
private static final ComponentMapper<PathfindComponent> pathfindComponent = ComponentMapper.getFor(PathfindComponent.class); private static final ComponentMapper<PathfindComponent> pathfindComponent = ComponentMapper.getFor(PathfindComponent.class);
@ -58,8 +60,6 @@ public class Npc extends AI {
final Vector2 tmpVec2 = new Vector2(); final Vector2 tmpVec2 = new Vector2();
// TODO: count active interactions and remain idle while positive
static final int NULL_TARGET = ArrayUtils.INDEX_NOT_FOUND; static final int NULL_TARGET = ArrayUtils.INDEX_NOT_FOUND;
int targetId = NULL_TARGET; int targetId = NULL_TARGET;
float actionTimer = 0; float actionTimer = 0;
@ -77,7 +77,7 @@ public class Npc extends AI {
} }
@Override @Override
public void interact(Entity src, Entity entity) { public void interact(Entity src, final Entity entity) {
entity.remove(PathfindComponent.class); entity.remove(PathfindComponent.class);
velocityComponent.get(entity).velocity.setZero(); velocityComponent.get(entity).velocity.setZero();
lookAt(src); lookAt(src);
@ -138,18 +138,24 @@ public class Npc extends AI {
menu.addCancel(new NpcMenu.CancellationListener() { menu.addCancel(new NpcMenu.CancellationListener() {
@Override @Override
public void onCancelled() { public void onCancelled() {
interactableComponent.get(entity).count--;
actionTimer = 4; actionTimer = 4;
//entity.target().setZero();
} }
}) })
.build(); .build();
} }
Riiablo.game.setMenu(menu, entity); Riiablo.game.setMenu(menu, entity);
interactableComponent.get(entity).count++;
} }
@Override @Override
public void update(float delta) { public void update(float delta) {
if (interactableComponent.get(entity).count > 0) {
state = "INTERACTING";
return;
}
PathfindComponent pathfindComponent = this.pathfindComponent.get(entity); PathfindComponent pathfindComponent = this.pathfindComponent.get(entity);
if (pathfindComponent == null) { if (pathfindComponent == null) {
PathComponent pathComponent = this.pathComponent.get(entity); PathComponent pathComponent = this.pathComponent.get(entity);

View File

@ -8,11 +8,13 @@ public class InteractableComponent implements Component, Pool.Poolable {
private static final Interactor DEFAULT_INTERACTOR = new DefaultInteractor(); private static final Interactor DEFAULT_INTERACTOR = new DefaultInteractor();
public float range; public float range;
public int count;
public Interactor interactor = DEFAULT_INTERACTOR; public Interactor interactor = DEFAULT_INTERACTOR;
@Override @Override
public void reset() { public void reset() {
range = 0.0f; range = 0.0f;
count = 0;
interactor = DEFAULT_INTERACTOR; interactor = DEFAULT_INTERACTOR;
} }