代码拉取完成,页面将自动刷新
@tool
extends Node2D
@onready var terrain = $"../Terrain"
var astar_grid = AStarGrid2D.new()
@export var start : Vector2i
@export var end : Vector2i
@export var calculate : bool
var path = []
# Called when the node enters the scene tree for the first time.
func _ready():
InitPathfinding()
pass
func _draw():
print("redrawing")
if len(path) > 0:
for i in range(len(path) - 1):
draw_line(path[i], path[i+1], Color.PURPLE)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
if calculate:
calculate = false
InitPathfinding()
RequestPath(start, end)
func RequestPath(start: Vector2i, end: Vector2i):
path = astar_grid.get_point_path(start, end)
for i in range(len(path)):
path[i] += Vector2(terrain.rendering_quadrant_size/2, terrain.rendering_quadrant_size/2)
queue_redraw()
return path
func InitPathfinding():
astar_grid.region = Rect2i(0, 0, terrain.mapWidth, terrain.mapHeight)
astar_grid.cell_size = Vector2(16, 16)
astar_grid.diagonal_mode = AStarGrid2D.DIAGONAL_MODE_ONLY_IF_NO_OBSTACLES
astar_grid.update()
for x in range(terrain.mapWidth):
for y in range(terrain.mapHeight):
if GetTerrainDifficulty(Vector2i(x,y)) == -1:
astar_grid.set_point_solid(Vector2i(x,y))
else:
astar_grid.set_point_weight_scale(Vector2i(x,y), GetTerrainDifficulty(Vector2i(x, y)))
func GetTerrainDifficulty(coords : Vector2i):
var layer = 0
var source_id = terrain.get_cell_source_id(layer, coords, false)
var source: TileSetAtlasSource = terrain.tile_set.get_source(source_id)
var atlas_coords = terrain.get_cell_atlas_coords(layer, coords, false)
var tile_data = source.get_tile_data(atlas_coords, 0)
return tile_data.get_custom_data("walk_difficulty")
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。