# Undercooked - a game about cooking # Copyright 2024 nokoe # # 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 Tile extends Node3D var base = Node3D.new() var item: Item = null var item_base: Node3D enum Facing { NEG_Y = 0, NEG_X = 1, Y = 2, X = 3, } func _init(rename: String, _neighbors: Array): base.name = "Base" base.position += Vector3(0.5, 0, 0.5) add_child(base) self.name = rename var item_base_ = Node3D.new() # this method is supposed to be overriden @warning_ignore("static_called_on_instance") item_base_.position = interact_target() item_base_.name = "ItemBase" base.add_child(item_base_) item_base = item_base_ func turn_facing(facing: Facing): base.rotate_y(facing * 0.5 * PI + PI) # defines where items go when interacting static func interact_target() -> Vector3: return Vector3(0, 0, 0) # actions when interacting, e.g. animations func interact(): pass func progress(p: float, warn: bool): if item != null: item.progress(p, warn) func finish(warn: bool): if item != null: item.finish(warn) func put_item(i: Item): if item != null: push_error("already holding an item") set_item(i) func set_item(i: Item): if item != null: item.queue_free() item = i i.owned_by = item_base func take_item() -> Item: var i = item item = null return i