# Undercooked - a game about cooking # Copyright 2024 nokoe # Copyright 2024 metamuffin # Copyright 2024 tpart # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, version 3 of the License only. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # 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 var _anim_angle: float = 0.0 const HAND_BASE_POSITION: Vector3 = Vector3(0, .25, .4) @onready var character: Character = $Player/Character func _init(_id: int, new_name: String, pos: Vector2, _character: int, new_game: Game): add_child(mesh) position_ = pos name = new_name game = new_game func update_position(new_position: Vector2, new_rotation: float): position_ = new_position rotation_ = new_rotation func set_item(i: Item): i.owned_by = hand_base if i == null: push_error("tile is null") hand = i character.play_animation("hold") func remove_item() -> Item: var i = hand if i == null: push_error("holding nothing") hand = null character.play_animation("idle") return i 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