diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2025-02-08 14:41:11 +0100 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2025-02-08 14:41:11 +0100 |
commit | d24180c58e9e1d6149f0ac41d4f4bbaf674bdbd3 (patch) | |
tree | b3316011d7ed6cfa43f6988bd6e05af3b311a495 /stage/dice_throw | |
parent | a210c39b5d2be1e7e5c52568d40ba6a29f34b4bb (diff) |
next commit
Diffstat (limited to 'stage/dice_throw')
-rw-r--r-- | stage/dice_throw/dice.gd | 25 | ||||
-rw-r--r-- | stage/dice_throw/dice.gd.uid | 1 | ||||
-rw-r--r-- | stage/dice_throw/dice.tscn | 14 | ||||
-rw-r--r-- | stage/dice_throw/dice_throw.gd | 70 | ||||
-rw-r--r-- | stage/dice_throw/dice_throw.gd.uid | 1 | ||||
-rw-r--r-- | stage/dice_throw/dice_throw.tscn | 65 | ||||
-rw-r--r-- | stage/dice_throw/dice_throw_3d.gd | 43 | ||||
-rw-r--r-- | stage/dice_throw/dice_throw_3d.gd.uid | 1 | ||||
-rw-r--r-- | stage/dice_throw/dice_throw_3d.tscn | 12 |
9 files changed, 210 insertions, 22 deletions
diff --git a/stage/dice_throw/dice.gd b/stage/dice_throw/dice.gd index 127d968..291710c 100644 --- a/stage/dice_throw/dice.gd +++ b/stage/dice_throw/dice.gd @@ -1,6 +1,11 @@ extends RigidBody3D +var previous_position: Vector3 +var previous_rotation: Vector3 +var is_moving := false + + func roll(direction := Vector3(1.0, 1.0, 1.0), strength: float = 20) -> void: var position_impulse := Vector3( [-1, 1].pick_random(), @@ -16,4 +21,22 @@ func roll(direction := Vector3(1.0, 1.0, 1.0), strength: float = 20) -> void: [-1, 1].pick_random() ) - apply_torque_impulse(rotation_impulse.normalized()) + apply_torque_impulse(rotation_impulse) + + +func get_top() -> Node3D: + var top := -pow(2, 8) + var face: Node3D + for node: Node3D in $Faces.get_children(): + if top < node.global_transform.origin.y: + top = node.global_transform.origin.y + face = node + + return face + + +func _physics_process(_delta: float) -> void: + is_moving = not previous_position == global_position and not previous_rotation == rotation + + previous_position = global_position + previous_rotation = rotation diff --git a/stage/dice_throw/dice.gd.uid b/stage/dice_throw/dice.gd.uid new file mode 100644 index 0000000..c550235 --- /dev/null +++ b/stage/dice_throw/dice.gd.uid @@ -0,0 +1 @@ +uid://bajtxq3ucs8f4 diff --git a/stage/dice_throw/dice.tscn b/stage/dice_throw/dice.tscn index 14f28b7..75fb93c 100644 --- a/stage/dice_throw/dice.tscn +++ b/stage/dice_throw/dice.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=12 format=3 uid="uid://dnq7fpof6w0mj"] -[ext_resource type="Script" path="res://stage/dice_throw/dice.gd" id="1_gwnix"] +[ext_resource type="Script" uid="uid://bajtxq3ucs8f4" path="res://stage/dice_throw/dice.gd" id="1_gwnix"] [ext_resource type="Texture2D" uid="uid://blanietpri1be" path="res://icon.svg" id="2_6tbdd"] [ext_resource type="Texture2D" uid="uid://dtltt171temec" path="res://stage/assets/tinyBlocks.png" id="3_t0umq"] @@ -47,28 +47,40 @@ shape = SubResource("BoxShape3D_tqijt") [node name="Sprite3D" type="Sprite3D" parent="Faces"] transform = Transform3D(0.7, 0, 0, 0, 0.7, 0, 0, 0, 0.7, 0, 0, 0.51) texture = ExtResource("2_6tbdd") +metadata/up = Vector3(-90, 0, 0) +metadata/type = "move" [node name="Sprite3D2" type="Sprite3D" parent="Faces"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.51) pixel_size = 0.05 texture = SubResource("AtlasTexture_0hsac") +metadata/up = Vector3(90, 0, 180) +metadata/type = "move" [node name="Sprite3D3" type="Sprite3D" parent="Faces"] transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0.51, 0, 0) pixel_size = 0.05 texture = SubResource("AtlasTexture_2rcxj") +metadata/up = Vector3(0, -90, 90) +metadata/type = "attack" [node name="Sprite3D4" type="Sprite3D" parent="Faces"] transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -0.51, 0, 0) pixel_size = 0.05 texture = SubResource("AtlasTexture_l100r") +metadata/up = Vector3(0, 90, -90) +metadata/type = "attack" [node name="Sprite3D5" type="Sprite3D" parent="Faces"] transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0.51, 0) pixel_size = 0.05 texture = SubResource("AtlasTexture_l8don") +metadata/up = Vector3(0, 180, 0) +metadata/type = "defend" [node name="Sprite3D6" type="Sprite3D" parent="Faces"] transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, -0.51, 0) pixel_size = 0.05 texture = SubResource("AtlasTexture_ug301") +metadata/up = Vector3(180, 0, 0) +metadata/type = "ability" diff --git a/stage/dice_throw/dice_throw.gd b/stage/dice_throw/dice_throw.gd new file mode 100644 index 0000000..e612dc2 --- /dev/null +++ b/stage/dice_throw/dice_throw.gd @@ -0,0 +1,70 @@ +extends Control + + +signal throw_finished + + +func _ready() -> void: + %Side.position.x = -%Side.size.x + + +func _on_dice_throw_3d_throw_finished() -> void: + await get_tree().create_timer(0.25).timeout + + var dices := %DiceThrow3D/Dice.get_children() + var top_faces := [] + + var tween := create_tween().set_parallel() + + #tween.tween_property(%Camera3D, "rotation_degrees", Vector3(-90, 0, 0), 0.5) + #tween.tween_property(%Camera3D, "position", Vector3(0, %Camera3D.position.y, 0), 0.5) + + for idx in dices.size(): + var dice: RigidBody3D = dices[idx] + dice.freeze = true + + tween.tween_property( + dice, + "position", + %Camera3D.project_position((%SubViewportContainer.size * 0.5) + Vector2(50 * idx, 0) - Vector2(50, 0), 1), + 0.25 + ) + + var face: Node3D = dice.get_top() + top_faces.append(face) + + var up_rotation: Vector3 = face.get_meta("up") + var transform_vector: Vector3 + if up_rotation.y != 0 and up_rotation.z != 0: + transform_vector = Vector3(0, 0, 60) * sign(up_rotation.y) + else: + transform_vector = Vector3(60, 0, 0) * (-1 if up_rotation.y > 0 else 1) + tween.tween_property(dice, "rotation_degrees", face.get_meta("up") + transform_vector, 0.25) + + await tween.finished + await get_tree().create_timer(0.25).timeout + + tween = create_tween().set_parallel() + tween.tween_property(%Side, "position", Vector2(0, %Side.position.y), 0.25) + for dice in dices: + var p2d: Vector2 = %Camera3D.unproject_position(dice.position) + var p3d = %Camera3D.project_position(p2d + %Side.size * 0.5, 1) + tween.tween_property(dice, "position", Vector3(p3d.x, dice.position.y, dice.position.z), 0.25) + + await tween.finished + await get_tree().create_timer(0.25).timeout + + tween = create_tween().set_parallel() + for idx in dices.size(): + var dice: RigidBody3D = dices[idx] + var node := get_node("%" + top_faces[idx].get_meta("type")) + var p3d = %Camera3D.project_position(node.position + node.size * 0.5, 1) + tween.tween_property(dice, "position", p3d, 0.25) + tween.tween_property(dice, "scale", Vector3(0.1, 0.1, 0.1), 0.25) + + await tween.finished + for dice in dices: + dice.visible = false + + await get_tree().create_timer(1.0).timeout + throw_finished.emit() diff --git a/stage/dice_throw/dice_throw.gd.uid b/stage/dice_throw/dice_throw.gd.uid new file mode 100644 index 0000000..f4147a3 --- /dev/null +++ b/stage/dice_throw/dice_throw.gd.uid @@ -0,0 +1 @@ +uid://p3q3cstjxr5l diff --git a/stage/dice_throw/dice_throw.tscn b/stage/dice_throw/dice_throw.tscn index 1311285..286dca4 100644 --- a/stage/dice_throw/dice_throw.tscn +++ b/stage/dice_throw/dice_throw.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=5 format=3 uid="uid://dsy8atabknch"] +[gd_scene load_steps=6 format=3 uid="uid://dsy8atabknch"] +[ext_resource type="Script" uid="uid://p3q3cstjxr5l" path="res://stage/dice_throw/dice_throw.gd" id="1_3voo6"] [ext_resource type="PackedScene" uid="uid://dlkds7l1kw468" path="res://stage/dice_throw/dice_throw_3d.tscn" id="1_mg5cv"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_cqep4"] @@ -15,52 +16,92 @@ sky = SubResource("Sky_ij08j") tonemap_mode = 2 [node name="DiceThrow" type="Control"] +z_index = 3 layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +script = ExtResource("1_3voo6") -[node name="HBoxContainer" type="HBoxContainer" parent="."] +[node name="Background" type="ColorRect" parent="."] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +color = Color(0.180005, 0.180005, 0.180005, 1) -[node name="PanelContainer" type="PanelContainer" parent="HBoxContainer"] +[node name="Side" type="PanelContainer" parent="."] +unique_name_in_owner = true layout_mode = 2 +offset_right = 136.0 +offset_bottom = 320.0 -[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer/PanelContainer"] +[node name="VBoxContainer" type="VBoxContainer" parent="Side"] layout_mode = 2 -[node name="Label" type="Label" parent="HBoxContainer/PanelContainer/VBoxContainer"] +[node name="move" type="Label" parent="Side/VBoxContainer"] +unique_name_in_owner = true layout_mode = 2 text = "Movement Points" -[node name="SubViewportContainer" type="SubViewportContainer" parent="HBoxContainer"] +[node name="attack" type="Label" parent="Side/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "Attack Points" + +[node name="defend" type="Label" parent="Side/VBoxContainer"] +unique_name_in_owner = true layout_mode = 2 +text = "Defend Points" + +[node name="ability" type="Label" parent="Side/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "Ability Points" + +[node name="SubViewportContainer" type="SubViewportContainer" parent="."] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 size_flags_horizontal = 3 stretch = true -[node name="SubViewport" type="SubViewport" parent="HBoxContainer/SubViewportContainer"] +[node name="SubViewport" type="SubViewport" parent="SubViewportContainer"] transparent_bg = true handle_input_locally = false -size = Vector2i(340, 320) +size = Vector2i(480, 320) render_target_update_mode = 4 -[node name="DiceThrow3D" parent="HBoxContainer/SubViewportContainer/SubViewport" instance=ExtResource("1_mg5cv")] +[node name="DiceThrow3D" parent="SubViewportContainer/SubViewport" instance=ExtResource("1_mg5cv")] +unique_name_in_owner = true -[node name="Camera3D" type="Camera3D" parent="HBoxContainer/SubViewportContainer/SubViewport"] +[node name="Camera3D" type="Camera3D" parent="SubViewportContainer/SubViewport"] +unique_name_in_owner = true transform = Transform3D(1, 0, 0, 0, 0.866025, 0.5, 0, -0.5, 0.866025, 0, 9, 10) projection = 1 size = 10.0 -[node name="WorldEnvironment" type="WorldEnvironment" parent="HBoxContainer/SubViewportContainer/SubViewport"] +[node name="WorldEnvironment" type="WorldEnvironment" parent="SubViewportContainer/SubViewport"] environment = SubResource("Environment_sn6lt") -[node name="DirectionalLight3D" type="DirectionalLight3D" parent="HBoxContainer/SubViewportContainer/SubViewport"] +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="SubViewportContainer/SubViewport"] transform = Transform3D(1, 0, 0, 0, 0.173648, 0.984808, 0, -0.984808, 0.173648, 0, 25, 0) shadow_enabled = true + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[connection signal="throw_finished" from="SubViewportContainer/SubViewport/DiceThrow3D" to="." method="_on_dice_throw_3d_throw_finished"] diff --git a/stage/dice_throw/dice_throw_3d.gd b/stage/dice_throw/dice_throw_3d.gd index c5734a0..5c2ef94 100644 --- a/stage/dice_throw/dice_throw_3d.gd +++ b/stage/dice_throw/dice_throw_3d.gd @@ -1,11 +1,48 @@ extends Node3D +signal throw_finished + +var dice_scene := preload("res://stage/dice_throw/dice.tscn") +var dices := [] +var do_check_dice_state := false + +@export var dice_count := 3 + + # Called when the node enters the scene tree for the first time. func _ready() -> void: - $Dice.roll() + for _i in dice_count: + var dice: Node3D = dice_scene.instantiate() + $Dice.add_child(dice) + dice.position = Vector3( + randf_range(-3, 3), + randf_range(2, 5), + randf_range(-3, 3) + ) + dice.rotation_degrees = Vector3( + randf_range(0, 360), + randf_range(0, 360), + randf_range(0, 360) + ) + dices.append(dice) + dice.roll() + + await get_tree().create_timer(0.5).timeout + do_check_dice_state = true -func _process(_delta: float) -> void: +func _physics_process(_delta: float) -> void: if Input.is_action_just_pressed("ui_accept"): - $Dice.roll(Vector3(1,1,0)) + for dice in dices: + dice.roll(Vector3(1,1,0)) + + var moving := false + for dice in dices: + if dice.is_moving: + moving = true + break + + if do_check_dice_state and not moving: + do_check_dice_state = false + throw_finished.emit() diff --git a/stage/dice_throw/dice_throw_3d.gd.uid b/stage/dice_throw/dice_throw_3d.gd.uid new file mode 100644 index 0000000..acd3735 --- /dev/null +++ b/stage/dice_throw/dice_throw_3d.gd.uid @@ -0,0 +1 @@ +uid://dkqskd6jbfgj5 diff --git a/stage/dice_throw/dice_throw_3d.tscn b/stage/dice_throw/dice_throw_3d.tscn index 15be9f5..9f63d9a 100644 --- a/stage/dice_throw/dice_throw_3d.tscn +++ b/stage/dice_throw/dice_throw_3d.tscn @@ -1,7 +1,6 @@ -[gd_scene load_steps=4 format=3 uid="uid://dlkds7l1kw468"] +[gd_scene load_steps=3 format=3 uid="uid://dlkds7l1kw468"] -[ext_resource type="PackedScene" uid="uid://dnq7fpof6w0mj" path="res://stage/dice_throw/dice.tscn" id="1_ovyq0"] -[ext_resource type="Script" path="res://stage/dice_throw/dice_throw_3d.gd" id="1_w4qjs"] +[ext_resource type="Script" uid="uid://dkqskd6jbfgj5" path="res://stage/dice_throw/dice_throw_3d.gd" id="1_w4qjs"] [sub_resource type="BoxShape3D" id="BoxShape3D_pbdn1"] size = Vector3(10, 0.1, 10) @@ -30,5 +29,8 @@ shape = SubResource("BoxShape3D_pbdn1") transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 5, -5) shape = SubResource("BoxShape3D_pbdn1") -[node name="Dice" parent="." instance=ExtResource("1_ovyq0")] -transform = Transform3D(1, 0, 0, 0, 0.707107, -0.707107, 0, 0.707107, 0.707107, 0, 2.83258, -2) +[node name="CollisionShape3D6" type="CollisionShape3D" parent="StaticBody3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0) +shape = SubResource("BoxShape3D_pbdn1") + +[node name="Dice" type="Node3D" parent="."] |