aboutsummaryrefslogtreecommitdiff
path: root/client/menu/document
diff options
context:
space:
mode:
authornokoe <nokoe@mailbox.org>2024-10-15 00:04:10 +0200
committernokoe <nokoe@mailbox.org>2024-10-15 00:04:10 +0200
commit5e87146c1f6a1fc59ba7dd41753d9ebfe0b262de (patch)
treea9337a73aed994cba852ba65874df03a6b13637e /client/menu/document
parent55851861d13df210d4c51c932e055e9248b5336c (diff)
downloadhurrycurry-5e87146c1f6a1fc59ba7dd41753d9ebfe0b262de.tar
hurrycurry-5e87146c1f6a1fc59ba7dd41753d9ebfe0b262de.tar.bz2
hurrycurry-5e87146c1f6a1fc59ba7dd41753d9ebfe0b262de.tar.zst
replace old book textures with ui book
Diffstat (limited to 'client/menu/document')
-rw-r--r--client/menu/document/document.gd115
-rw-r--r--client/menu/document/document.tscn28
2 files changed, 143 insertions, 0 deletions
diff --git a/client/menu/document/document.gd b/client/menu/document/document.gd
new file mode 100644
index 00000000..68787bdc
--- /dev/null
+++ b/client/menu/document/document.gd
@@ -0,0 +1,115 @@
+# Hurry Curry! - 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 <https://www.gnu.org/licenses/>.
+#
+extends Menu
+
+const MARGIN: int = 75
+
+func _ready():
+ super()
+ $ScrollContainer/VBoxContainer.add_child(build_document(data))
+
+func build_document(element: Dictionary) -> 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))
+ node.add_child(margin)
+ "list":
+ node = VBoxContainer.new()
+ node.name = "List"
+ for e in element["es"]:
+ node.add_child(text_node(e, true))
+ "table":
+ push_warning("Table not yet implemented")
+ "par":
+ node = VBoxContainer.new()
+ node.name = "Paragraph"
+ for e in element["es"]:
+ node.add_child(build_document(e))
+ "text":
+ node = text_node(element, false)
+ 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 = "•"
+ bullet_label.add_theme_font_size_override("font_size", element["size"])
+ bullet_label.add_theme_color_override("font_color", Color(element["color"]))
+ 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["size"]:
+ node.add_theme_font_size_override("font_size", element["size"])
+ if element["color"]:
+ label.add_theme_color_override("font_color", Color(element["color"]))
+ return node
+
+func background(page_name: String) -> SubViewportContainer:
+ var item_name: String
+ match page_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
diff --git a/client/menu/document/document.tscn b/client/menu/document/document.tscn
new file mode 100644
index 00000000..69290d4b
--- /dev/null
+++ b/client/menu/document/document.tscn
@@ -0,0 +1,28 @@
+[gd_scene load_steps=3 format=3 uid="uid://bdggwo8un3mys"]
+
+[ext_resource type="Script" path="res://menu/document/document.gd" id="1_gyisx"]
+[ext_resource type="Script" path="res://menu/auto_setup/scroll_container_custom.gd" id="2_0d0p0"]
+
+[node name="Document" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_gyisx")
+support_anim = false
+
+[node name="ScrollContainer" type="ScrollContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("2_0d0p0")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="ScrollContainer"]
+layout_mode = 2
+size_flags_horizontal = 6
+size_flags_vertical = 4