# 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): super(owned_by_) height = .05 add_child(load("res://map/items/plate.tscn").instantiate()) func add_contents(contents: Array[String]): # 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 G.unordered_array_eq(contents, ["sliced-tomato", "sliced-lettuce"]): contents.erase("sliced-tomato") contents.erase("sliced-lettuce") contents.append("tomato-lettuce-salad") # Noodles + tomato soup has a custom tomato sauce mesh if G.unordered_array_subset(["cooked-noodles", "tomato-soup"], contents): contents.erase("tomato-soup") contents.append("noodles-tomato-fill") # Noodles + sliced cheese has a custom cheese mesh if G.unordered_array_subset(["cooked-noodles", "sliced-cheese"], contents): contents.erase("sliced-cheese") contents.append("noodles-cheese-fill") # Stack content items on top of each other var height_sum := 0. for c: String in contents: var item: Item match c: "curry": add_child(PlateFill.new(self, Color(.75, .45, .1))) "cheese-leek-soup": add_child(PlateFill.new(self, Color(0.747, 0.77, 0.493))) add_child(load("res://map/items/sliced_leek/leek_ring_fill.tscn").instantiate()) "mushroom-soup": add_child(PlateFill.new(self, Color(0.747, 0.454, 0.36))) add_child(load("res://map/items/mushroom_plate_fill.tscn").instantiate()) "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))) "noodles-tomato-fill": add_child(load("res://map/items/noodles_tomato_sauce_fill.tscn").instantiate()) "noodles-cheese-fill": add_child(load("res://map/items/noodles_cheese_fill.tscn").instantiate()) "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": base.add_child(ItemFactory.produce(c, base, .85)) "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 c.contains("pizza"): item.scale = Vector3(.7, .7, .7) 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.)