Implemented player controller in client
This commit is contained in:
38
client/scripts/entities/Player.gd
Normal file
38
client/scripts/entities/Player.gd
Normal file
@ -0,0 +1,38 @@
|
||||
extends KinematicBody2D
|
||||
|
||||
signal finished_moving
|
||||
|
||||
export var base_movement_speed = 100
|
||||
export(NodePath) var world
|
||||
|
||||
onready var navigation : Navigation2D = get_node(world)
|
||||
var path : PoolVector2Array
|
||||
var move : bool = false
|
||||
|
||||
func _process(delta):
|
||||
|
||||
# Click for movement target
|
||||
if Input.is_action_just_pressed("move_to_cursor"):
|
||||
path = navigation.get_simple_path(global_position, get_global_mouse_position())
|
||||
move = true
|
||||
|
||||
if move:
|
||||
move_along_path(base_movement_speed * delta)
|
||||
|
||||
func move_along_path(distance : float):
|
||||
var start_point := global_position
|
||||
for i in range(path.size()):
|
||||
var distance_to_next := start_point.distance_to(path[0])
|
||||
if distance <= distance_to_next and distance >= 0.0:
|
||||
global_position = start_point.linear_interpolate(path[0], distance/distance_to_next)
|
||||
break
|
||||
elif distance < 0.0:
|
||||
global_position = path[0]
|
||||
emit_signal("finished_moving")
|
||||
print("DONE")
|
||||
move = false
|
||||
break
|
||||
distance -= distance_to_next
|
||||
start_point = path[0]
|
||||
path.remove(0)
|
||||
|
Reference in New Issue
Block a user