extends CharacterBody3D var id = -1 var instance_position: Vector2i @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): var world_entity = Global.world.entities[id] world_entity.moving.connect(_on_entity_moving) world_entity.changed_state.connect(_on_changed_state) instance_position = world_entity.position func _on_entity_moving(new_position, speed): print(new_position) var x_tween = get_tree().create_tween() var z_tween = get_tree().create_tween() var rot_tween = get_tree().create_tween() x_tween.tween_property(self, "position:x", new_position.x, 1.0/speed) z_tween.tween_property(self, "position:z", new_position.y, 1.0/speed) var vector = Vector2(new_position.y, new_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")