You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.4 KiB
42 lines
1.4 KiB
extends CharacterBody3D
|
|
|
|
var id = -1
|
|
|
|
var world_entity
|
|
@onready var ray = $RayCast3D
|
|
|
|
func _process(delta):
|
|
var height = ray.get_collision_point().y
|
|
if position.y != height:
|
|
var tween = get_tree().create_tween()
|
|
tween.tween_property(self, "position:y", height, 0.1)
|
|
|
|
func connect_to_world(id):
|
|
world_entity = Global.world.entities[id]
|
|
world_entity.moving.connect(_on_entity_moving)
|
|
world_entity.changed_state.connect(_on_changed_state)
|
|
|
|
|
|
func _on_entity_moving(new_position, speed):
|
|
var x_tween = Engine.get_main_loop().create_tween()
|
|
var z_tween = Engine.get_main_loop().create_tween()
|
|
var rot_tween = Engine.get_main_loop().create_tween()
|
|
|
|
var position2d = Vector2i(round(position.x), round(position.z))
|
|
|
|
var distance = Global.world.vec_distance(world_entity.position, new_position)
|
|
var new_pawn_position = position2d + distance
|
|
|
|
x_tween.tween_property(self, "position:x", new_pawn_position.x, 1.0/speed)
|
|
z_tween.tween_property(self, "position:z", new_pawn_position.y, 1.0/speed)
|
|
|
|
var vector = Vector2(new_pawn_position.y, new_pawn_position.x) - Vector2(self.position.z, self.position.x)
|
|
var angle = vector.angle()
|
|
var new_rotation = lerp_angle(position.y, angle, 1)
|
|
rot_tween.tween_property(self, "rotation:y", new_rotation, 0.1)
|
|
|
|
func _on_changed_state(state):
|
|
if state == 0:
|
|
$AnimationTree["parameters/playback"].travel("Idle")
|
|
if state == 1:
|
|
$AnimationTree["parameters/playback"].travel("Walk")
|
|
|