summaryrefslogtreecommitdiff
path: root/stage/dice_throw
diff options
context:
space:
mode:
Diffstat (limited to 'stage/dice_throw')
-rw-r--r--stage/dice_throw/dice.gd25
-rw-r--r--stage/dice_throw/dice.gd.uid1
-rw-r--r--stage/dice_throw/dice.tscn14
-rw-r--r--stage/dice_throw/dice_throw.gd70
-rw-r--r--stage/dice_throw/dice_throw.gd.uid1
-rw-r--r--stage/dice_throw/dice_throw.tscn65
-rw-r--r--stage/dice_throw/dice_throw_3d.gd43
-rw-r--r--stage/dice_throw/dice_throw_3d.gd.uid1
-rw-r--r--stage/dice_throw/dice_throw_3d.tscn12
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="."]