class_name Player extends Node3D const PLAYER_SIZE: float = 0.4 const SPEED: float = 25. var game: Game var position_ = Vector2(0, 0) var mesh = preload("res://scenes/player.tscn").instantiate() var hand: Node3D = null func _init(id: int, new_name: String, pos: Vector2, _character: int): add_child(mesh) position_ = pos name = new_name game = new_game func update_position(new_position: Vector2, new_rotation: float): position_ = new_position rotation.y = new_rotation func take_item(tile: Floor): if hand != null: push_error("already holding an item") var i = tile.take_item() if i == null: push_error("tile is null") hand = i func put_item(tile: Floor): var i = remove_item() tile.put_item(i) func _process(delta): _anim_angle = fmod(_anim_angle + delta, TAU) hand_base.position.y = HAND_BASE_POSITION.y + 0.05 * sin(_anim_angle * 3) position_anim = lerp(position_anim, position_, delta * 10) rotation_anim = lerp_angle(rotation_anim, rotation_, delta * 10) position.x = position_anim.x position.z = position_anim.y rotation.y = rotation_anim