Files
chaussette.sale/scenes/pathFollow.gd
Thomas 41573e0753 petites corrections du soir
j'ai la flemme de tout indiquer ici
découvre avec plaisir, si le plaisir tu as.
2025-02-25 18:11:52 +01:00

61 lines
2.0 KiB
GDScript

class_name NPCCar
extends PathFollow2D
@export var car : Car
@export var distanceMax = 100
var astar_grid: AStarGrid2D
var toFollow: Array[Vector2i]
@export var world: TileMapLayer
var CARLAYER = 1
func _ready() -> void:
astar_grid = AStarGrid2D.new()
astar_grid.region = world.get_used_rect()
astar_grid.cell_size = Vector2(48, 48)
astar_grid.set_default_compute_heuristic(AStarGrid2D.HEURISTIC_MANHATTAN)
astar_grid.set_default_estimate_heuristic(AStarGrid2D.HEURISTIC_MANHATTAN)
astar_grid.update()
# only take into account the tiles that are marked with a navigation layer for cars
for x in world.get_used_rect().size.x:
for y in world.get_used_rect().size.y:
var tile_position = Vector2(
x + world.get_used_rect().position.x,
y + world.get_used_rect().position.y,
)
var tile_data = world.get_cell_tile_data(tile_position)
if tile_data == null or tile_data.get_navigation_polygon(CARLAYER) == null:
astar_grid.set_point_solid(tile_position)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
if car == null:
return
# make the wanted position on the track move ahead by a certain amount
if position.distance_to(car.position) < distanceMax and (toFollow == null or toFollow.is_empty()):
progress += 200
# compute the new navigation points the car should follow
var points = astar_grid.get_id_path(
world.local_to_map(world.to_local(car.global_position)),
world.local_to_map(world.to_local(global_position))
).slice(1)
if !points.is_empty():
toFollow = points
if OS.is_debug_build():
$Label.text = (
"position "+str(global_position)+
"\n, map position "+ str(world.local_to_map(world.to_local(global_position)))+
"\npoint to follow "+str(toFollow)+
"\n world position" + str(world.global_position)
)
if !toFollow.is_empty():
if world.local_to_map(world.to_local(car.global_position)) == toFollow.front():
toFollow.pop_front()
if !toFollow.is_empty():
car.moveTo(world.to_global(world.map_to_local(toFollow.front())));