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.component.AngleComponent;
import com.riiablo.engine.component.CofComponent;
import com.riiablo.engine.component.InteractableComponent;
import com.riiablo.engine.component.MapComponent;
import com.riiablo.engine.component.PathComponent;
import com.riiablo.engine.component.PathfindComponent;
@ -34,6 +35,7 @@ import java.util.Iterator;
public class Npc extends AI {
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<AngleComponent> angleComponent = ComponentMapper.getFor(AngleComponent.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();
// TODO: count active interactions and remain idle while positive
static final int NULL_TARGET = ArrayUtils.INDEX_NOT_FOUND;
int targetId = NULL_TARGET;
float actionTimer = 0;
@ -77,7 +77,7 @@ public class Npc extends AI {
}
@Override
public void interact(Entity src, Entity entity) {
public void interact(Entity src, final Entity entity) {
entity.remove(PathfindComponent.class);
velocityComponent.get(entity).velocity.setZero();
lookAt(src);
@ -138,18 +138,24 @@ public class Npc extends AI {
menu.addCancel(new NpcMenu.CancellationListener() {
@Override
public void onCancelled() {
interactableComponent.get(entity).count--;
actionTimer = 4;
//entity.target().setZero();
}
})
.build();
}
Riiablo.game.setMenu(menu, entity);
interactableComponent.get(entity).count++;
}
@Override
public void update(float delta) {
if (interactableComponent.get(entity).count > 0) {
state = "INTERACTING";
return;
}
PathfindComponent pathfindComponent = this.pathfindComponent.get(entity);
if (pathfindComponent == null) {
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();
public float range;
public int count;
public Interactor interactor = DEFAULT_INTERACTOR;
@Override
public void reset() {
range = 0.0f;
count = 0;
interactor = DEFAULT_INTERACTOR;
}