# Hurry Curry! - a game about cooking # Copyright 2024 nokoe # 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 . # extends Menu const MARGIN: int = 75 var labels := {} func _ready(): super() $ScrollContainer/VBoxContainer.add_child(build_document(data)) func build_document(element: Dictionary, bullet: bool = false) -> Control: var node: Control match element["t"]: "document": node = VBoxContainer.new() node.name = "Document" for e in element["es"]: node.add_child(build_document(e)) "page": node = PanelContainer.new() node.name = "Page" node.add_theme_stylebox_override("panel", preload("res://menu/theme/style/paper_panel_style.tres")) node.set_custom_minimum_size(Vector2(800, 1131.371)) var margin := MarginContainer.new() margin.add_theme_constant_override("margin_bottom", MARGIN) margin.add_theme_constant_override("margin_top", MARGIN) margin.add_theme_constant_override("margin_left", MARGIN) margin.add_theme_constant_override("margin_right", MARGIN) var vbox := VBoxContainer.new() if element["background"]: margin.add_child(background(element["background"])) margin.add_child(vbox) for e in element["es"]: vbox.add_child(build_document(e, bullet)) node.add_child(margin) "label": var label_id = element["id"] node = build_document(element["e"], bullet) labels[label_id] = node "list": node = VBoxContainer.new() node.name = "List" for e in element["es"]: node.add_child(build_document(e, true)) "table": node = VBoxContainer.new() node.name = "Rows" node.size_flags_horizontal = Control.SIZE_EXPAND_FILL for r in range(element["es"].size()): var row = HBoxContainer.new() node.add_child(row) row.size_flags_horizontal = Control.SIZE_EXPAND_FILL row.name = "Row%d" % r for c in element["es"][r]: var e = build_document(c, bullet) e.size_flags_horizontal = Control.SIZE_EXPAND_FILL row.add_child(e) "par": node = VBoxContainer.new() node.name = "Paragraph" for e in element["es"]: node.add_child(build_document(e, bullet)) #"ref": # TODO, implement later "text": node = text_node(element, bullet) _: node = Control.new() push_error("Error building document: Unknown type \"%s\"" % element["t"]) return node func text_node(element: Dictionary, bullet: bool) -> Control: var node: Control var label := Label.new() # we need a hbox container for rtl if bullet: node = HBoxContainer.new() var bullet_label := Label.new() bullet_label.text = "•" if element.get("size"): bullet_label.add_theme_font_size_override("font_size", element["size"]) # TODO: Ignore font color for now. Will be removed in the future. # if element.get("color"): # bullet_label.add_theme_color_override("font_color", Color(element["color"])) bullet_label.add_theme_color_override("font_color", Color.BLACK) label.add_theme_color_override("font_color", Color.BLACK) node.add_child(bullet_label) label.size_flags_horizontal = Control.SIZE_EXPAND_FILL node.add_child(label) else: node = label label.name = "Text" label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART label.text = Global.get_message_str(element["s"]) if element.get("font"): match element["font"]: "Great Vibes": node.add_theme_font_override("font", preload("res://menu/theme/fonts/font-sansita-swashed.woff2")) if element.get("size"): node.add_theme_font_size_override("font_size", element["size"]) # TODO: Ignore font color for now. Will be removed in the future. # if element.get("color"): # label.add_theme_color_override("font_color", Color(element["color"])) label.add_theme_color_override("font_color", Color.BLACK) return node func background(background_name: String) -> SubViewportContainer: var item_name: String match background_name: "cover": item_name = "plate:plate,plate,plate,dirt" "toc": item_name = "tomato" "tomato_soup": item_name = "plate:tomato-soup" "burger": item_name = "plate:sliced-bun,sliced-tomato,sliced-lettuce" "mochi": item_name = "plate:strawberry-mochi" "curry": item_name = "plate:curry,cooked-rice" "icecream": item_name = "plate:strawberry-icecream" "drinks": item_name = "glass:strawberry-shake" var n: item_name = n var scene: ItemRender = preload("res://menu/communicate/item/item_render.tscn").instantiate() scene.set_item(item_name, false) var vc := SubViewportContainer.new() var viewport := SubViewport.new() viewport.add_child(scene) viewport.own_world_3d = true viewport.transparent_bg = true vc.size_flags_horizontal = Control.SIZE_SHRINK_CENTER vc.size_flags_vertical = Control.SIZE_SHRINK_END #vc.material = preload("res://menu/theme/materials/printed_material.tres") vc.add_child(viewport) return vc func _menu_open(): pass func _menu_exit(): pass