diff --git a/levels/jenga.tscn b/levels/jenga.tscn index 017772e..38680be 100644 --- a/levels/jenga.tscn +++ b/levels/jenga.tscn @@ -1,11 +1,16 @@ -[gd_scene load_steps=21 format=3 uid="uid://bdtfounpnyaoo"] +[gd_scene load_steps=26 format=3 uid="uid://bdtfounpnyaoo"] [ext_resource type="Script" path="res://twitch/jengacommands.gd" id="1_so2ke"] [ext_resource type="Script" path="res://scripts/JengaManager.gd" id="1_xtpjd"] [ext_resource type="Shader" path="res://addons/water_shader/shaders/water.gdshader" id="2_rliwp"] [ext_resource type="Material" uid="uid://bwrsgjub33pd4" path="res://materials/BaseMaterial.tres" id="2_txp0l"] +[ext_resource type="Script" path="res://scripts/PivotMover.gd" id="3_7e1m6"] [ext_resource type="Script" path="res://scripts/PlayerHand.gd" id="4_kq4yo"] [ext_resource type="PackedScene" uid="uid://b2fnlbcm3p6f" path="res://prefabs/block.tscn" id="5_mn8hr"] +[ext_resource type="Material" uid="uid://dd5vcwp8smlnt" path="res://materials/Green.tres" id="8_2httq"] +[ext_resource type="Material" uid="uid://doxtu8jdlr3tp" path="res://materials/Red.tres" id="9_swpv7"] +[ext_resource type="Material" uid="uid://bipwt04wjyv6v" path="res://materials/Blue.tres" id="10_5k7a5"] +[ext_resource type="Material" uid="uid://cndp0uelk5w8u" path="res://materials/Blue2.tres" id="10_faljs"] [sub_resource type="Environment" id="Environment_h6sx5"] ambient_light_color = Color(1, 1, 1, 1) @@ -99,6 +104,7 @@ scopes = Array[String](["chat:edit", "chat:read", "moderator:read:followers"]) [node name="CameraPivot" type="Node3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.445, 0) +script = ExtResource("3_7e1m6") [node name="Camera3D" type="Camera3D" parent="CameraPivot"] transform = Transform3D(1, 0, 0, 0, 0.819152, 0.573576, 0, -0.573576, 0.819152, 0, 0, 4.12) @@ -165,7 +171,95 @@ offset_bottom = 23.0 text = "meow" label_settings = SubResource("LabelSettings_y2xp5") +[node name="SubViewportContainer" type="SubViewportContainer" parent="UserInterface"] +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -128.0 +offset_bottom = 128.0 +grow_horizontal = 0 +stretch = true + +[node name="SubViewport" type="SubViewport" parent="UserInterface/SubViewportContainer"] +size = Vector2i(128, 128) +size_2d_override = Vector2i(225, 190) + +[node name="Camera3D" type="Camera3D" parent="UserInterface/SubViewportContainer/SubViewport"] +transform = Transform3D(1, 0, 0, 0, 0.819152, 0.573576, 0, -0.573576, 0.819152, 0, 52.925, 4.12) +cull_mask = 524288 +fov = 28.2 + +[node name="TransformGizmo" type="Node3D" parent="UserInterface/SubViewportContainer/SubViewport"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 0) + +[node name="YAxis" type="CSGTorus3D" parent="UserInterface/SubViewportContainer/SubViewport/TransformGizmo"] +layers = 524288 +material_override = ExtResource("8_2httq") +inner_radius = 0.84 +sides = 20 +ring_sides = 10 + +[node name="XAxis" type="CSGTorus3D" parent="UserInterface/SubViewportContainer/SubViewport/TransformGizmo"] +transform = Transform3D(-4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0) +layers = 524288 +material_override = ExtResource("9_swpv7") +inner_radius = 0.84 +sides = 20 +ring_sides = 10 + +[node name="ZAxis" type="CSGTorus3D" parent="UserInterface/SubViewportContainer/SubViewport/TransformGizmo"] +transform = Transform3D(1.91069e-15, -4.37114e-08, 1, -1, -4.37114e-08, 0, 4.37114e-08, -1, -4.37114e-08, 0, 0, 0) +layers = 524288 +material_override = ExtResource("10_faljs") +inner_radius = 0.84 +sides = 20 +ring_sides = 10 + +[node name="Arrow" type="CSGPolygon3D" parent="UserInterface/SubViewportContainer/SubViewport/TransformGizmo"] +transform = Transform3D(1, 0, 0, 0, 0.740617, 0.671927, 0, -0.671927, 0.740617, 0, 0.528221, 0.857041) +layers = 524288 +material_override = ExtResource("9_swpv7") +polygon = PackedVector2Array(0, 0, 0.2, 0.4, -0.2, 0.4) +depth = 0.2 + +[node name="Arrow5" type="CSGPolygon3D" parent="UserInterface/SubViewportContainer/SubViewport/TransformGizmo"] +transform = Transform3D(-4.37114e-08, 0.707107, -0.707107, 0, -0.707107, -0.707107, -1, -3.09086e-08, 3.09086e-08, 0.367916, 0.75111, 2.09664e-08) +layers = 524288 +material_override = ExtResource("10_5k7a5") +polygon = PackedVector2Array(0, 0, 0.2, 0.4, -0.2, 0.4) +depth = 0.2 + +[node name="Arrow6" type="CSGPolygon3D" parent="UserInterface/SubViewportContainer/SubViewport/TransformGizmo"] +transform = Transform3D(-1.81058e-08, -0.707107, -0.707107, 6.18172e-08, 0.707107, -0.707107, 1, -5.65141e-08, 3.09086e-08, -0.577203, -0.807655, 1.00213e-07) +layers = 524288 +material_override = ExtResource("10_5k7a5") +polygon = PackedVector2Array(0, 0, 0.2, 0.4, -0.2, 0.4) +depth = 0.2 + +[node name="Arrow2" type="CSGPolygon3D" parent="UserInterface/SubViewportContainer/SubViewport/TransformGizmo"] +transform = Transform3D(-1, -8.74228e-08, 0, 6.47468e-08, -0.740617, 0.671928, -5.87418e-08, 0.671927, 0.740617, 2.86072e-08, -0.438335, -0.695322) +layers = 524288 +material_override = ExtResource("9_swpv7") +polygon = PackedVector2Array(0, 0, 0.2, 0.4, -0.2, 0.4) +depth = 0.2 + +[node name="Arrow3" type="CSGPolygon3D" parent="UserInterface/SubViewportContainer/SubViewport/TransformGizmo"] +transform = Transform3D(0.63384, -0.773464, -8.74228e-08, 2.16029e-08, -9.53244e-08, 1, -0.773464, -0.63384, -4.37114e-08, -0.454012, 0.102974, 0.816248) +layers = 524288 +material_override = ExtResource("8_2httq") +polygon = PackedVector2Array(0, 0, 0.2, 0.4, -0.2, 0.4) +depth = 0.2 + +[node name="Arrow4" type="CSGPolygon3D" parent="UserInterface/SubViewportContainer/SubViewport/TransformGizmo"] +transform = Transform3D(-0.63384, 0.773464, -8.74228e-08, -2.16029e-08, 9.53244e-08, 1, 0.773464, 0.63384, -4.37114e-08, 0.450658, 0.102974, -0.783165) +layers = 524288 +material_override = ExtResource("8_2httq") +polygon = PackedVector2Array(0, 0, 0.2, 0.4, -0.2, 0.4) +depth = 0.2 + [connection signal="dropBlock" from="TwitchLink" to="PlayerHand" method="_on_twitch_link_drop_block"] [connection signal="moveBlock" from="TwitchLink" to="PlayerHand" method="_on_twitch_link_move_block"] [connection signal="rotateBlock" from="TwitchLink" to="PlayerHand" method="_on_twitch_link_rotate_block"] +[connection signal="rotateCamera" from="TwitchLink" to="CameraPivot" method="_on_twitch_link_rotate_camera"] [connection signal="startTurn" from="TwitchLink" to="PlayerHand" method="_on_twitch_link_start_turn"] diff --git a/materials/Blue.tres b/materials/Blue.tres new file mode 100644 index 0000000..6eee999 --- /dev/null +++ b/materials/Blue.tres @@ -0,0 +1,4 @@ +[gd_resource type="StandardMaterial3D" format=3 uid="uid://bipwt04wjyv6v"] + +[resource] +albedo_color = Color(0, 0.792157, 0.172549, 1) diff --git a/materials/Blue2.tres b/materials/Blue2.tres new file mode 100644 index 0000000..1bc8bb2 --- /dev/null +++ b/materials/Blue2.tres @@ -0,0 +1,4 @@ +[gd_resource type="StandardMaterial3D" format=3 uid="uid://cndp0uelk5w8u"] + +[resource] +albedo_color = Color(0, 0.713726, 0.956863, 1) diff --git a/materials/Green.tres b/materials/Green.tres new file mode 100644 index 0000000..dd545f0 --- /dev/null +++ b/materials/Green.tres @@ -0,0 +1,3 @@ +[gd_resource type="StandardMaterial3D" format=3 uid="uid://dd5vcwp8smlnt"] + +[resource] diff --git a/materials/Red.tres b/materials/Red.tres new file mode 100644 index 0000000..a8c40bb --- /dev/null +++ b/materials/Red.tres @@ -0,0 +1,4 @@ +[gd_resource type="StandardMaterial3D" format=3 uid="uid://doxtu8jdlr3tp"] + +[resource] +albedo_color = Color(1, 0.215686, 0.258824, 1) diff --git a/scripts/PivotMover.gd b/scripts/PivotMover.gd new file mode 100644 index 0000000..c53b46d --- /dev/null +++ b/scripts/PivotMover.gd @@ -0,0 +1,57 @@ +extends Node3D +#class_name +#Authored by Tom. Please consult for any modifications or major feature requests. + +#region Variables +#Signals + +#Enums + +#Constants + +#Exported Variables +#@export_group("Group") +#@export_subgroup("Subgroup") +@export var rotation_speed : float = 20 #degrees per second +@export var height_speed : float = 0.5 # m per second + +#Onready Variables + +#Other Variables (please try to separate and organise!) +var target_rotation : float = 0 +var target_height : float = 3.445 + +#endregion + +#region Godot methods +func _ready(): + #Runs when all children have entered the tree + pass + +func _process(delta): + if abs(rotation_degrees.y - target_rotation) < 1: + rotation_degrees.y = target_rotation + else: + if(target_rotation > rotation_degrees.y): + rotation_degrees.y += rotation_speed * delta + else: + rotation_degrees.y -= rotation_speed * delta + pass +#endregion + +#region Signal methods + +func _on_twitch_link_rotate_camera(direction, amount): + var dir + match direction: + "left" : dir = -1 + "right" : dir = 1 + target_rotation += dir * float(amount) + +#endregion + +#region Other methods (please try to separate and organise!) + +#endregion + + diff --git a/scripts/PlayerHand.gd b/scripts/PlayerHand.gd index 5411ac8..722966d 100644 --- a/scripts/PlayerHand.gd +++ b/scripts/PlayerHand.gd @@ -31,11 +31,10 @@ func _ready(): #Runs when all children have entered the tree pass -func _process(delta): - #Runs per frame - pass #endregion + + #region Signal methods func _on_twitch_link_move_block(direction, amount): var dir : Vector3 @@ -66,7 +65,8 @@ func _on_twitch_link_drop_block(): func _on_twitch_link_start_turn(): - position = Vector3(0,3,0) + position = Vector3(0,2.28,0) + rotation_degrees = Vector3(0,0,0) current_block = block_scene.instantiate() current_block.freeze = true add_child(current_block) diff --git a/twitch/jengacommands.gd b/twitch/jengacommands.gd index 745d536..85a6906 100644 --- a/twitch/jengacommands.gd +++ b/twitch/jengacommands.gd @@ -2,6 +2,7 @@ extends Gift signal moveBlock(direction : String, amount : float) signal rotateBlock(direction : String, amount : float) +signal rotateCamera(direction : String, amount : float) signal dropBlock() signal startTurn() @@ -66,6 +67,8 @@ func _ready() -> void: add_command("leave_queue", leave_queue) add_command("start_turn", start_turn) add_command("pass_turn", pass_turn) + add_aliases("join_queue", ["jq", "join"]) + add_aliases("start_turn", ["st", "start"]) ## Gameplay Commands #camera movement command - !camera left 20 (moves camera left 20 units) @@ -149,7 +152,8 @@ func start_turn(cmd_info : CommandInfo): func pass_turn(cmd_info : CommandInfo): #allow the player to pass their turn and leave the queue if they no longer wish to play - jenga_manager.turn_timer = 0 #might change this later depeding on how i set up penalties + if(cmd_info.sender_data.tags["display-name"] == jenga_manager.current_player and jenga_manager.turn_started): + jenga_manager.turn_timer = 0 #might change this later depeding on how i set up penalties pass @@ -157,6 +161,14 @@ func pass_turn(cmd_info : CommandInfo): func camera(cmd_info : CommandInfo, arg_ary : PackedStringArray) -> void: chat("moving camera " + arg_ary[0] + " by " + arg_ary[1] + " degrees") + if(cmd_info.sender_data.tags["display-name"] == jenga_manager.current_player and jenga_manager.turn_started) : + var chosenDirection = arg_ary[0].to_lower() + var validDirections = ["left","right"] + if(validDirections.has(chosenDirection)): + rotateCamera.emit(arg_ary[0],float(arg_ary[1])) + chat("moving camera " + arg_ary[0] + " by " + arg_ary[1] + " degrees") + else: + chat("invalid direction :(") func move(cmd_info : CommandInfo, arg_ary : PackedStringArray) -> void: if(cmd_info.sender_data.tags["display-name"] == jenga_manager.current_player and jenga_manager.turn_started) :