summaryrefslogtreecommitdiff
path: root/ui/dice_configurator
diff options
context:
space:
mode:
Diffstat (limited to 'ui/dice_configurator')
-rw-r--r--ui/dice_configurator/dice_configuration_face_preview.gd55
-rw-r--r--ui/dice_configurator/dice_configuration_face_preview.gd.uid1
-rw-r--r--ui/dice_configurator/dice_configuration_face_preview.tscn43
-rw-r--r--ui/dice_configurator/dice_configurator.gd62
-rw-r--r--ui/dice_configurator/dice_configurator.gd.uid1
-rw-r--r--ui/dice_configurator/dice_configurator.tscn168
6 files changed, 330 insertions, 0 deletions
diff --git a/ui/dice_configurator/dice_configuration_face_preview.gd b/ui/dice_configurator/dice_configuration_face_preview.gd
new file mode 100644
index 0000000..525134c
--- /dev/null
+++ b/ui/dice_configurator/dice_configuration_face_preview.gd
@@ -0,0 +1,55 @@
+@tool
+extends Control
+
+
+@export var face: Game.Face: set = set_face
+@export var type: Game.FaceType: set = set_type
+@export var value: int: set = set_value
+@export var active: bool = false: set = set_active
+
+
+func _ready() -> void:
+ set_face(face)
+ set_type(type)
+ set_value(value)
+ set_active(active)
+
+
+func set_face(v: Game.Face) -> void:
+ face = v
+
+ if face == Game.Face.FRONT:
+ %Face.texture = load("res://ui/assets/dice_configuration_face_preview_front.png")
+ elif face == Game.Face.BACK:
+ %Face.texture = load("res://ui/assets/dice_configuration_face_preview_back.png")
+ elif face == Game.Face.LEFT:
+ %Face.texture = load("res://ui/assets/dice_configuration_face_preview_left.png")
+ elif face == Game.Face.RIGHT:
+ %Face.texture = load("res://ui/assets/dice_configuration_face_preview_right.png")
+ elif face == Game.Face.TOP:
+ %Face.texture = load("res://ui/assets/dice_configuration_face_preview_top.png")
+ elif face == Game.Face.BOTTOM:
+ %Face.texture = load("res://ui/assets/dice_configuration_face_preview_bottom.png")
+
+
+func set_type(v: Game.FaceType) -> void:
+ type = v
+ %Type.texture_normal = DiceFace.get_face_type_icon(type)
+
+
+func set_value(v: int) -> void:
+ value = v
+ if has_node("%Value"):
+ %Value.text = str(value)
+
+
+func set_active(v: bool) -> void:
+ active = v
+ if active:
+ %Face.self_modulate = Color.hex(0xafff00ff)
+ else:
+ %Face.self_modulate = Color.hex(0x00fec164)
+
+
+func _on_child_focus_entered() -> void:
+ focus_entered.emit()
diff --git a/ui/dice_configurator/dice_configuration_face_preview.gd.uid b/ui/dice_configurator/dice_configuration_face_preview.gd.uid
new file mode 100644
index 0000000..08a3c72
--- /dev/null
+++ b/ui/dice_configurator/dice_configuration_face_preview.gd.uid
@@ -0,0 +1 @@
+uid://dmh6116blc558
diff --git a/ui/dice_configurator/dice_configuration_face_preview.tscn b/ui/dice_configurator/dice_configuration_face_preview.tscn
new file mode 100644
index 0000000..86f6dab
--- /dev/null
+++ b/ui/dice_configurator/dice_configuration_face_preview.tscn
@@ -0,0 +1,43 @@
+[gd_scene load_steps=4 format=3 uid="uid://dff1mvgcacrxs"]
+
+[ext_resource type="Script" uid="uid://dmh6116blc558" path="res://ui/dice_configurator/dice_configuration_face_preview.gd" id="1_gt5fx"]
+[ext_resource type="Texture2D" uid="uid://dlnccfl2nhsns" path="res://ui/assets/dice_configuration_face_preview.png" id="2_ic0ok"]
+[ext_resource type="Texture2D" uid="uid://bpndubw65vuyv" path="res://ui/assets/dice_configuration_face_preview_front.png" id="3_nyrct"]
+
+[node name="DiceConfigurationFacePreview" type="HBoxContainer"]
+offset_right = 143.0
+offset_bottom = 30.0
+script = ExtResource("1_gt5fx")
+value = 1
+
+[node name="AspectRatioContainer" type="AspectRatioContainer" parent="."]
+layout_mode = 2
+size_flags_horizontal = 10
+focus_mode = 2
+
+[node name="Dice" type="TextureRect" parent="AspectRatioContainer"]
+layout_mode = 2
+texture = ExtResource("2_ic0ok")
+stretch_mode = 5
+
+[node name="Face" type="TextureRect" parent="AspectRatioContainer"]
+unique_name_in_owner = true
+self_modulate = Color(0, 0.996078, 0.756863, 0.392157)
+layout_mode = 2
+texture = ExtResource("3_nyrct")
+stretch_mode = 5
+
+[node name="Type" type="TextureButton" parent="."]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 10
+stretch_mode = 5
+
+[node name="Value" type="Label" parent="."]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 2
+focus_mode = 2
+text = "1"
+
+[connection signal="focus_entered" from="Type" to="." method="_on_child_focus_entered"]
diff --git a/ui/dice_configurator/dice_configurator.gd b/ui/dice_configurator/dice_configurator.gd
new file mode 100644
index 0000000..c347dd7
--- /dev/null
+++ b/ui/dice_configurator/dice_configurator.gd
@@ -0,0 +1,62 @@
+extends Control
+
+
+@export var dice_configuration: DiceConfiguration
+
+var rotate_tween: Tween
+
+
+func _ready() -> void:
+ %FaceFront.texture = DiceFace.get_face_type_icon(dice_configuration.front_face.type)
+ %FaceBack.texture = DiceFace.get_face_type_icon(dice_configuration.back_face.type)
+ %FaceLeft.texture = DiceFace.get_face_type_icon(dice_configuration.left_face.type)
+ %FaceRight.texture = DiceFace.get_face_type_icon(dice_configuration.right_face.type)
+ %FaceTop.texture = DiceFace.get_face_type_icon(dice_configuration.top_face.type)
+ %FaceBottom.texture = DiceFace.get_face_type_icon(dice_configuration.bottom_face.type)
+
+ rotate_tween = get_tree().create_tween()
+
+ %DiceConfigurationFacePreviewFront.grab_focus()
+
+
+func set_face_active(face: Control) -> void:
+ for node in %DiceConfigurationPreview.get_children():
+ node.active = false
+
+ face.active = true
+
+
+func rotate_dice(target: Vector3) -> void:
+ rotate_tween.stop()
+ rotate_tween = get_tree().create_tween()
+ rotate_tween.tween_property(%Dice, "rotation", target, 0.5)
+
+
+func _on_dice_configuration_face_preview_front_focus_entered() -> void:
+ rotate_dice(Vector3.ZERO)
+ set_face_active(%DiceConfigurationFacePreviewFront)
+
+
+func _on_dice_configuration_face_preview_back_focus_entered() -> void:
+ rotate_dice(Vector3(0, deg_to_rad(180), 0))
+ set_face_active(%DiceConfigurationFacePreviewBack)
+
+
+func _on_dice_configuration_face_preview_left_focus_entered() -> void:
+ rotate_dice(Vector3(0, deg_to_rad(90), 0))
+ set_face_active(%DiceConfigurationFacePreviewLeft)
+
+
+func _on_dice_configuration_face_preview_right_focus_entered() -> void:
+ rotate_dice(Vector3(0, deg_to_rad(-90), 0))
+ set_face_active(%DiceConfigurationFacePreviewRight)
+
+
+func _on_dice_configuration_face_preview_top_focus_entered() -> void:
+ rotate_dice(Vector3(deg_to_rad(90), 0, 0))
+ set_face_active(%DiceConfigurationFacePreviewTop)
+
+
+func _on_dice_configuration_face_preview_bottom_focus_entered() -> void:
+ rotate_dice(Vector3(deg_to_rad(-90), 0, 0))
+ set_face_active(%DiceConfigurationFacePreviewBottom)
diff --git a/ui/dice_configurator/dice_configurator.gd.uid b/ui/dice_configurator/dice_configurator.gd.uid
new file mode 100644
index 0000000..ff61cd9
--- /dev/null
+++ b/ui/dice_configurator/dice_configurator.gd.uid
@@ -0,0 +1 @@
+uid://bqsugmudjex17
diff --git a/ui/dice_configurator/dice_configurator.tscn b/ui/dice_configurator/dice_configurator.tscn
new file mode 100644
index 0000000..fc102ed
--- /dev/null
+++ b/ui/dice_configurator/dice_configurator.tscn
@@ -0,0 +1,168 @@
+[gd_scene load_steps=9 format=3 uid="uid://c37w1i0h4qau"]
+
+[ext_resource type="Script" uid="uid://bqsugmudjex17" path="res://ui/dice_configurator/dice_configurator.gd" id="1_8dqw1"]
+[ext_resource type="Texture2D" uid="uid://c4aqalwcd7y14" path="res://ui/assets/face_type_move.png" id="2_dc0wu"]
+[ext_resource type="PackedScene" uid="uid://dff1mvgcacrxs" path="res://ui/dice_configurator/dice_configuration_face_preview.tscn" id="2_ga5up"]
+[ext_resource type="Resource" uid="uid://c5up64wq06lx1" path="res://dice_configuration.tres" id="2_yfcgx"]
+
+[sub_resource type="BoxMesh" id="BoxMesh_8dqw1"]
+
+[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_ga5up"]
+sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
+ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
+
+[sub_resource type="Sky" id="Sky_ij08j"]
+sky_material = SubResource("ProceduralSkyMaterial_ga5up")
+
+[sub_resource type="Environment" id="Environment_dc0wu"]
+background_mode = 2
+sky = SubResource("Sky_ij08j")
+tonemap_mode = 2
+
+[node name="DiceConfigurator" 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_8dqw1")
+dice_configuration = ExtResource("2_yfcgx")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="DiceConfigurationPreview" type="GridContainer" parent="VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+columns = 3
+
+[node name="DiceConfigurationFacePreviewFront" parent="VBoxContainer/DiceConfigurationPreview" instance=ExtResource("2_ga5up")]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+focus_mode = 2
+
+[node name="DiceConfigurationFacePreviewLeft" parent="VBoxContainer/DiceConfigurationPreview" instance=ExtResource("2_ga5up")]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+focus_mode = 2
+face = 2
+type = 2
+
+[node name="DiceConfigurationFacePreviewTop" parent="VBoxContainer/DiceConfigurationPreview" instance=ExtResource("2_ga5up")]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+focus_mode = 2
+face = 4
+type = 4
+
+[node name="DiceConfigurationFacePreviewBack" parent="VBoxContainer/DiceConfigurationPreview" instance=ExtResource("2_ga5up")]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+focus_mode = 2
+face = 1
+type = 1
+
+[node name="DiceConfigurationFacePreviewRight" parent="VBoxContainer/DiceConfigurationPreview" instance=ExtResource("2_ga5up")]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+focus_mode = 2
+face = 3
+type = 3
+
+[node name="DiceConfigurationFacePreviewBottom" parent="VBoxContainer/DiceConfigurationPreview" instance=ExtResource("2_ga5up")]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+focus_mode = 2
+face = 5
+type = 4
+
+[node name="SubViewportContainer" type="SubViewportContainer" parent="VBoxContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+stretch = true
+
+[node name="SubViewport" type="SubViewport" parent="VBoxContainer/SubViewportContainer"]
+transparent_bg = true
+handle_input_locally = false
+size = Vector2i(480, 248)
+render_target_update_mode = 4
+
+[node name="Dice" type="Node3D" parent="VBoxContainer/SubViewportContainer/SubViewport"]
+unique_name_in_owner = true
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
+
+[node name="MeshInstance3D" type="MeshInstance3D" parent="VBoxContainer/SubViewportContainer/SubViewport/Dice"]
+mesh = SubResource("BoxMesh_8dqw1")
+
+[node name="Faces" type="Node3D" parent="VBoxContainer/SubViewportContainer/SubViewport/Dice"]
+
+[node name="FaceFront" type="Sprite3D" parent="VBoxContainer/SubViewportContainer/SubViewport/Dice/Faces"]
+unique_name_in_owner = true
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.51)
+texture_filter = 0
+texture = ExtResource("2_dc0wu")
+
+[node name="FaceBack" type="Sprite3D" parent="VBoxContainer/SubViewportContainer/SubViewport/Dice/Faces"]
+unique_name_in_owner = true
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.51)
+texture_filter = 0
+texture = ExtResource("2_dc0wu")
+
+[node name="FaceLeft" type="Sprite3D" parent="VBoxContainer/SubViewportContainer/SubViewport/Dice/Faces"]
+unique_name_in_owner = true
+transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -0.51, 0, 0)
+texture_filter = 0
+texture = ExtResource("2_dc0wu")
+
+[node name="FaceRight" type="Sprite3D" parent="VBoxContainer/SubViewportContainer/SubViewport/Dice/Faces"]
+unique_name_in_owner = true
+transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0.51, 0, 0)
+texture_filter = 0
+texture = ExtResource("2_dc0wu")
+
+[node name="FaceTop" type="Sprite3D" parent="VBoxContainer/SubViewportContainer/SubViewport/Dice/Faces"]
+unique_name_in_owner = true
+transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0.51, 0)
+texture_filter = 0
+texture = ExtResource("2_dc0wu")
+
+[node name="FaceBottom" type="Sprite3D" parent="VBoxContainer/SubViewportContainer/SubViewport/Dice/Faces"]
+unique_name_in_owner = true
+transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, -0.51, 0)
+texture_filter = 0
+texture = ExtResource("2_dc0wu")
+
+[node name="Camera3D" type="Camera3D" parent="VBoxContainer/SubViewportContainer/SubViewport"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1.75)
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="VBoxContainer/SubViewportContainer/SubViewport"]
+environment = SubResource("Environment_dc0wu")
+
+[node name="DirectionalLight3D" type="DirectionalLight3D" parent="VBoxContainer/SubViewportContainer/SubViewport"]
+transform = Transform3D(1, 0, 0, 0, 0.173648, 0.984808, 0, -0.984808, 0.173648, 0, 25, 16.062)
+shadow_enabled = true
+
+[connection signal="focus_entered" from="VBoxContainer/DiceConfigurationPreview/DiceConfigurationFacePreviewFront" to="." method="_on_dice_configuration_face_preview_front_focus_entered"]
+[connection signal="focus_entered" from="VBoxContainer/DiceConfigurationPreview/DiceConfigurationFacePreviewLeft" to="." method="_on_dice_configuration_face_preview_left_focus_entered"]
+[connection signal="focus_entered" from="VBoxContainer/DiceConfigurationPreview/DiceConfigurationFacePreviewTop" to="." method="_on_dice_configuration_face_preview_top_focus_entered"]
+[connection signal="focus_entered" from="VBoxContainer/DiceConfigurationPreview/DiceConfigurationFacePreviewBack" to="." method="_on_dice_configuration_face_preview_back_focus_entered"]
+[connection signal="focus_entered" from="VBoxContainer/DiceConfigurationPreview/DiceConfigurationFacePreviewRight" to="." method="_on_dice_configuration_face_preview_right_focus_entered"]
+[connection signal="focus_entered" from="VBoxContainer/DiceConfigurationPreview/DiceConfigurationFacePreviewBottom" to="." method="_on_dice_configuration_face_preview_bottom_focus_entered"]