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.
 
Gridmap/scripts/Instance3D.gd

37 lines
1.2 KiB

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")