mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-02-24 21:48:46 +07:00
Extended InteractableComponent to support counter for number of concurrent interactions and added support in Npc AI for this
This commit is contained in:
parent
ef0b99a02a
commit
38ceb8cd72
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user