mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2026-01-06 16:00:08 +01:00
Update 2D navigation demos
This commit is contained in:
@@ -1,46 +1,44 @@
|
||||
extends Navigation2D
|
||||
|
||||
export(float) var CHARACTER_SPEED = 400.0
|
||||
export(float) var character_speed = 400.0
|
||||
var path = []
|
||||
|
||||
func _process(delta):
|
||||
var walk_distance = character_speed * delta
|
||||
move_along_path(walk_distance)
|
||||
|
||||
|
||||
# The 'click' event is a custom input action defined in
|
||||
# Project > Project Settings > Input Map tab
|
||||
# Project > Project Settings > Input Map tab.
|
||||
func _input(event):
|
||||
if not event.is_action_pressed('click'):
|
||||
if not event.is_action_pressed("click"):
|
||||
return
|
||||
_update_navigation_path($Character.position, get_local_mouse_position())
|
||||
|
||||
|
||||
func _update_navigation_path(start_position, end_position):
|
||||
# get_simple_path is part of the Navigation2D class
|
||||
# it returns a PoolVector2Array of points that lead you from the
|
||||
# start_position to the end_position
|
||||
path = get_simple_path(start_position, end_position, true)
|
||||
# The first point is always the start_position
|
||||
# We don't need it in this example as it corresponds to the character's position
|
||||
path.remove(0)
|
||||
set_process(true)
|
||||
|
||||
|
||||
func _process(delta):
|
||||
var walk_distance = CHARACTER_SPEED * delta
|
||||
move_along_path(walk_distance)
|
||||
|
||||
|
||||
func move_along_path(distance):
|
||||
var last_point = $Character.position
|
||||
while path.size():
|
||||
var distance_between_points = last_point.distance_to(path[0])
|
||||
|
||||
# the position to move to falls between two points
|
||||
# The position to move to falls between two points.
|
||||
if distance <= distance_between_points:
|
||||
$Character.position = last_point.linear_interpolate(path[0], distance / distance_between_points)
|
||||
return
|
||||
|
||||
# the position is past the end of the segment
|
||||
# The position is past the end of the segment.
|
||||
distance -= distance_between_points
|
||||
last_point = path[0]
|
||||
path.remove(0)
|
||||
# the character reached the end of the path
|
||||
# The character reached the end of the path.
|
||||
$Character.position = last_point
|
||||
set_process(false)
|
||||
|
||||
|
||||
func _update_navigation_path(start_position, end_position):
|
||||
# get_simple_path is part of the Navigation2D class.
|
||||
# It returns a PoolVector2Array of points that lead you
|
||||
# from the start_position to the end_position.
|
||||
path = get_simple_path(start_position, end_position, true)
|
||||
# The first point is always the start_position.
|
||||
# We don't need it in this example as it corresponds to the character's position.
|
||||
path.remove(0)
|
||||
set_process(true)
|
||||
|
||||
Reference in New Issue
Block a user