7589b2bf60
The scripts were streamlined using more or less the following conventions: - space after a comma in lists of arguments - spaces around weak operators (+, -), no spaces around strong operators (*, /) - spaces around comparison operators and compound assignment operators - space after a comment start (#) - removed trailing spaces or tabs, apart from those that delimit the function indentation level (those could be removed too but since they are added automatically by the editor when typing code, keeping them for now) - function blocks separate by two newlines - comment sentences start with an upper-case letter
54 lines
1.1 KiB
GDScript
54 lines
1.1 KiB
GDScript
|
|
extends Navigation2D
|
|
|
|
# Member variables
|
|
const SPEED = 200.0
|
|
|
|
var begin = Vector2()
|
|
var end = Vector2()
|
|
var path = []
|
|
|
|
|
|
func _process(delta):
|
|
if (path.size() > 1):
|
|
var to_walk = delta*SPEED
|
|
while(to_walk > 0 and path.size() >= 2):
|
|
var pfrom = path[path.size() - 1]
|
|
var pto = path[path.size() - 2]
|
|
var d = pfrom.distance_to(pto)
|
|
if (d <= to_walk):
|
|
path.remove(path.size() - 1)
|
|
to_walk -= d
|
|
else:
|
|
path[path.size() - 1] = pfrom.linear_interpolate(pto, to_walk/d)
|
|
to_walk = 0
|
|
|
|
var atpos = path[path.size() - 1]
|
|
get_node("agent").set_pos(atpos)
|
|
|
|
if (path.size() < 2):
|
|
path = []
|
|
set_process(false)
|
|
else:
|
|
set_process(false)
|
|
|
|
|
|
func _update_path():
|
|
var p = get_simple_path(begin, end, true)
|
|
path = Array(p) # Vector2array too complex to use, convert to regular array
|
|
path.invert()
|
|
|
|
set_process(true)
|
|
|
|
|
|
func _input(event):
|
|
if (event.type == InputEvent.MOUSE_BUTTON and event.pressed and event.button_index == 1):
|
|
begin = get_node("agent").get_pos()
|
|
# Mouse to local navigation coordinates
|
|
end = event.pos - get_pos()
|
|
_update_path()
|
|
|
|
|
|
func _ready():
|
|
# Initialization here
|
|
set_process_input(true)
|