# Hurry Curry! - a game about cooking # Copyright (C) 2025 Hurry Curry! contributors # # 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 Plate extends Item func _init(owned_by_: Node3D, contents: Array): super(owned_by_) add_child(load("res://map/items/plate.tscn").instantiate()) # Custom logic for handling burgers with buns on bottom and top if contents.has("sliced-bun") and contents.size() > 1: contents.erase("sliced-bun") contents.push_front("sliced-bun-bottom") contents.push_back("sliced-bun-top") # Seared steak should be small if combined with other items if contents.has("seared-steak") and contents.size() > 1: contents.erase("seared-steak") contents.append("seared-steak-small") # Buns should be small if combined with other items if contents.has("bun") and contents.size() > 1: contents.erase("bun") contents.append("bun-small") # Tomato + lettuce salad has a custom mesh if contents.has("sliced-tomato") and contents.has("sliced-lettuce") and contents.size() == 2: contents.erase("sliced-tomato") contents.erase("sliced-lettuce") contents.append("tomato-lettuce-salad") # Stack content items on top of each other var height_sum := 0. for c in contents: var item: Item match c: "curry": add_child(PlateFill.new(self, Color(.75, .45, .1))) "cooked-rice": add_child(load("res://map/items/cooked_rice_fill.tscn").instantiate()) "tomato-lettuce-salad": add_child(load("res://map/items/sliced_tomato_sliced_lettuce_fill.tscn").instantiate()) "tomato-soup": add_child(PlateFill.new(self, Color(1., .3, .2))) "french-fries": base.add_child(load("res://map/items/french_fries_fill.tscn").instantiate()) "bun-small": var bun = ItemFactory.produce("bun", base) base.add_child(bun) bun.scale *= 0.5 bun.position += Vector3(-.1, 0, -.1) "seared-steak-small": var seared_steak = ItemFactory.produce("seared-steak", base) base.add_child(seared_steak) seared_steak.scale *= 0.5 seared_steak.position += Vector3(.1, 0, .1) _: item = ItemFactory.produce(c, base) if item != null: base.add_child(item) item.position.y = height_sum @warning_ignore("static_called_on_instance") height_sum += item.height() func setup_sounds(): take_sound.setup([preload("res://map/items/sounds/plate_take.ogg")]) put_sound.setup([preload("res://map/items/sounds/plate_put.ogg")]) static func base_position() -> Vector3: return Vector3(0., .025, 0.) static func height() -> float: return .05