use of com.almasb.fxgl.pathfinding.CellMoveComponent in project FXGL by AlmasB.
the class SenseAISample method spawnNPC.
private void spawnNPC(int x, int y) {
var rect = new Rectangle(20, 20, FXGLMath.randomColor().brighter());
rect.setStrokeType(StrokeType.INSIDE);
rect.setStroke(Color.BLACK);
var sense = new HearingSenseComponent(150);
var text = getUIFactoryService().newText("", Color.WHITE, 16.0);
text.textProperty().bind(sense.stateProperty().asString());
var hearingRadiusCircle = new Circle(150);
hearingRadiusCircle.setFill(null);
hearingRadiusCircle.setStroke(Color.GREEN);
var e = entityBuilder().type(Type.NPC).viewWithBBox(rect).view(text).view(hearingRadiusCircle).anchorFromCenter().with(new CellMoveComponent(CELL_WIDTH, CELL_HEIGHT, 150)).with(new AStarMoveComponent(grid)).with(sense).with(new CustomAIComponent()).buildAndAttach();
e.getComponent(AStarMoveComponent.class).stopMovementAt(x, y);
}
use of com.almasb.fxgl.pathfinding.CellMoveComponent in project FXGL by AlmasB.
the class PathfindingSample method initGame.
@Override
protected void initGame() {
// 2. init grid width x height
grid = new AStarGrid(GRID_WIDTH, GRID_HEIGHT);
pathfinder = new AStarPathfinder(grid);
grid.forEach(c -> {
var x = c.getX();
var y = c.getY();
Rectangle rect = new Rectangle(CELL_WIDTH - 2, CELL_HEIGHT - 2);
rect.setFill(Color.WHITE);
rect.setStroke(Color.BLACK);
Entity tile = entityBuilder().at(x * CELL_WIDTH, y * CELL_HEIGHT).view(rect).buildAndAttach();
rect.setOnMouseClicked(e -> {
// if left click do search, else place a red obstacle
if (e.getButton() == MouseButton.PRIMARY) {
var cells = pathfinder.findPath(0, 0, x, y);
cells.forEach(cell -> {
getGameWorld().getEntitiesAt(new Point2D(cell.getX() * CELL_WIDTH, cell.getY() * CELL_HEIGHT)).forEach(Entity::removeFromWorld);
});
} else {
grid.get(x, y).setState(CellState.NOT_WALKABLE);
rect.setFill(Color.RED);
}
});
});
var e = entityBuilder().viewWithBBox(new Rectangle(20, 20)).with(new CellMoveComponent(CELL_WIDTH, CELL_HEIGHT, 100)).buildAndAttach();
e.getComponent(CellMoveComponent.class).setPositionToCell(1, 1);
}
use of com.almasb.fxgl.pathfinding.CellMoveComponent in project FXGL by AlmasB.
the class MassUnitsRTSSample method initGame.
@Override
protected void initGame() {
// 2. init grid width x height
grid = new AStarGrid(GRID_WIDTH, GRID_HEIGHT);
pathfinder = new AStarPathfinder(grid);
grid.forEach(c -> {
var x = c.getX();
var y = c.getY();
Rectangle rect = new Rectangle(CELL_WIDTH - 2, CELL_HEIGHT - 2);
rect.setFill(Color.WHITE);
// rect.setStroke(Color.BLACK);
Entity tile = entityBuilder().at(x * CELL_WIDTH, y * CELL_HEIGHT).view(rect).with(new IDComponent("" + x + "," + y, 0)).buildAndAttach();
rect.setOnMouseClicked(event -> {
// if left click do search, else place a red obstacle
if (event.getButton() == MouseButton.PRIMARY) {
var units = getGameWorld().getEntitiesFiltered(e -> e.getPropertyOptional("type").isPresent());
var cells = grid.getWalkableCells().stream().sorted(Comparator.comparingInt(cell -> cell.distance(grid.get(x, y)))).limit(units.size()).collect(Collectors.toList());
Collections.shuffle(cells);
for (int i = 0; i < units.size(); i++) {
var unit = units.get(i);
var cell = cells.get(i);
unit.getComponent(AStarMoveComponent.class).moveToCell(cell);
}
}
});
});
for (int i = 0; i < 485; i++) {
var color = FXGLMath.randomColor().darker().darker();
var e = entityBuilder().viewWithBBox(new Circle(CELL_WIDTH / 4, CELL_WIDTH / 4, CELL_WIDTH / 4, color)).with(new CellMoveComponent(CELL_WIDTH, CELL_HEIGHT, 300)).with(new AStarMoveComponent(grid)).with("type", "unit").buildAndAttach();
}
}
use of com.almasb.fxgl.pathfinding.CellMoveComponent in project FXGL by AlmasB.
the class RandomPathfindingSample method spawnNPC.
private void spawnNPC(int x, int y) {
var e = entityBuilder().viewWithBBox(new Rectangle(20, 20, FXGLMath.randomColor())).anchorFromCenter().with(new CellMoveComponent(CELL_WIDTH, CELL_HEIGHT, 150)).with(new AStarMoveComponent(grid)).with(new RandomAStarMoveComponent(1, 7, Duration.seconds(1), Duration.seconds(3))).buildAndAttach();
e.getComponent(AStarMoveComponent.class).stopMovementAt(x, y);
}
Aggregations