diff options
Diffstat (limited to 'ui/dice_configurator')
-rw-r--r-- | ui/dice_configurator/dice_configuration_face_preview.gd | 55 | ||||
-rw-r--r-- | ui/dice_configurator/dice_configuration_face_preview.gd.uid | 1 | ||||
-rw-r--r-- | ui/dice_configurator/dice_configuration_face_preview.tscn | 43 | ||||
-rw-r--r-- | ui/dice_configurator/dice_configurator.gd | 62 | ||||
-rw-r--r-- | ui/dice_configurator/dice_configurator.gd.uid | 1 | ||||
-rw-r--r-- | ui/dice_configurator/dice_configurator.tscn | 168 |
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"] |