From 1a13ce09682b907ef35faa3e7249a208f6df0068 Mon Sep 17 00:00:00 2001 From: Lexi Quinn Date: Sun, 11 Jun 2023 02:08:09 +1000 Subject: [PATCH] initial starter deck added. the turn rotation works sometimes --- .gitignore | 1 + Assets/back.png | Bin 0 -> 6311 bytes Assets/back.png.import | 34 +++++++++ Assets/card.png | Bin 4740 -> 4290 bytes Assets/card.png~ | Bin 6093 -> 0 bytes Assets/slice.png | Bin 581 -> 539 bytes Assets/slice.png~ | Bin 642 -> 0 bytes Assets/task.png | Bin 3724 -> 3640 bytes PlayerBoard.gd | 27 +++++-- Scenes/client_card.tscn | 71 +++++++++--------- Scenes/gameplay.tscn | 49 ++++++++---- Scenes/human_player.tscn | 34 ++++++++- Scenes/main_menu.tscn | 66 ++++++++-------- Scenes/player_board.tscn | 26 ++++--- Scenes/worker_card.tscn | 12 ++- Scenes/worker_slot.tscn | 5 +- .../PlayerStateMachine/human_controller.gd | 21 +++++- .../PlayerStateMachine/player_controller.gd | 34 ++++++++- Scripts/client.gd | 38 +++++++--- Scripts/deck.gd | 2 + Scripts/game.gd | 71 ++++++++++++++++-- Scripts/network_lobby.gd | 24 +++--- Scripts/worker_slot.gd | 8 ++ ideas.txt | 3 + 24 files changed, 391 insertions(+), 135 deletions(-) create mode 100644 Assets/back.png create mode 100644 Assets/back.png.import delete mode 100644 Assets/card.png~ delete mode 100644 Assets/slice.png~ diff --git a/.gitignore b/.gitignore index 248ccf4..6f56677 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ data_*/ mono_crash.*.json Project\ Exports/ +*~ diff --git a/Assets/back.png b/Assets/back.png new file mode 100644 index 0000000000000000000000000000000000000000..44ce4ac6e3cf112bfe561f0f0b8ddbab403ba0d3 GIT binary patch literal 6311 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 literal 0 HcmV?d00001 diff --git a/Assets/back.png.import b/Assets/back.png.import new file mode 100644 index 0000000..99f60a8 --- /dev/null +++ b/Assets/back.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bj07g3riacndc" +path="res://.godot/imported/back.png-053dd747ba6ac70cbaf48f0fcdf7d070.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/back.png" +dest_files=["res://.godot/imported/back.png-053dd747ba6ac70cbaf48f0fcdf7d070.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/card.png b/Assets/card.png index 607d5f1e177e3b69d725a8fa53a73cc7c32c6025..bbacf9b6bf3ad6a35172810f2ed62ee2146922ff 100644 GIT binary patch literal 4290 zcmeHKSyWS57ENLhA_WFeR3ZjZq+EztR(C+qJP>3Ml^`l2Ae1;Wgs}*afvDwB7$QaE zgc7Krh>Q+&!jPd=KuU!Q$S7eD+XT=ANFeY?Ug}|WfAmNH_v+=xU3cE+tb6V~cke5t zeLf~jtd<}U2opbFul;ZhA`r-7Z$-mtxQsCw*|h7A?hiihoX{aiNmo)nJ_*IH?pCNB?Lj`lF~ z>hISbDSk13duP^DId(@*p#pn`xUCReZg)Z1=%+;rA-IwuyR9NyXlPH0g6p z;e2Nb(409$B$d@El%?Zct(juu_*jC@?zc0FeD&F&tTl^rtcRxVmu@r^cW&OIjcEz1 z^hdhV_bwuC&V*KPp)9@7B`CL2CP3)pywMd>fRZx^gz2oGm&XAL^0U+<5!b!kfaG9DewHyoswbT&j6HsRYHQf76F95l z24fR}q4HVcfs;BUFxQJnK!(xp?jcDL5h5a+$FZrulgiLS?;?O%JQ5XZtc@D4Pf9`? zX&r6kbTcEWA?h4t{Y|fJ_uo&MHKPg3uxgV_W7mydqs|et zTsBk}WfqcM4)DApEwTSQE)3wM9hU+`T3wD4hp_{Epuu4IkKmJ%oQPGgTdTC_aUYW6 zMf#cUB+VooIgZ=s)kst$YH&&$lS%-eY}#ku;~zO^P20XIW=61B5jV4JWm>rOE=%}J zLV?&D^@>GQOv?SfBg*m+%%e!0AeG>{4r_r`ue`Stoo;~s+W&eUU+=@$_wY3ze9edd z$NvEZUsjAoqU?>eYE^SCkUv|C;K z!3=Vyy!v?5uSf2%N`{G950C$44==G+yctKmUM=~Pn85fjb8(FrI-Sd77y@-s|7n;a z5TDHzO`8z2dj3UydcJTYYh$WYKGnBJ?)l7t$ubzA)$>FIA;9wTHC(H(x+?YAT#bYu!;>9SXaK}cf&tT-WxM2dS zByK{l(+pOfm2>o9n;(#>xX61_&SUv;KUuHbe5b1s^be3IFkp@HU4-h^o1idNDlA0FbnAOAA>pTnuWF`#Sh#?wX_*K6NQmO{MIk3R-Kl8{e*-i=mlfY&DZjJS!ZP+#*% zU72!C$x+7JZPTjKHrDuo@)5V!CY3aaoi|67 zDoucXeeXOwEGdD=nY!0@hoClUa#j!lw2Vr&Kp(ZFJeJ7VY^958E)>=at-4A#x}ppA z2}hHE@hMtI?vPGb9pgp}_AEE*4|o4vNko}o`NGV?|2i@>L6#~9iWVF7dqiqGawd7x zsi%j_{j=%8z;SNX@jLd_IpSe&IQkhtuQy)S$L4hCYZKW3uo}0l-r|>S0DyAt-*S58HWO#e9wQTUAo(ecJY;Vn5HFHG? z4e2$K;H|9|J-$ON-VxGwl*E3pzKgGTSQXU9b_IchpN5m3e{SHUgQI~ZQhkN?%7@a4 z=eHz!t&sJnh7c!m+4i3AQY$3gl1)uAHDi6s!2I)Rc}bIO0Jg=@fEF$N%`R(nS4X(P z|9;ko{!04Y#CH?Cek7O$6fwK0!#IdWvI>2`VFEWz}?$a5Ef(2b+G3q?N3QaI~$>6qW z=wlXfP;F;I`uVEL?_0+izS|q77@rc7{|4zo!jh}hQeW9ID_7VxSzxX6age~lh>iUU}g6ANmFJl8coX&tTRJJ cGxduy40o(fv#p`P!WiMVYoAx;&d76r00k!dRR910 literal 4740 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 literal 581 zcmV-L0=oT)P)N<7yJ6=`p{IS=o>@8RSP_##<7=lZ80XXTw}IHWDcm$c>= zn&_v4ApV5z+S7A$5$dkbI~r8I9Z|jN->bRWQiiKTLyPc)ZaaBlnTE)E-d4OV+^uI4 zDd9umVMhiOzEXO!!q1A+6@FLj#G*6cQ$4lxA5Q*ZJ>%qrhlGQM}0}auomW} z_R8+VB}$kO8c7PQk|ocGR7*0e?Hm2^&9WvQUEVfD9C4({h<8}jf^;>cnxY%>WGSlL z|L5tN<71WXfexAG#z(lYs{S>}Y4St#QdJ8cK<6f$T~@W^ zE}U;c&x4(C5nXIyq3Z@(mn&KQo^x^!u?_h}*RZz_gL1!fn1X-mKx;dmHZSAo%wkDn=T8yyZ4 TRan7&00000NkvXXu0mjf=63gb|@K4O~TIpb4PN&a1*chsnQJD_^~fA7!Lv}}3?)HDc>7>?@;%QPg{d`Iz?aGR0Q zmW2<6`&}7O_)6(|iJujxOZ=|bok>kVNcD`St5~mMBjaX;dxc|JJ8zWdQD4$*=4Pj* zcF69;BSnHZQFQXGVB<3&H7A+`wUb>o6EzwPRYziv( z-+6l0@KC9Ha~$fPg5a$i>UZFKI|#mxg5diY!jEu~tN2$Xr_m45w<}ug03sW3c3IK% zT{z!__6J9EwW1W39kMKVJ%yHeXuW~P#Zp$~b58DIW?g>KHSFy}kKB(e{Qx(|Xd~J| z;MD*C010qNS#tmY4`BcR4`BhQKc{H`006p4L_t(&1?`sG3V2f977m~U9}b`f9||xUKKv_WdT)(}_j26Vxk9VL-@`nz>% diff --git a/Assets/task.png b/Assets/task.png index 68abc5b919132fe84aa1fcfa1a7ae00a5b252b22..2426391028f181deeba0fa4ce8d103aac3516c27 100644 GIT binary patch literal 3640 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 diff --git a/PlayerBoard.gd b/PlayerBoard.gd index b491cf7..868c3ee 100644 --- a/PlayerBoard.gd +++ b/PlayerBoard.gd @@ -1,18 +1,27 @@ class_name PlayerBoard extends Node2D +var player_info = {} var workers = [] var roster = [] -var shift_deck = [] -var slots = [] +@export var poor_deck: Deck +@export var good_deck: Deck +@export var great_deck: Deck +@export var shift_deck: Deck +@export var slots: Array[Workspace] = [] +#Workaround for bug in 4.0.3.stable +@export var slot1: Workspace +@export var slot2: Workspace +@export var slot3: Workspace +@export var slot4: Workspace func _ready(): #Workaround for bug in 4.0.3.stable - slots.append($Slot1) - slots.append($Slot2) - slots.append($Slot3) - slots.append($Slot4) + slots.append(slot1) + slots.append(slot2) + slots.append(slot3) + slots.append(slot4) func add_to_roster(node_paths): @@ -23,3 +32,9 @@ func add_to_roster(node_paths): for x in 4: if x < roster.size(): slots[x].add_worker(roster[x]) + + +func draw_client(): + var card = shift_deck.draw_card() + card.slide_to_position(position.x, position.y, 0.0, 0.3) + card.turn_front() diff --git a/Scenes/client_card.tscn b/Scenes/client_card.tscn index 0e83a86..d51ef8c 100644 --- a/Scenes/client_card.tscn +++ b/Scenes/client_card.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=9 format=3 uid="uid://c7j6lwbwgbosr"] +[gd_scene load_steps=10 format=3 uid="uid://c7j6lwbwgbosr"] [ext_resource type="Script" path="res://Scripts/client.gd" id="1_bvmvn"] [ext_resource type="Texture2D" uid="uid://dpu7jjppeja2v" path="res://Assets/task.png" id="2_k2tqp"] [ext_resource type="Texture2D" uid="uid://de0gq6h0onwex" path="res://Assets/slice.png" id="3_pxlet"] [ext_resource type="Texture2D" uid="uid://b72amudxuxo8n" path="res://Assets/hard.png" id="4_8gylx"] +[ext_resource type="Texture2D" uid="uid://bj07g3riacndc" path="res://Assets/back.png" id="4_tye4g"] [ext_resource type="Texture2D" uid="uid://ws1ghxt16a54" path="res://Assets/hardest.png" id="5_hl5js"] [sub_resource type="LabelSettings" id="LabelSettings_xciys"] @@ -14,18 +15,19 @@ shadow_size = 0 font_size = 24 [sub_resource type="RectangleShape2D" id="RectangleShape2D_70vuu"] -size = Vector2(350, 253) +size = Vector2(350, 250) [node name="Card" type="Node2D"] script = ExtResource("1_bvmvn") -[node name="Background" type="TextureRect" parent="."] +[node name="front" type="TextureRect" parent="."] +visible = false texture_filter = 1 offset_right = 350.0 offset_bottom = 250.0 texture = ExtResource("2_k2tqp") -[node name="Title" type="Label" parent="Background"] +[node name="Title" type="Label" parent="front"] modulate = Color(0, 0, 0, 1) texture_filter = 1 layout_mode = 0 @@ -38,7 +40,7 @@ horizontal_alignment = 1 vertical_alignment = 1 uppercase = true -[node name="Initial Stress" type="Label" parent="Background"] +[node name="Initial Stress" type="Label" parent="front"] modulate = Color(0, 0, 0, 1) texture_filter = 1 layout_mode = 0 @@ -51,47 +53,43 @@ horizontal_alignment = 1 vertical_alignment = 1 uppercase = true -[node name="Slice1" type="TextureRect" parent="Background"] -visible = false +[node name="Slice1" type="TextureRect" parent="front"] layout_mode = 0 -offset_left = 325.0 -offset_top = 6.0 -offset_right = 344.0 -offset_bottom = 25.0 +offset_left = 318.0 +offset_top = 12.0 +offset_right = 336.0 +offset_bottom = 30.0 texture = ExtResource("3_pxlet") -[node name="Slice2" type="TextureRect" parent="Background"] -visible = false +[node name="Slice2" type="TextureRect" parent="front"] layout_mode = 0 -offset_left = 326.0 -offset_top = 25.0 -offset_right = 345.0 -offset_bottom = 44.0 +offset_left = 318.0 +offset_top = 28.0 +offset_right = 336.0 +offset_bottom = 46.0 texture = ExtResource("3_pxlet") flip_v = true -[node name="Slice3" type="TextureRect" parent="Background"] -visible = false +[node name="Slice3" type="TextureRect" parent="front"] layout_mode = 0 -offset_left = 308.0 -offset_top = 24.0 -offset_right = 327.0 -offset_bottom = 43.0 +offset_left = 302.0 +offset_top = 28.0 +offset_right = 320.0 +offset_bottom = 46.0 texture = ExtResource("3_pxlet") flip_h = true flip_v = true -[node name="Slice4" type="TextureRect" parent="Background"] -visible = false +[node name="Slice4" type="TextureRect" parent="front"] layout_mode = 0 -offset_left = 308.0 -offset_top = 7.0 -offset_right = 327.0 -offset_bottom = 26.0 +offset_left = 302.0 +offset_top = 12.0 +offset_right = 320.0 +offset_bottom = 30.0 texture = ExtResource("3_pxlet") flip_h = true -[node name="Turns Left Counter" type="Label" parent="Background"] +[node name="Turns Left Counter" type="Label" parent="front"] layout_mode = 0 offset_left = 354.0 offset_right = 394.0 @@ -184,7 +182,7 @@ scale = Vector2(0.9, 0.9) [node name="Area2D" type="Area2D" parent="."] [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] -position = Vector2(175, 124.5) +position = Vector2(175, 125) shape = SubResource("RectangleShape2D_70vuu") [node name="Control" type="Control" parent="."] @@ -195,7 +193,6 @@ offset_right = 40.0 offset_bottom = 40.0 [node name="4turn" type="Button" parent="Control"] -visible = false layout_mode = 0 offset_left = 91.0 offset_top = 56.0 @@ -204,7 +201,6 @@ offset_bottom = 118.0 text = "4" [node name="3turn" type="Button" parent="Control"] -visible = false layout_mode = 0 offset_left = 90.0 offset_top = 131.0 @@ -213,7 +209,6 @@ offset_bottom = 193.0 text = "3" [node name="2turn" type="Button" parent="Control"] -visible = false layout_mode = 0 offset_left = 176.0 offset_top = 132.0 @@ -222,7 +217,6 @@ offset_bottom = 194.0 text = "2" [node name="1turn" type="Button" parent="Control"] -visible = false layout_mode = 0 offset_left = 176.0 offset_top = 56.0 @@ -230,6 +224,13 @@ offset_right = 240.0 offset_bottom = 118.0 text = "1" +[node name="back" type="TextureRect" parent="."] +offset_top = 250.0 +offset_right = 250.0 +offset_bottom = 600.0 +rotation = -1.5708 +texture = ExtResource("4_tye4g") + [connection signal="pressed" from="Control/4turn" to="." method="_on_turn_pressed" binds= [4]] [connection signal="pressed" from="Control/3turn" to="." method="_on_turn_pressed" binds= [3]] [connection signal="pressed" from="Control/2turn" to="." method="_on_turn_pressed" binds= [2]] diff --git a/Scenes/gameplay.tscn b/Scenes/gameplay.tscn index 636662f..06b1c6b 100644 --- a/Scenes/gameplay.tscn +++ b/Scenes/gameplay.tscn @@ -2,40 +2,63 @@ [ext_resource type="Script" path="res://Scripts/network_lobby.gd" id="1_dsni2"] -[node name="Root" type="Node2D"] +[node name="Root" type="Node2D" node_paths=PackedStringArray("username_field", "IP_field", "Port_field")] script = ExtResource("1_dsni2") +username_field = NodePath("CanvasLayer/Control/UI/Username") +IP_field = NodePath("CanvasLayer/Control/UI/IPField") +Port_field = NodePath("CanvasLayer/Control/UI/PortField") -[node name="UI" type="VBoxContainer" parent="."] -offset_right = 116.0 -offset_bottom = 136.0 +[node name="CanvasLayer" type="CanvasLayer" parent="."] -[node name="Username" type="LineEdit" parent="UI"] +[node name="Control" type="Control" parent="CanvasLayer"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="UI" type="VBoxContainer" parent="CanvasLayer/Control"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -150.0 +offset_top = -125.0 +offset_right = 150.0 +offset_bottom = 125.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Username" type="LineEdit" parent="CanvasLayer/Control/UI"] layout_mode = 2 placeholder_text = "username" alignment = 2 -[node name="IPField" type="LineEdit" parent="UI"] +[node name="IPField" type="LineEdit" parent="CanvasLayer/Control/UI"] layout_mode = 2 placeholder_text = "localhost" alignment = 2 -[node name="PortField" type="LineEdit" parent="UI"] +[node name="PortField" type="LineEdit" parent="CanvasLayer/Control/UI"] layout_mode = 2 placeholder_text = "58008" alignment = 2 -[node name="Connect" type="Button" parent="UI"] +[node name="Connect" type="Button" parent="CanvasLayer/Control/UI"] layout_mode = 2 text = "Connect" -[node name="Host" type="Button" parent="UI"] +[node name="Host" type="Button" parent="CanvasLayer/Control/UI"] layout_mode = 2 text = "Host" -[node name="SinglePlayer" type="Button" parent="UI"] +[node name="SinglePlayer" type="Button" parent="CanvasLayer/Control/UI"] layout_mode = 2 text = "SinglePlayer" -[connection signal="pressed" from="UI/Connect" to="." method="connect_to_server"] -[connection signal="pressed" from="UI/Host" to="." method="host_server"] -[connection signal="pressed" from="UI/SinglePlayer" to="." method="_on_single_player_pressed"] +[connection signal="pressed" from="CanvasLayer/Control/UI/Connect" to="." method="connect_to_server"] +[connection signal="pressed" from="CanvasLayer/Control/UI/Host" to="." method="host_server"] +[connection signal="pressed" from="CanvasLayer/Control/UI/SinglePlayer" to="." method="_on_single_player_pressed"] diff --git a/Scenes/human_player.tscn b/Scenes/human_player.tscn index 12b3475..498f07d 100644 --- a/Scenes/human_player.tscn +++ b/Scenes/human_player.tscn @@ -75,7 +75,7 @@ anchors_preset = -1 anchor_left = 0.5 anchor_right = 0.5 offset_left = -42.5 -offset_top = 21.0 +offset_top = 30.0 offset_right = 42.5 offset_bottom = 31.0 grow_horizontal = 2 @@ -107,6 +107,38 @@ size_flags_vertical = 3 [node name="LineEdit" type="LineEdit" parent="CanvasLayer/UI/VBoxContainer"] layout_mode = 2 +[node name="Hire" type="Button" parent="CanvasLayer/UI"] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +offset_left = -8.0 +offset_top = -4.0 +offset_right = -30.0 +offset_bottom = 4.0 +grow_horizontal = 0 +grow_vertical = 2 +text = "Hire Worker" + +[node name="Label" type="Label" parent="CanvasLayer/UI"] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +offset_left = -40.0 +offset_top = -11.5 +offset_right = -137.0 +offset_bottom = 11.5 +grow_horizontal = 0 +grow_vertical = 2 +text = "$50" +horizontal_alignment = 2 +vertical_alignment = 1 + [connection signal="pressed" from="CanvasLayer/UI/Confirm" to="." method="_on_confirm_pressed"] [connection signal="pressed" from="CanvasLayer/UI/HBoxContainer/LobbyReadyButton" to="." method="_on_lobby_ready_button_pressed"] [connection signal="text_submitted" from="CanvasLayer/UI/VBoxContainer/LineEdit" to="." method="_on_line_edit_text_submitted"] diff --git a/Scenes/main_menu.tscn b/Scenes/main_menu.tscn index 83657f1..1b714bb 100644 --- a/Scenes/main_menu.tscn +++ b/Scenes/main_menu.tscn @@ -13,61 +13,59 @@ script = ExtResource("1_cg0id") [node name="Title" type="Label" parent="."] layout_mode = 0 -offset_left = 94.0 -offset_top = 4.0 -offset_right = 1027.0 -offset_bottom = 183.0 -theme_override_font_sizes/font_size = 129 +offset_left = 79.0 +offset_top = 31.0 +offset_right = 603.0 +offset_bottom = 159.0 +theme_override_font_sizes/font_size = 91 text = "Lexi's Game" horizontal_alignment = 1 vertical_alignment = 1 [node name="Play Game" type="Button" parent="."] layout_mode = 0 -offset_left = 389.0 -offset_top = 187.0 -offset_right = 743.0 -offset_bottom = 350.0 -theme_override_font_sizes/font_size = 40 +offset_left = 31.0 +offset_top = 215.0 +offset_right = 281.0 +offset_bottom = 273.0 +theme_override_font_sizes/font_size = 36 text = "Play" [node name="Worker Deck" type="Button" parent="."] visible = false layout_mode = 0 -offset_left = 383.0 -offset_top = 394.0 -offset_right = 737.0 -offset_bottom = 557.0 -theme_override_font_sizes/font_size = 40 -text = "worker deck -dev tool" +offset_left = 874.0 +offset_top = 261.0 +offset_right = 1124.0 +offset_bottom = 319.0 +theme_override_font_sizes/font_size = 36 +text = "worker editor" [node name="Task Deck" type="Button" parent="."] visible = false layout_mode = 0 -offset_left = 383.0 -offset_top = 570.0 -offset_right = 737.0 -offset_bottom = 733.0 -theme_override_font_sizes/font_size = 40 -text = "task deck -dev tool" +offset_left = 874.0 +offset_top = 332.0 +offset_right = 1124.0 +offset_bottom = 390.0 +theme_override_font_sizes/font_size = 36 +text = "client editor" [node name="CheckButton" type="CheckButton" parent="."] layout_mode = 0 -offset_left = 652.0 -offset_top = 343.0 -offset_right = 696.0 -offset_bottom = 367.0 -scale = Vector2(2, 2) +offset_left = 1054.0 +offset_top = 221.0 +offset_right = 1098.0 +offset_bottom = 245.0 +scale = Vector2(1.5, 1.5) [node name="Label" type="Label" parent="."] layout_mode = 0 -offset_left = 378.0 -offset_top = 344.0 -offset_right = 642.0 -offset_bottom = 402.0 -theme_override_font_sizes/font_size = 35 +offset_left = 895.0 +offset_top = 219.0 +offset_right = 1055.0 +offset_bottom = 253.0 +theme_override_font_sizes/font_size = 22 text = "Show dev tools" horizontal_alignment = 1 vertical_alignment = 1 diff --git a/Scenes/player_board.tscn b/Scenes/player_board.tscn index 905a5f9..eb5becb 100644 --- a/Scenes/player_board.tscn +++ b/Scenes/player_board.tscn @@ -5,26 +5,34 @@ [ext_resource type="PackedScene" uid="uid://y2i3u6n1oowh" path="res://Scenes/deck.tscn" id="3_ypq4b"] [ext_resource type="PackedScene" uid="uid://baoec8cqmedf6" path="res://Scenes/worker_slot.tscn" id="4_o73ea"] -[node name="PlayerBoard" type="Node2D"] +[node name="PlayerBoard" type="Node2D" node_paths=PackedStringArray("poor_deck", "good_deck", "great_deck", "shift_deck", "slot1", "slot2", "slot3", "slot4")] script = ExtResource("1_80bvu") +poor_deck = NodePath("PoorDeck") +good_deck = NodePath("GoodDeck") +great_deck = NodePath("GreatDeck") +shift_deck = NodePath("ShiftDeck") +slot1 = NodePath("Slot1") +slot2 = NodePath("Slot2") +slot3 = NodePath("Slot3") +slot4 = NodePath("Slot4") [node name="Sprite2D" type="Sprite2D" parent="."] texture = ExtResource("2_rx76r") -[node name="ShiftDeck" parent="." instance=ExtResource("3_ypq4b")] -position = Vector2(835, -345) -type = 1 - -[node name="GreatDeck" parent="." instance=ExtResource("3_ypq4b")] -position = Vector2(85, -345) +[node name="PoorDeck" parent="." instance=ExtResource("3_ypq4b")] +position = Vector2(-855, -345) type = 1 [node name="GoodDeck" parent="." instance=ExtResource("3_ypq4b")] position = Vector2(-385, -345) type = 1 -[node name="PoorDeck" parent="." instance=ExtResource("3_ypq4b")] -position = Vector2(-855, -345) +[node name="GreatDeck" parent="." instance=ExtResource("3_ypq4b")] +position = Vector2(85, -345) +type = 1 + +[node name="ShiftDeck" parent="." instance=ExtResource("3_ypq4b")] +position = Vector2(835, -345) type = 1 [node name="Slot1" parent="." instance=ExtResource("4_o73ea")] diff --git a/Scenes/worker_card.tscn b/Scenes/worker_card.tscn index 869872e..efa8375 100644 --- a/Scenes/worker_card.tscn +++ b/Scenes/worker_card.tscn @@ -60,9 +60,9 @@ uppercase = true [node name="Capacity" type="Label" parent="Sprite2D"] modulate = Color(0, 0, 0, 1) texture_filter = 1 -offset_left = 77.0 +offset_left = 78.0 offset_top = 126.0 -offset_right = 114.0 +offset_right = 115.0 offset_bottom = 163.0 text = "99" label_settings = SubResource("LabelSettings_88ebh") @@ -71,6 +71,7 @@ vertical_alignment = 1 uppercase = true [node name="Bonus1" type="Node2D" parent="Sprite2D"] +position = Vector2(-2, 1) [node name="Icon1" type="Sprite2D" parent="Sprite2D/Bonus1"] visible = false @@ -80,6 +81,7 @@ region_enabled = true region_rect = Rect2(0, 0, 32, 32) [node name="frame1" type="Sprite2D" parent="Sprite2D/Bonus1"] +visible = false position = Vector2(-99, 145) texture = ExtResource("4_rce5w") region_rect = Rect2(0, 0, 32, 32) @@ -91,6 +93,7 @@ texture = ExtResource("5_a2bm7") region_rect = Rect2(0, 0, 32, 32) [node name="Bonus2" type="Node2D" parent="Sprite2D"] +position = Vector2(1, 1) [node name="Icon2" type="Sprite2D" parent="Sprite2D/Bonus2"] visible = false @@ -100,6 +103,7 @@ region_enabled = true region_rect = Rect2(0, 0, 32, 32) [node name="frame2" type="Sprite2D" parent="Sprite2D/Bonus2"] +visible = false position = Vector2(-52, 145) texture = ExtResource("4_rce5w") region_rect = Rect2(0, 0, 32, 32) @@ -111,6 +115,7 @@ texture = ExtResource("5_a2bm7") region_rect = Rect2(0, 0, 32, 32) [node name="Bonus3" type="Node2D" parent="Sprite2D"] +position = Vector2(3, 1) [node name="Icon3" type="Sprite2D" parent="Sprite2D/Bonus3"] visible = false @@ -120,6 +125,7 @@ region_enabled = true region_rect = Rect2(0, 0, 32, 32) [node name="frame3" type="Sprite2D" parent="Sprite2D/Bonus3"] +visible = false position = Vector2(-6, 145) texture = ExtResource("4_rce5w") region_rect = Rect2(0, 0, 32, 32) @@ -131,6 +137,7 @@ texture = ExtResource("5_a2bm7") region_rect = Rect2(0, 0, 32, 32) [node name="Bonus4" type="Node2D" parent="Sprite2D"] +position = Vector2(5, 1) [node name="Icon4" type="Sprite2D" parent="Sprite2D/Bonus4"] visible = false @@ -140,6 +147,7 @@ region_enabled = true region_rect = Rect2(0, 0, 32, 32) [node name="frame4" type="Sprite2D" parent="Sprite2D/Bonus4"] +visible = false position = Vector2(40, 145) texture = ExtResource("4_rce5w") region_rect = Rect2(0, 0, 32, 32) diff --git a/Scenes/worker_slot.tscn b/Scenes/worker_slot.tscn index 5b9a5bf..72698b6 100644 --- a/Scenes/worker_slot.tscn +++ b/Scenes/worker_slot.tscn @@ -19,7 +19,6 @@ texture = ExtResource("1_fxq0t") position = Vector2(-225, -175) [node name="CollisionShape2D" type="CollisionShape2D" parent="Worker"] -visible = false position = Vector2(125, 175) shape = SubResource("RectangleShape2D_1gv0f") @@ -27,6 +26,8 @@ shape = SubResource("RectangleShape2D_1gv0f") position = Vector2(-125, -175) [node name="CollisionShape2D" type="CollisionShape2D" parent="Client"] -visible = false position = Vector2(175, 125) shape = SubResource("RectangleShape2D_27hn2") + +[connection signal="input_event" from="Worker" to="." method="_on_area2d_input_event"] +[connection signal="input_event" from="Client" to="." method="_on_area2d_input_event"] diff --git a/Scripts/PlayerStateMachine/human_controller.gd b/Scripts/PlayerStateMachine/human_controller.gd index a76ee0e..03ab3c2 100644 --- a/Scripts/PlayerStateMachine/human_controller.gd +++ b/Scripts/PlayerStateMachine/human_controller.gd @@ -8,6 +8,7 @@ signal chat_message_submitted(String) @onready var ready_label = $CanvasLayer/UI/HBoxContainer/LobbyReadyLabel @onready var canvas = $CanvasLayer @onready var chat_box = $CanvasLayer/UI/VBoxContainer/RichTextLabel +var game_started = false func _ready() -> void: @@ -17,12 +18,12 @@ func _ready() -> void: $Camera2D.make_current() -@rpc("call_local") +@rpc("call_local", "reliable") func ready_self(): ready_button_pressed.emit(player_info["id"]) -@rpc("any_peer", "call_local") +@rpc("any_peer", "call_local", "reliable") func update_ready_label(readied_players, total_players): if readied_players == total_players: ready_label.visible = false @@ -32,6 +33,7 @@ func update_ready_label(readied_players, total_players): func _on_lobby_ready_button_pressed() -> void: rpc("ready_self") ready_button.visible = false + rpc("end_turn") func add_chat_line(line: String) -> void: @@ -55,3 +57,18 @@ func select_card(card): func _on_confirm_pressed() -> void: $CanvasLayer/UI/Confirm.visible = false rpc("confirm_draft") + + +func start_turn(): + super() + + +func select_workspace(workspace): + super(workspace) + ready_button.visible = true + + +@rpc("call_local", "reliable") +func confirm_draft(): + super() + ready_button.visible = true diff --git a/Scripts/PlayerStateMachine/player_controller.gd b/Scripts/PlayerStateMachine/player_controller.gd index 5ef6867..e6dd9d8 100644 --- a/Scripts/PlayerStateMachine/player_controller.gd +++ b/Scripts/PlayerStateMachine/player_controller.gd @@ -3,12 +3,18 @@ extends Node signal workers_discarded signal workers_kept +signal turn_finished +signal round_finished var player_info @export var hand_position: Node2D +@export var client_position: Vector2 var hand = [] var draft_picked = [] var draft_pick_amount = 0 +var reputation_points = 0 +var board: PlayerBoard +var current_client: Client func draft(cards, pick): @@ -32,7 +38,15 @@ func select_card(card): card.slide_to_position(card.position.x, card.position.y + 50.0, 0.0, 0.1) -@rpc("call_local") +func select_workspace(workspace): + if current_client == null: + return + workspace.add_client(current_client) + current_client = null + rpc("end_turn") + + +@rpc("call_local", "reliable") func confirm_draft(): var discarded_cards = [] var kept_cards = [] @@ -41,5 +55,23 @@ func confirm_draft(): discarded_cards.append(card.get_path()) else: kept_cards.append(card.get_path()) + card.card_clicked.disconnect(select_card) workers_discarded.emit(discarded_cards) workers_kept.emit(kept_cards) + draft_picked = [] + hand = [] + draft_pick_amount = 0 + + +func start_turn(): + current_client = board.shift_deck.draw_card() + if current_client == null: + round_finished.emit() + return + current_client.slide_to_position(board.global_position.x, board.global_position.y, 0.0, 0.3) + current_client.turn_front() + + +@rpc("call_local", "reliable") +func end_turn(): + turn_finished.emit() diff --git a/Scripts/client.gd b/Scripts/client.gd index 6b46713..e6d03a4 100644 --- a/Scripts/client.gd +++ b/Scripts/client.gd @@ -1,6 +1,8 @@ class_name Client extends Card +signal time_slots_selected + enum difficulties {EASY, MEDIUM, HARD} var icon_prefab = preload("res://Scenes/bonus_icon.tscn") @@ -11,10 +13,12 @@ var turns_left = 4 var time_slots = [true, true, false, true] var icon_list = [] + func _process(delta): if sliding: slide(delta) + func setup(_title, _initial_stress, _time_slots, _services): if _title != "": title = _title @@ -38,20 +42,20 @@ func setup(_title, _initial_stress, _time_slots, _services): difficulty = difficulties.MEDIUM 6, 7: difficulty = difficulties.HARD - $Background/Slice1.visible = false - $Background/Slice2.visible = false - $Background/Slice3.visible = false - $Background/Slice4.visible = false + $front/Slice1.visible = false + $front/Slice2.visible = false + $front/Slice3.visible = false + $front/Slice4.visible = false if time_slots[0] == true: - $Background/Slice1.visible = true + $front/Slice1.visible = true if time_slots[1] == true: - $Background/Slice2.visible = true + $front/Slice2.visible = true if time_slots[2] == true: - $Background/Slice3.visible = true + $front/Slice3.visible = true if time_slots[3] == true: - $Background/Slice4.visible = true - $Background/Title.text = str(title) - $"Background/Initial Stress".text = str(initial_stress) + $front/Slice4.visible = true + $front/Title.text = str(title) + $"front/Initial Stress".text = str(initial_stress) for x in icon_list: x.queue_free() icon_list = [] @@ -97,18 +101,28 @@ func setup(_title, _initial_stress, _time_slots, _services): icon_list[x].set_service(services[x]) else: icon_list[x].visible = false - + func show_time_selector(): $Control.visible = true + func update_counter(): $"Background/Turns Left Counter".text = str(turns_left) -signal time_slots_selected func _on_turn_pressed(num): turns_left = num update_counter() $Control.visible = false time_slots_selected.emit() + + +func turn_front(): + $back.visible = false + $front.visible = true + + +func turn_back(): + $back.visible = true + $front.visible = false diff --git a/Scripts/deck.gd b/Scripts/deck.gd index b1ff93d..8d93963 100644 --- a/Scripts/deck.gd +++ b/Scripts/deck.gd @@ -37,6 +37,8 @@ func _on_area_2d_mouse_exited() -> void: func draw_card() -> Card: + if cards.size() == 0: + return null return cards.pop_back() diff --git a/Scripts/game.gd b/Scripts/game.gd index 6477080..7740b5b 100644 --- a/Scripts/game.gd +++ b/Scripts/game.gd @@ -23,7 +23,10 @@ const CLIENT_DECK_SAVE_PATH = "user://client_deck.json" var networked_controllers: Array[HumanController] = [] var current_player := 0 var players: Array[PlayerController] = [] +var player_boards: Array[PlayerBoard] = [] var readied_players: Array[int] = [] +var round_number := 0 +var turn_number := 0 var _worker_scene = preload("res://Scenes/worker_card.tscn") var _client_scene = preload("res://Scenes/client_card.tscn") @@ -75,7 +78,7 @@ func _load_clients(): client_deck.shuffle() -@rpc #Called by the network lobby code +@rpc("reliable") #Called by the network lobby code func add_player(id: int, username: String, type: PlayerType) -> void: if players.size() > 4: return @@ -105,17 +108,26 @@ func add_player(id: int, username: String, type: PlayerType) -> void: player_info["id"] = id player_info["username"] = username controller.player_info = player_info + board.player_info = player_info PlayerType.BOT: controller = _bot_scene.instantiate() controller.name = str(id) controller.set_multiplayer_authority(id) board.add_child(controller) + controller.client_position = board.position + controller.board = board + board.slots[0].clicked.connect(controller.select_workspace) + board.slots[1].clicked.connect(controller.select_workspace) + board.slots[2].clicked.connect(controller.select_workspace) + board.slots[3].clicked.connect(controller.select_workspace) + board.name = "board " + str(player_boards.size()) + player_boards.append(board) players.append(controller) for player in networked_controllers: player.rpc("update_ready_label", readied_players.size(), players.size()) -@rpc("call_local", "any_peer") #called from message() by player signals +@rpc("call_local", "any_peer", "reliable") #called from message() by player signals func relay_chat_message(msg): for player in networked_controllers: player.add_chat_line(msg) @@ -128,14 +140,20 @@ func message(msg): func ready_player(id): if not readied_players.has(id): readied_players.append(id) - if readied_players.size() == players.size(): - start_game() for player in networked_controllers: player.rpc("update_ready_label", readied_players.size(), players.size()) + if readied_players.size() == players.size() and is_multiplayer_authority(): + if round_number == 0: + rpc("start_game") + else: + rpc("start_round") +@rpc("call_local", "reliable") func start_game(): #Only the host should shuffle the decks + readied_players = [] + round_number += 1 if is_multiplayer_authority(): randomize() var deck_order = [] @@ -148,19 +166,40 @@ func start_game(): rpc("send_client_order", deck_order) for player in players: rpc("draft_workers", player.player_info["username"], 4, 2) + rpc("draft_clients", player.player_info["username"]) -@rpc +@rpc("call_local", "reliable") +func start_round(): + readied_players = [] + round_number += 1 + turn_number = 0 + if is_multiplayer_authority(): + rpc("start_turn") + + +@rpc("call_local", "reliable") +func start_turn(): + turn_number += 1 + for x in players.size(): + #players[x].rpc("start_turn") + players[x].start_turn() + await players[x].turn_finished + if is_multiplayer_authority(): + rpc("start_turn") + + +@rpc("reliable") func send_worker_order(node_paths): worker_deck.order(node_paths) -@rpc +@rpc("reliable") func send_client_order(node_paths): client_deck.order(node_paths) -@rpc("call_local") +@rpc("call_local", "reliable") func draft_workers(player, draw_amount, pick_amount): var cards = [] for x in draw_amount: @@ -170,8 +209,24 @@ func draft_workers(player, draw_amount, pick_amount): x.draft(cards, pick_amount) -@rpc("call_local") +@rpc("call_local", "reliable") func discard_workers(node_paths): for path in node_paths: var card = get_node(path) worker_discard.place(card) + + +@rpc("call_local", "reliable") +func draft_clients(player): + var cards = [] + for x in 2 + (2 * round_number): + cards.append(client_deck.draw_card()) + for x in player_boards: + if x.player_info["username"] == player: + for card in cards: + x.shift_deck.place(card) + + +@rpc("call_local", "reliable") +func discard_clients(_node_paths): + pass diff --git a/Scripts/network_lobby.gd b/Scripts/network_lobby.gd index b57670c..382df75 100644 --- a/Scripts/network_lobby.gd +++ b/Scripts/network_lobby.gd @@ -13,19 +13,23 @@ var enet_peer = ENetMultiplayerPeer.new() var game : Game var players_connected = 0 +@export var username_field: LineEdit +@export var IP_field: LineEdit +@export var Port_field: LineEdit + func _ready() -> void: game = game_scene.instantiate() as Game func host_server() -> void: - if $UI/Username.text == "": + if username_field.text == "": return - $UI.visible = false + $CanvasLayer/Control/UI.visible = false enet_peer.create_server(SERVER_PORT, MAX_PLAYERS) multiplayer.multiplayer_peer = enet_peer add_child(game) - player_info[1] = $UI/Username.text + player_info[1] = username_field.text add_player(1, player_info[1]) multiplayer.peer_connected.connect( @@ -35,15 +39,15 @@ func host_server() -> void: func connect_to_server() -> void: - if $UI/Username.text == "": + if username_field.text == "": return - $UI.visible = false - var ip = $UI/IPField.text if $UI/IPField.text != "" else $UI/IPField.placeholder_text - var port = $UI/PortField.text if $UI/PortField.text != "" else $UI/PortField.placeholder_text + $CanvasLayer/Control/UI.visible = false + var ip = IP_field.text if IP_field.text != "" else IP_field.placeholder_text + var port = Port_field.text if Port_field.text != "" else Port_field.placeholder_text enet_peer.create_client(ip, int(port)) multiplayer.multiplayer_peer = enet_peer add_child(game) - player_info[multiplayer.get_unique_id()] = $UI/Username.text + player_info[multiplayer.get_unique_id()] = username_field.text func add_player(peer_id, username): @@ -51,12 +55,12 @@ func add_player(peer_id, username): game.add_player(peer_id, username, game.PlayerType.HUMAN) -@rpc("any_peer") +@rpc("any_peer", "reliable") func add_new_player(peer_id, username): add_player(peer_id, username) -@rpc +@rpc("reliable") func add_previous_players(players): for key in players: if players[key] == player_info[multiplayer.get_unique_id()]: diff --git a/Scripts/worker_slot.gd b/Scripts/worker_slot.gd index c80d183..449f8e0 100644 --- a/Scripts/worker_slot.gd +++ b/Scripts/worker_slot.gd @@ -1,5 +1,8 @@ +class_name Workspace extends Node2D +signal clicked(Workspace) + var worker: Worker var client: Client @@ -20,3 +23,8 @@ func add_client(card: Client) -> bool: client = card client.slide_to_position(_c_pos.x, _c_pos.y, 0, 0.2) return true + + +func _on_area2d_input_event(_viewport: Node, event: InputEvent, _shape_idx: int) -> void: + if event is InputEventMouseButton and event.pressed and worker != null: + emit_signal("clicked", self) diff --git a/ideas.txt b/ideas.txt index c8ced99..32361b5 100644 --- a/ideas.txt +++ b/ideas.txt @@ -9,6 +9,9 @@ stress inducing session needs to be longer so the same worker needs to remain oc you more to do on your turn because you get to decide what all your little workers do rather than them only being interacted with when you're placing down a client card +yeah there should be a system for doing something with ur workers each turn, like u do a service and it gives +u some client happiness with determines which deck they discard to, and gives u overall reputation points + the roster system is kind of fucked if you start with 2/4 cards and dont get new ones often like, you would never have any in reserve, but do u need any? idk figure it out