From 1980139acb286173ade1fe8264a1c1669f82ea88 Mon Sep 17 00:00:00 2001 From: Joseph Manley Date: Mon, 1 Jun 2020 01:58:19 -0400 Subject: [PATCH] Added basic elevator system --- ...r.png-fe767a41ebb2e92445e76edbb2e18f7a.md5 | 3 + ....png-fe767a41ebb2e92445e76edbb2e18f7a.stex | Bin 0 -> 136 bytes ...n.png-77644fd41dc75c8e32a225dd140c8b38.md5 | 3 + ....png-77644fd41dc75c8e32a225dd140c8b38.stex | Bin 0 -> 227 bytes ...r.png-c8a525f29a53c56da780c1ade7c02552.md5 | 3 + ....png-c8a525f29a53c56da780c1ade7c02552.stex | Bin 0 -> 138 bytes ...r.png-6104b47e90854ba939097ca22c392814.md5 | 3 + ....png-6104b47e90854ba939097ca22c392814.stex | Bin 0 -> 429 bytes .../elevator/elevator-button-color.png | Bin 0 -> 97 bytes .../elevator/elevator-button-color.png.import | 34 ++++ .../Objects/elevator/elevator-button.aseprite | Bin 0 -> 772 bytes .../Art/Objects/elevator/elevator-button.png | Bin 0 -> 185 bytes .../elevator/elevator-button.png.import | 34 ++++ .../Objects/elevator/elevator-door.aseprite | Bin 0 -> 572 bytes .../Art/Objects/elevator/elevator-door.png | Bin 0 -> 106 bytes .../Objects/elevator/elevator-door.png.import | 34 ++++ .../Art/Objects/elevator/elevator.aseprite | Bin 0 -> 944 bytes .../Assets/Art/Objects/elevator/elevator.png | Bin 0 -> 316 bytes .../Art/Objects/elevator/elevator.png.import | 34 ++++ client/Nodes/Door.tscn | 48 +++-- client/Nodes/Elevator.tscn | 42 +++++ client/Nodes/ElevatorButton.tscn | 67 +++++++ client/Nodes/ElevatorDoor.tscn | 174 ++++++++++++++++++ client/Nodes/GUI.tscn | 30 +++ client/Nodes/Player.tscn | 2 + client/Nodes/Wall Light.tscn | 2 - client/Scenes/Dev.tscn | 27 ++- client/Scenes/World.scn | Bin 11883 -> 12727 bytes client/Scripts/Component/ElevatorControls.gd | 4 + client/Scripts/Entities/Door.gd | 38 ++-- client/Scripts/Entities/Elevator.gd | 62 +++++++ client/Scripts/Entities/ElevatorButton.gd | 20 ++ client/Scripts/Entities/ElevatorDoor.gd | 10 + client/Scripts/Entities/Player.gd | 20 +- client/Scripts/Entities/Wall Light.gd | 2 + client/Scripts/Systems/GameGui.gd | 17 ++ 36 files changed, 657 insertions(+), 56 deletions(-) create mode 100644 client/.import/elevator-button-color.png-fe767a41ebb2e92445e76edbb2e18f7a.md5 create mode 100644 client/.import/elevator-button-color.png-fe767a41ebb2e92445e76edbb2e18f7a.stex create mode 100644 client/.import/elevator-button.png-77644fd41dc75c8e32a225dd140c8b38.md5 create mode 100644 client/.import/elevator-button.png-77644fd41dc75c8e32a225dd140c8b38.stex create mode 100644 client/.import/elevator-door.png-c8a525f29a53c56da780c1ade7c02552.md5 create mode 100644 client/.import/elevator-door.png-c8a525f29a53c56da780c1ade7c02552.stex create mode 100644 client/.import/elevator.png-6104b47e90854ba939097ca22c392814.md5 create mode 100644 client/.import/elevator.png-6104b47e90854ba939097ca22c392814.stex create mode 100644 client/Assets/Art/Objects/elevator/elevator-button-color.png create mode 100644 client/Assets/Art/Objects/elevator/elevator-button-color.png.import create mode 100644 client/Assets/Art/Objects/elevator/elevator-button.aseprite create mode 100644 client/Assets/Art/Objects/elevator/elevator-button.png create mode 100644 client/Assets/Art/Objects/elevator/elevator-button.png.import create mode 100644 client/Assets/Art/Objects/elevator/elevator-door.aseprite create mode 100644 client/Assets/Art/Objects/elevator/elevator-door.png create mode 100644 client/Assets/Art/Objects/elevator/elevator-door.png.import create mode 100644 client/Assets/Art/Objects/elevator/elevator.aseprite create mode 100644 client/Assets/Art/Objects/elevator/elevator.png create mode 100644 client/Assets/Art/Objects/elevator/elevator.png.import create mode 100644 client/Nodes/Elevator.tscn create mode 100644 client/Nodes/ElevatorButton.tscn create mode 100644 client/Nodes/ElevatorDoor.tscn create mode 100644 client/Scripts/Component/ElevatorControls.gd create mode 100644 client/Scripts/Entities/Elevator.gd create mode 100644 client/Scripts/Entities/ElevatorButton.gd create mode 100644 client/Scripts/Entities/ElevatorDoor.gd diff --git a/client/.import/elevator-button-color.png-fe767a41ebb2e92445e76edbb2e18f7a.md5 b/client/.import/elevator-button-color.png-fe767a41ebb2e92445e76edbb2e18f7a.md5 new file mode 100644 index 0000000..5af58b3 --- /dev/null +++ b/client/.import/elevator-button-color.png-fe767a41ebb2e92445e76edbb2e18f7a.md5 @@ -0,0 +1,3 @@ +source_md5="ac15d19b18183939f2cb938b48b83391" +dest_md5="0983b74d7b93c756eb0c5a98b4157abd" + diff --git a/client/.import/elevator-button-color.png-fe767a41ebb2e92445e76edbb2e18f7a.stex b/client/.import/elevator-button-color.png-fe767a41ebb2e92445e76edbb2e18f7a.stex new file mode 100644 index 0000000000000000000000000000000000000000..8d5bdf16e37e1d9b76e82d8429fa212eb453a25d GIT binary patch literal 136 zcmZ>F2@c_4U|;}Y2oPXr1Tu1fIKaF2@VlpU|`??Vh9jmX9O~i195<#yFw?B;N_Cy0&;mhJzRo-G*~$Y8<6#(tbRI> zVk{1FcVbv~PUa<$Q|syC7@{#Txrc{4DFFx`6vduC00bX$%MF;#6cm&Wf_V?ma*Gs- zY5bL6t;fdZ=Jd&cS>l@xXY-~Rk`h3$=E(m=EAEtiH4UrW!PwNbYeic9?uJ80Rr$>y z{QY}+1=o?lojabae9q)+!ux_@y3H8|w>6tM8iM5*Ld6s>Dtuc8aw3DLtDnm{r-UW| DOF&DQ literal 0 HcmV?d00001 diff --git a/client/.import/elevator-door.png-c8a525f29a53c56da780c1ade7c02552.md5 b/client/.import/elevator-door.png-c8a525f29a53c56da780c1ade7c02552.md5 new file mode 100644 index 0000000..21793aa --- /dev/null +++ b/client/.import/elevator-door.png-c8a525f29a53c56da780c1ade7c02552.md5 @@ -0,0 +1,3 @@ +source_md5="a43d1da157f5981d7d307fa0f05c7144" +dest_md5="de067c565a3ab4762ae06714e45fe0ae" + diff --git a/client/.import/elevator-door.png-c8a525f29a53c56da780c1ade7c02552.stex b/client/.import/elevator-door.png-c8a525f29a53c56da780c1ade7c02552.stex new file mode 100644 index 0000000000000000000000000000000000000000..bc6e4878817febbedccbe1b9557a7ef38299872d GIT binary patch literal 138 zcmZ>F2@YXqU|QSo$f4B?oWd}mMP=XzCD)wb&I?+gtL6&e>F-C6!#ju`|P-s^B& U>ROg^2&kUH)78&qol`;+0KwWJZvX%Q literal 0 HcmV?d00001 diff --git a/client/.import/elevator.png-6104b47e90854ba939097ca22c392814.md5 b/client/.import/elevator.png-6104b47e90854ba939097ca22c392814.md5 new file mode 100644 index 0000000..51835b4 --- /dev/null +++ b/client/.import/elevator.png-6104b47e90854ba939097ca22c392814.md5 @@ -0,0 +1,3 @@ +source_md5="3cacd4765fc525e57c7258a4805508e6" +dest_md5="2dab7bdfa7f0fc281860167c39ed10b6" + diff --git a/client/.import/elevator.png-6104b47e90854ba939097ca22c392814.stex b/client/.import/elevator.png-6104b47e90854ba939097ca22c392814.stex new file mode 100644 index 0000000000000000000000000000000000000000..8722869af5d9007cef332d19f6a46a0c56c2b5f7 GIT binary patch literal 429 zcmZ>F2@X+UU|>)KVh9jmX9O}P0*L@WcZE(M!OJDZ1r*}-^l%9R(h5MV#=!<8mnzSE z38WZ{gWR1M)}509av0q`T^vIqTHnqv^g7}o(zgFZM&?q3UXIK=!7lm>ywN(ZWY5xe^7QZhHf;CKutZMN6`aDv zaX8?}9u2OhRjX38CoI#9$`<^*N#~|eVV`#@b*ZhrMq+k5x^=s9ffjJbdJ`?0f&BW*igRm@*z z#&O~L-eV_f?OB9WJcTwNo3L1$fQ8KG!x*PK;rX{M;FL`_tEK)jKDBgz-popk9O~^Mb8z%+tlw8Qy$m%Q&^k z#6kLq`tncr7|PC1*!uBRHTxsh3)3rte?I#y-X2`Y@RPgC=Dh3rj49F{FS+%X#4Sq| StX>QZUj|QCKbLh*2~7YlLZ!$6 literal 0 HcmV?d00001 diff --git a/client/Assets/Art/Objects/elevator/elevator-button-color.png b/client/Assets/Art/Objects/elevator/elevator-button-color.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ce63a1d413212d7628a70e10c0c54a389ad761 GIT binary patch literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|q&;06LnNjq tCoHhi(9`=D9~1LO{#g2=eWF*`85|z7Y_3&Gb_ObA@O1TaS?83{1OO4`8LIebzfQNo;>#HPy`F;y`#zZcISAvcI_!RyfCCeqFg(x-jes8pgELUSI}1k> z-(fUw!m&?3;P&nzG%1n%+X75Ko`)0hIJ`3yhRK@?@Qq=>;&2pxdGrxxmTtp^Dcy{7 z0K4_w6$1{z3DCzKaja3s7gRUW(>Mfy}5L5JXRcS#bqaY_65VY~<$1OOq`G7_Bv=+z6 zGdv&=_NYEE=T_NQ)3C}Nj7?p;R^GMg(rj0v(Czpy1=Md bxrvdX<$>BU$HIhGp!E!%u6{1-oD!M<>PkUz literal 0 HcmV?d00001 diff --git a/client/Assets/Art/Objects/elevator/elevator-button.png.import b/client/Assets/Art/Objects/elevator/elevator-button.png.import new file mode 100644 index 0000000..b5f4c32 --- /dev/null +++ b/client/Assets/Art/Objects/elevator/elevator-button.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/elevator-button.png-77644fd41dc75c8e32a225dd140c8b38.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Art/Objects/elevator/elevator-button.png" +dest_files=[ "res://.import/elevator-button.png-77644fd41dc75c8e32a225dd140c8b38.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/client/Assets/Art/Objects/elevator/elevator-door.aseprite b/client/Assets/Art/Objects/elevator/elevator-door.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..d3c04ad486008908d42a59eb3dcbd2d2a6bef30d GIT binary patch literal 572 zcmb`Fu}eZx6o-%5!$rs`Xz~^jZK;JK2}0144dS3gLxm;y2BU~bgoX$N7ndMXhlZLe z8iSCQ#%K<6u%OnU+A6wz?^);{(1H7L-nnpp-+kOjkI2KZL!9CfB@Pi;W_600HDuS* z8UABe=k$+P!%j6gx1Z%wc4Sw|J^g@EzY}lQj@@dJAvFP~MKX!Qiqg{-~T8h@~3}fN~xI$$iYfyQlu;{fqgDxe@?WrjTTP%)Q3QUd*Msq(8=UC54$k~60I!Yh1No;$u<)`6EUPtuI`_uGXlC=M9}$S6zm_G1w|B5OSlVcI(-(b<$3U6MLFno1i%in8H`uDz(HRW6t3_s+1vC2#}i!yV$VhBAC13sY#q5rVLT8oVF{Bj}`DL=hHHKt95ej96qM z5NU|grjnQv{990<93A6@qq-a1hNf%> z_luj1)|~HiPU-qzJxO}&W`yXN@6?x<>nfvt`@1vViSw<(ygeuyj_ytD$p31PTvVi? eJlO@+q=d`l%|^FEwYp(voUM7DMpq86Ecp#b_Y80V literal 0 HcmV?d00001 diff --git a/client/Assets/Art/Objects/elevator/elevator.png b/client/Assets/Art/Objects/elevator/elevator.png new file mode 100644 index 0000000000000000000000000000000000000000..46b175d1ebbeae958122888217900371dcea808e GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^3P7yJ!3HFkD$jfgq!^2X+?^QKos$7^zInPhhD5Z! zone@D*g?Q`{u!0Iv8oIF796v4edE33tmmGq&)BTG^d`7npTKR-ZD@33f)dA^Lu-Uv zxKAqibp5<~Xw!fDX}ZtygQh)|bmerI_gw2?Y3yVZ-^JC;u7MMlt@NtkXzcX*r0=N` z$eeNe+RCNO7SGLQ-F%gQfPn`IxiO}k{%RS$&RtY`=koxWl+$;a8P@A}^EQ0{_tu{= zX+y`4$B%{E-&!-w|2%bm?c2h4Mi2QJJ==PoDm`kwvNPgXIr+UP=l1{$6og zF}a}JzU9L0;5^Cx(D?oJfqqvRzu0T6S{3wn(Zn4WE}64`4q)T1GZzMi0E4HipUXO@ GgeCxjzJhxI literal 0 HcmV?d00001 diff --git a/client/Assets/Art/Objects/elevator/elevator.png.import b/client/Assets/Art/Objects/elevator/elevator.png.import new file mode 100644 index 0000000..18abc34 --- /dev/null +++ b/client/Assets/Art/Objects/elevator/elevator.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/elevator.png-6104b47e90854ba939097ca22c392814.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Art/Objects/elevator/elevator.png" +dest_files=[ "res://.import/elevator.png-6104b47e90854ba939097ca22c392814.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/client/Nodes/Door.tscn b/client/Nodes/Door.tscn index 35ca62c..381f3d3 100644 --- a/client/Nodes/Door.tscn +++ b/client/Nodes/Door.tscn @@ -5,31 +5,28 @@ [ext_resource path="res://Scripts/Entities/Door.gd" type="Script" id=3] [ext_resource path="res://Assets/Art/32x32mask.png" type="Texture" id=5] - - -[sub_resource type="RectangleShape2D" id=7] +[sub_resource type="RectangleShape2D" id=1] extents = Vector2( 16.0007, 15.9043 ) -[sub_resource type="AtlasTexture" id=1] -atlas = ExtResource( 1 ) -region = Rect2( 0, 0, 32, 32 ) - -[sub_resource type="OccluderPolygon2D" id=8] -polygon = PoolVector2Array( -5, 18, -5, 0, -2, 0, -2, 4, 2, 4, 2, 0, 5, 0, 5, 18 ) - [sub_resource type="AtlasTexture" id=2] atlas = ExtResource( 1 ) +region = Rect2( 0, 0, 32, 32 ) + +[sub_resource type="OccluderPolygon2D" id=3] +polygon = PoolVector2Array( -5, 18, -5, 0, -2, 0, -2, 4, 2, 4, 2, 0, 5, 0, 5, 18 ) + +[sub_resource type="AtlasTexture" id=4] +atlas = ExtResource( 1 ) region = Rect2( 0, 32, 32, 32 ) -[sub_resource type="AtlasTexture" id=3] +[sub_resource type="AtlasTexture" id=5] atlas = ExtResource( 1 ) region = Rect2( 0, 64, 32, 32 ) -[sub_resource type="OccluderPolygon2D" id=9] +[sub_resource type="OccluderPolygon2D" id=6] polygon = PoolVector2Array( 5, -18, 5, 0, -5, 0, -5, -18 ) -[sub_resource type="Animation" id=5] -resource_name = "Close" +[sub_resource type="Animation" id=7] length = 0.5 tracks/0/type = "bezier" tracks/0/path = NodePath("Top:position:x") @@ -92,8 +89,7 @@ tracks/5/keys = { "times": PoolRealArray( 0, 0.5 ) } -[sub_resource type="Animation" id=4] -resource_name = "Open" +[sub_resource type="Animation" id=8] length = 0.5 tracks/0/type = "bezier" tracks/0/path = NodePath("Bottom:position:x") @@ -156,7 +152,7 @@ tracks/5/keys = { "times": PoolRealArray( 0, 0.5 ) } -[sub_resource type="RectangleShape2D" id=6] +[sub_resource type="RectangleShape2D" id=9] extents = Vector2( 40.2987, 16.0621 ) [node name="Door" type="Area2D"] @@ -165,31 +161,31 @@ script = ExtResource( 3 ) [node name="StaticBody2D" type="StaticBody2D" parent="."] [node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"] -shape = SubResource( 7 ) +shape = SubResource( 1 ) [node name="Bottom" type="Sprite" parent="."] z_index = 25 -texture = SubResource( 1 ) +texture = SubResource( 2 ) [node name="LightOccluder2D" type="LightOccluder2D" parent="Bottom"] -occluder = SubResource( 8 ) +occluder = SubResource( 3 ) [node name="Top" type="Sprite" parent="."] z_index = 25 -texture = SubResource( 2 ) +texture = SubResource( 4 ) [node name="Color" type="Sprite" parent="Top"] -texture = SubResource( 3 ) +texture = SubResource( 5 ) [node name="LightOccluder2D" type="LightOccluder2D" parent="Top"] -occluder = SubResource( 9 ) +occluder = SubResource( 6 ) [node name="AnimationPlayer" type="AnimationPlayer" parent="."] -anims/Close = SubResource( 5 ) -anims/Open = SubResource( 4 ) +anims/Close = SubResource( 7 ) +anims/Open = SubResource( 8 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="."] -shape = SubResource( 6 ) +shape = SubResource( 9 ) [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] stream = ExtResource( 2 ) diff --git a/client/Nodes/Elevator.tscn b/client/Nodes/Elevator.tscn new file mode 100644 index 0000000..95db94d --- /dev/null +++ b/client/Nodes/Elevator.tscn @@ -0,0 +1,42 @@ +[gd_scene load_steps=6 format=2] + +[ext_resource path="res://Assets/Art/Objects/elevator/elevator.png" type="Texture" id=1] +[ext_resource path="res://Scripts/Entities/Elevator.gd" type="Script" id=2] +[ext_resource path="res://Scripts/Component/ElevatorControls.gd" type="Script" id=3] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 16, 2 ) + +[sub_resource type="RectangleShape2D" id=2] +extents = Vector2( 10, 16 ) + +[node name="Elevator" type="Node2D"] +script = ExtResource( 2 ) +__meta__ = { +"_edit_group_": true +} + +[node name="Sprite" type="Sprite" parent="."] +texture = ExtResource( 1 ) + +[node name="Bottom" type="StaticBody2D" parent="."] +position = Vector2( 0, 18 ) +collision_layer = 2 +collision_mask = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Bottom"] +shape = SubResource( 1 ) + +[node name="Top" type="StaticBody2D" parent="."] +position = Vector2( 0, -18 ) +collision_layer = 2 +collision_mask = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Top"] +shape = SubResource( 1 ) + +[node name="ElevatorControls" type="Area2D" parent="."] +script = ExtResource( 3 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="ElevatorControls"] +shape = SubResource( 2 ) diff --git a/client/Nodes/ElevatorButton.tscn b/client/Nodes/ElevatorButton.tscn new file mode 100644 index 0000000..e06c9bb --- /dev/null +++ b/client/Nodes/ElevatorButton.tscn @@ -0,0 +1,67 @@ +[gd_scene load_steps=8 format=2] + +[ext_resource path="res://Assets/Art/Objects/elevator/elevator-button-color.png" type="Texture" id=1] +[ext_resource path="res://Scripts/Entities/ElevatorButton.gd" type="Script" id=2] +[ext_resource path="res://Assets/Art/Objects/elevator/elevator-button.png" type="Texture" id=3] + +[sub_resource type="AtlasTexture" id=1] +atlas = ExtResource( 3 ) +region = Rect2( 0, 0, 16, 8 ) + +[sub_resource type="CircleShape2D" id=2] +radius = 16.0 + +[sub_resource type="Animation" id=3] +resource_name = "Done" +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 1 ] +} + +[sub_resource type="Animation" id=4] +resource_name = "Waiting" +length = 0.4 +loop = true +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ 1, 0 ] +} + +[node name="ElevatorButton" type="Area2D"] +script = ExtResource( 2 ) +__meta__ = { +"_edit_group_": true +} + +[node name="Sprite" type="Sprite" parent="."] +texture = SubResource( 1 ) +hframes = 2 +frame = 1 + +[node name="Color" type="Sprite" parent="."] +modulate = Color( 0.0941176, 1, 0.14902, 1 ) +texture = ExtResource( 1 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 2 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +anims/Done = SubResource( 3 ) +anims/Waiting = SubResource( 4 ) diff --git a/client/Nodes/ElevatorDoor.tscn b/client/Nodes/ElevatorDoor.tscn new file mode 100644 index 0000000..c296cb3 --- /dev/null +++ b/client/Nodes/ElevatorDoor.tscn @@ -0,0 +1,174 @@ +[gd_scene load_steps=9 format=2] + +[ext_resource path="res://Assets/Art/Objects/elevator/elevator-door.png" type="Texture" id=1] +[ext_resource path="res://Assets/Sfx/door.wav" type="AudioStream" id=2] +[ext_resource path="res://Scripts/Entities/ElevatorDoor.gd" type="Script" id=3] +[ext_resource path="res://Assets/Art/32x32mask.png" type="Texture" id=5] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 1.65761, 15.9043 ) + +[sub_resource type="Animation" id=7] +length = 0.3 +tracks/0/type = "bezier" +tracks/0/path = NodePath("Top:position:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"points": PoolRealArray( 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 0.3 ) +} +tracks/1/type = "bezier" +tracks/1/path = NodePath("Top:position:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"points": PoolRealArray( -24, -0.25, 0, 0.25, 0, -8, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 0.3 ) +} +tracks/2/type = "bezier" +tracks/2/path = NodePath("Top:rotation_degrees") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"points": PoolRealArray( 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 0.3 ) +} +tracks/3/type = "bezier" +tracks/3/path = NodePath("Bottom:position:x") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"points": PoolRealArray( 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 0.3 ) +} +tracks/4/type = "bezier" +tracks/4/path = NodePath("Bottom:position:y") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"points": PoolRealArray( 24, -0.25, 0, 0.25, 0, 8, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 0.3 ) +} +tracks/5/type = "bezier" +tracks/5/path = NodePath("Bottom:rotation_degrees") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"points": PoolRealArray( 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 0.3 ) +} + +[sub_resource type="Animation" id=8] +length = 0.3 +tracks/0/type = "bezier" +tracks/0/path = NodePath("Bottom:position:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"points": PoolRealArray( 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 0.3 ) +} +tracks/1/type = "bezier" +tracks/1/path = NodePath("Bottom:position:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"points": PoolRealArray( 8, -0.25, 0, 0.25, 0, 24, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 0.3 ) +} +tracks/2/type = "bezier" +tracks/2/path = NodePath("Bottom:rotation_degrees") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"points": PoolRealArray( 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 0.3 ) +} +tracks/3/type = "bezier" +tracks/3/path = NodePath("Top:position:x") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"points": PoolRealArray( 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 0.3 ) +} +tracks/4/type = "bezier" +tracks/4/path = NodePath("Top:position:y") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"points": PoolRealArray( -8, -0.25, 0, 0.25, 0, -24, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 0.3 ) +} +tracks/5/type = "bezier" +tracks/5/path = NodePath("Top:rotation_degrees") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"points": PoolRealArray( 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 0.3 ) +} + +[sub_resource type="RectangleShape2D" id=9] +extents = Vector2( 14.4443, 16.0621 ) + +[node name="ElevatorDoor" type="Area2D"] +script = ExtResource( 3 ) + +[node name="StaticBody2D" type="StaticBody2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"] +shape = SubResource( 1 ) + +[node name="Bottom" type="Sprite" parent="."] +position = Vector2( 0, 8 ) +scale = Vector2( 1, -1 ) +z_index = 25 +texture = ExtResource( 1 ) + +[node name="Top" type="Sprite" parent="."] +position = Vector2( 0, -8 ) +z_index = 25 +texture = ExtResource( 1 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +anims/Close = SubResource( 7 ) +anims/Open = SubResource( 8 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 9 ) + +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource( 2 ) +bus = "Sfx" + +[node name="Mask" type="Light2D" parent="."] +enabled = false +texture = ExtResource( 5 ) +mode = 3 +range_item_cull_mask = 2 diff --git a/client/Nodes/GUI.tscn b/client/Nodes/GUI.tscn index dac1307..ec483f0 100644 --- a/client/Nodes/GUI.tscn +++ b/client/Nodes/GUI.tscn @@ -20,6 +20,7 @@ font_data = ExtResource( 5 ) script = ExtResource( 2 ) [node name="Dialog" type="Control" parent="."] +visible = false anchor_left = 0.5 anchor_top = 1.0 anchor_right = 0.5 @@ -99,6 +100,7 @@ margin_bottom = 31.0 text = "Choice" [node name="ZoneLabel" type="Label" parent="."] +visible = false anchor_top = 1.0 anchor_bottom = 1.0 margin_left = 12.0 @@ -113,6 +115,7 @@ __meta__ = { } [node name="Tip" type="Label" parent="."] +visible = false anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 @@ -139,3 +142,30 @@ __meta__ = { "_edit_use_anchors_": false } start_with_fade_in = false + +[node name="ElevatorDialog" type="WindowDialog" parent="."] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -125.5 +margin_top = -132.0 +margin_right = 125.5 +margin_bottom = 132.0 +theme = ExtResource( 1 ) +window_title = "Elevator" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Buttons" type="VBoxContainer" parent="ElevatorDialog"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 6.0 +margin_top = 6.0 +margin_right = -6.0 +margin_bottom = -6.0 +alignment = 1 +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/client/Nodes/Player.tscn b/client/Nodes/Player.tscn index 0219ac4..0061bb2 100644 --- a/client/Nodes/Player.tscn +++ b/client/Nodes/Player.tscn @@ -1801,6 +1801,8 @@ atlas = ExtResource( 2 ) region = Rect2( 3, 19, 1, 2 ) [node name="Player" type="KinematicBody2D"] +collision_layer = 3 +collision_mask = 3 script = ExtResource( 4 ) [node name="AnimationPlayer" type="AnimationPlayer" parent="."] diff --git a/client/Nodes/Wall Light.tscn b/client/Nodes/Wall Light.tscn index 26cac9b..1ad3f75 100644 --- a/client/Nodes/Wall Light.tscn +++ b/client/Nodes/Wall Light.tscn @@ -5,8 +5,6 @@ [ext_resource path="res://Scripts/Component/LightLoader.gd" type="Script" id=3] [ext_resource path="res://Scripts/Entities/Wall Light.gd" type="Script" id=4] - - [sub_resource type="CircleShape2D" id=1] radius = 200.0 diff --git a/client/Scenes/Dev.tscn b/client/Scenes/Dev.tscn index 15d5c43..ea441a8 100644 --- a/client/Scenes/Dev.tscn +++ b/client/Scenes/Dev.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=13 format=2] +[gd_scene load_steps=16 format=2] [ext_resource path="res://Nodes/Tiles/tileset_science_lab.tres" type="TileSet" id=1] [ext_resource path="res://Nodes/NPCs/CEO.tscn" type="PackedScene" id=2] @@ -10,9 +10,12 @@ [ext_resource path="res://Nodes/NPCs/Soldier.tscn" type="PackedScene" id=8] [ext_resource path="res://Scripts/Component/Killbox.gd" type="Script" id=9] [ext_resource path="res://Scripts/Component/Savebox.gd" type="Script" id=10] +[ext_resource path="res://Nodes/Elevator.tscn" type="PackedScene" id=11] +[ext_resource path="res://Nodes/ElevatorDoor.tscn" type="PackedScene" id=12] +[ext_resource path="res://Nodes/ElevatorButton.tscn" type="PackedScene" id=13] [sub_resource type="RectangleShape2D" id=1] -extents = Vector2( 32.0304, 21.0266 ) +extents = Vector2( 1374.82, 21.0266 ) [sub_resource type="RectangleShape2D" id=2] extents = Vector2( 10, 15.1479 ) @@ -23,7 +26,7 @@ extents = Vector2( 10, 15.1479 ) tile_set = ExtResource( 1 ) cell_size = Vector2( 16, 16 ) format = 1 -tile_data = PoolIntArray( 327676, 53, 4, 327677, 53, 196609, 327678, 53, 196609, 327679, 53, 196609, 262144, 53, 7, 393212, 53, 65539, 393213, 52, 0, 393214, 52, 1, 393215, 52, 2, 327680, 53, 65539, 458748, 53, 65539, 458749, 52, 131072, 458750, 52, 131073, 458751, 52, 131074, 393216, 53, 65539, 393217, 49, 0, 393218, 49, 0, 393219, 49, 0, 393220, 49, 0, 393221, 49, 0, 524260, 49, 0, 524261, 49, 0, 524262, 49, 0, 524263, 49, 0, 524264, 49, 0, 524265, 49, 0, 524266, 49, 0, 524267, 49, 0, 524268, 49, 0, 524269, 49, 0, 524270, 49, 0, 524271, 49, 0, 524272, 48, 0, 524273, 48, 0, 524274, 48, 0, 524275, 49, 0, 524276, 49, 0, 524277, 49, 0, 524278, 49, 0, 524279, 49, 0, 524280, 49, 0, 524281, 49, 0, 524282, 49, 0, 524283, 49, 0, 524284, 53, 131075, 524285, 47, 3, 524286, 48, 0, 524287, 47, 3, 458752, 53, 131075, 458753, 49, 0, 458754, 52, 0, 458755, 52, 2, 458756, 49, 0, 458757, 49, 0, 589796, 49, 0, 589797, 49, 0, 589798, 49, 0, 589799, 49, 0, 589800, 49, 0, 589801, 49, 0, 589802, 49, 0, 589803, 49, 0, 589804, 49, 0, 589805, 49, 0, 589806, 49, 0, 589807, 49, 0, 589808, 48, 0, 589809, 49, 0, 589810, 49, 0, 589811, 53, 196608, 589812, 53, 6, 589813, 53, 5, 589814, 53, 196610, 589815, 49, 0, 589816, 49, 0, 589817, 49, 0, 589818, 49, 0, 589819, 49, 0, 589820, 49, 0, 589821, 47, 65539, 589822, 48, 0, 589823, 47, 65539, 524288, 49, 0, 524289, 49, 0, 524290, 52, 65536, 524291, 52, 65538, 524292, 49, 0, 524293, 49, 0, 655332, 49, 0, 655333, 49, 0, 655334, 49, 0, 655335, 49, 0, 655336, 53, 0, 655337, 53, 2, 655338, 49, 0, 655339, 49, 0, 655340, 49, 0, 655341, 49, 0, 655342, 49, 0, 655343, 49, 0, 655344, 48, 0, 655345, 49, 0, 655346, 49, 0, 655347, 49, 0, 655348, 53, 131072, 655349, 53, 131074, 655350, 49, 0, 655351, 49, 0, 655352, 49, 0, 655353, 49, 0, 655354, 49, 0, 655355, 49, 0, 655356, 49, 0, 655357, 47, 131075, 655358, 48, 0, 655359, 47, 131075, 589824, 49, 0, 589825, 49, 0, 589826, 52, 65536, 589827, 52, 65538, 589828, 49, 0, 589829, 49, 0, 720868, 49, 0, 720869, 49, 0, 720870, 49, 0, 720871, 49, 0, 720872, 53, 65536, 720873, 53, 65538, 720874, 49, 0, 720875, 49, 0, 720876, 49, 0, 720877, 49, 0, 720878, 49, 0, 720879, 49, 0, 720880, 48, 0, 720881, 49, 0, 720882, 49, 0, 720883, 49, 0, 720884, 49, 0, 720885, 49, 0, 720886, 49, 0, 720887, 49, 0, 720888, 49, 0, 720889, 49, 0, 720890, 49, 0, 720891, 49, 0, 720892, 49, 0, 720893, 49, 0, 720894, 49, 0, 720895, 49, 0, 655360, 49, 0, 655361, 49, 0, 655362, 52, 131072, 655363, 52, 131074, 655364, 49, 0, 655365, 49, 0, 786404, 53, 0, 786405, 53, 1, 786406, 53, 1, 786407, 53, 1, 786408, 53, 131078, 786409, 53, 131077, 786410, 53, 1, 786411, 53, 1, 786412, 53, 1, 786413, 53, 1, 786414, 53, 1, 786415, 53, 1, 786416, 53, 1, 786417, 53, 1, 786418, 53, 1, 786419, 53, 1, 786420, 53, 1, 786421, 53, 1, 786422, 53, 1, 786423, 53, 1, 786424, 53, 1, 786425, 53, 1, 786426, 53, 1, 786427, 53, 1, 786428, 53, 1, 786429, 53, 1, 786430, 53, 1, 786431, 53, 1, 720896, 53, 2, 720897, 47, 0, 720898, 47, 1, 720899, 47, 1, 720900, 47, 1, 720901, 47, 1, 720902, 47, 1, 720903, 47, 1, 720904, 47, 1, 720905, 47, 1, 720906, 47, 1, 720907, 47, 1, 720908, 47, 1, 720909, 47, 1, 720910, 47, 1, 720911, 47, 1, 720912, 47, 1, 720913, 47, 1, 720914, 47, 1, 720915, 47, 1, 720916, 47, 1, 720917, 47, 1, 720918, 47, 1, 720919, 47, 1, 720920, 47, 1, 720921, 47, 1, 720922, 47, 1, 720923, 47, 1, 720924, 47, 1, 720925, 47, 1, 720926, 47, 1, 720927, 47, 2, 851940, 53, 65536, 851941, 53, 65537, 851942, 53, 65537, 851943, 53, 65537, 851944, 53, 65537, 851945, 53, 65537, 851946, 53, 65537, 851947, 53, 65537, 851948, 53, 65537, 851949, 53, 65537, 851950, 53, 65537, 851951, 53, 65537, 851952, 53, 65537, 851953, 53, 65537, 851954, 53, 65537, 851955, 53, 65537, 851956, 53, 65537, 851957, 53, 65537, 851958, 53, 65537, 851959, 53, 65537, 851960, 53, 65537, 851961, 53, 65537, 851962, 53, 65537, 851963, 53, 65537, 851964, 53, 65537, 851965, 53, 65537, 851966, 53, 65537, 851967, 53, 65537, 786432, 53, 65538, 786433, 47, 65536, 786434, 47, 65537, 786435, 47, 65537, 786436, 47, 65537, 786437, 47, 65537, 786438, 47, 65537, 786439, 47, 65537, 786440, 47, 65537, 786441, 47, 65537, 786442, 47, 65537, 786443, 47, 65537, 786444, 47, 65537, 786445, 47, 65537, 786446, 47, 65537, 786447, 47, 65537, 786448, 47, 65537, 786449, 47, 65537, 786450, 47, 65537, 786451, 47, 65537, 786452, 47, 65537, 786453, 47, 65537, 786454, 47, 65537, 786455, 47, 65537, 786456, 47, 65537, 786457, 47, 65537, 786458, 47, 65537, 786459, 47, 65537, 786460, 47, 65537, 786461, 47, 65537, 786462, 47, 65537, 786463, 47, 65538, 917476, 53, 131072, 917477, 53, 131073, 917478, 53, 131073, 917479, 53, 131073, 917480, 53, 131073, 917481, 53, 131073, 917482, 53, 131073, 917483, 53, 131073, 917484, 53, 131073, 917485, 53, 131073, 917486, 53, 131073, 917487, 53, 131073, 917488, 53, 131073, 917489, 53, 131073, 917490, 53, 131073, 917491, 53, 131073, 917492, 53, 131073, 917493, 53, 131073, 917494, 53, 131073, 917495, 53, 131073, 917496, 53, 131073, 917497, 53, 131073, 917498, 53, 131073, 917499, 53, 131073, 917500, 53, 131073, 917501, 53, 131073, 917502, 53, 131073, 917503, 53, 131073, 851968, 53, 131074, 851969, 47, 131072, 851970, 47, 131073, 851971, 47, 131073, 851972, 47, 131073, 851973, 47, 131073, 851974, 47, 131073, 851975, 47, 131073, 851976, 47, 131073, 851977, 47, 131073, 851978, 47, 131073, 851979, 47, 131073, 851980, 47, 131073, 851981, 47, 131073, 851982, 47, 131073, 851983, 47, 131073, 851984, 47, 131073, 851985, 47, 131073, 851986, 47, 131073, 851987, 47, 131073, 851988, 47, 131073, 851989, 47, 131073, 851990, 47, 131073, 851991, 47, 131073, 851992, 47, 131073, 851993, 47, 131073, 851994, 47, 131073, 851995, 47, 131073, 851996, 47, 131073, 851997, 47, 131073, 851998, 47, 131073, 851999, 47, 131074 ) +tile_data = PoolIntArray( 196578, 49, 0, 196579, 49, 0, 262114, 52, 0, 262115, 52, 2, 327639, 47, 4, 327640, 47, 196609, 327641, 47, 196609, 327642, 47, 196609, 327643, 47, 196609, 327644, 47, 196609, 327645, 47, 196609, 327646, 47, 196609, 327647, 47, 196609, 327648, 47, 196609, 327649, 47, 7, 327650, 52, 65536, 327651, 52, 65538, 327652, 47, 4, 327653, 47, 196609, 327654, 47, 196609, 327655, 47, 196609, 327656, 47, 196609, 327657, 47, 196609, 327658, 47, 196609, 327659, 47, 196609, 327660, 47, 196609, 327661, 47, 196609, 327662, 47, 196609, 327663, 47, 196610, 327664, 53, 196608, 327665, 53, 196609, 327666, 53, 196609, 327667, 53, 196609, 327668, 53, 196609, 327669, 53, 196609, 327670, 53, 196609, 327671, 53, 196609, 327672, 53, 196609, 327673, 53, 196609, 327674, 53, 196609, 327675, 53, 196609, 327676, 53, 8, 327677, 53, 196609, 327678, 53, 196609, 327679, 53, 196609, 262144, 53, 7, 262145, 47, 196608, 262146, 47, 196609, 262147, 47, 196609, 262148, 47, 196609, 262149, 47, 196609, 262150, 47, 196609, 262151, 47, 196609, 262152, 47, 196609, 262153, 47, 196609, 262154, 47, 196609, 262155, 47, 7, 393175, 47, 65539, 393176, 54, 0, 393177, 54, 1, 393178, 54, 1, 393179, 54, 1, 393180, 54, 1, 393181, 54, 1, 393182, 54, 1, 393183, 54, 1, 393184, 54, 2, 393185, 47, 65539, 393186, 52, 65536, 393187, 52, 65538, 393188, 47, 65539, 393189, 54, 0, 393190, 54, 1, 393191, 54, 1, 393192, 54, 1, 393193, 54, 1, 393194, 54, 1, 393195, 54, 1, 393196, 54, 1, 393197, 54, 1, 393198, 54, 1, 393199, 54, 2, 393200, 49, 0, 393201, 49, 0, 393202, 49, 0, 393203, 49, 0, 393204, 49, 0, 393205, 49, 0, 393206, 49, 0, 393207, 49, 0, 393208, 49, 0, 393209, 49, 0, 393210, 49, 0, 393211, 49, 0, 393212, 53, 65539, 393213, 52, 0, 393214, 52, 1, 393215, 52, 2, 327680, 53, 65539, 327681, 54, 0, 327682, 54, 1, 327683, 54, 1, 327684, 54, 1, 327685, 54, 1, 327686, 54, 1, 327687, 54, 1, 327688, 54, 1, 327689, 54, 1, 327690, 54, 2, 327691, 47, 65539, 458711, 47, 65539, 458712, 54, 65536, 458713, 54, 65537, 458714, 54, 65537, 458715, 54, 65537, 458716, 54, 65537, 458717, 54, 65537, 458718, 54, 65537, 458719, 54, 65537, 458720, 54, 65538, 458721, 47, 65539, 458722, 52, 65536, 458723, 52, 65538, 458724, 47, 65539, 458725, 54, 65536, 458726, 54, 65537, 458727, 54, 65537, 458728, 54, 65537, 458729, 54, 65537, 458730, 54, 65537, 458731, 54, 65537, 458732, 54, 65537, 458733, 54, 65537, 458734, 54, 65537, 458735, 54, 65538, 458736, 49, 0, 458737, 49, 0, 458738, 49, 0, 458739, 49, 0, 458740, 49, 0, 458741, 49, 0, 458742, 49, 0, 458743, 49, 0, 458744, 49, 0, 458745, 49, 0, 458746, 49, 0, 458747, 49, 0, 458748, 53, 65539, 458749, 52, 131072, 458750, 52, 131073, 458751, 52, 131074, 393216, 53, 65539, 393217, 54, 65536, 393218, 54, 65537, 393219, 54, 65537, 393220, 54, 65537, 393221, 54, 65537, 393222, 54, 65537, 393223, 54, 65537, 393224, 54, 65537, 393225, 54, 65537, 393226, 54, 65538, 393227, 47, 65539, 524247, 47, 131075, 524248, 54, 65540, 524249, 54, 131073, 524250, 54, 131073, 524251, 54, 131073, 524252, 54, 131073, 524253, 54, 131073, 524254, 54, 131073, 524255, 54, 65542, 524256, 54, 65538, 524257, 47, 65539, 524258, 52, 131072, 524259, 52, 131074, 524260, 47, 65539, 524261, 54, 65536, 524262, 54, 65541, 524263, 54, 131073, 524264, 54, 131073, 524265, 54, 131073, 524266, 54, 131073, 524267, 54, 65542, 524268, 54, 65537, 524269, 54, 65537, 524270, 54, 65537, 524271, 54, 65538, 524272, 48, 0, 524273, 48, 0, 524274, 48, 0, 524275, 49, 0, 524276, 49, 0, 524277, 49, 0, 524278, 49, 0, 524279, 49, 0, 524280, 49, 0, 524281, 49, 0, 524282, 49, 0, 524283, 49, 0, 524284, 53, 131075, 524285, 47, 3, 524286, 48, 0, 524287, 47, 3, 458752, 53, 131075, 458753, 54, 65536, 458754, 54, 65537, 458755, 54, 65537, 458756, 54, 65537, 458757, 54, 65537, 458758, 54, 65537, 458759, 54, 65537, 458760, 54, 65537, 458761, 54, 65537, 458762, 54, 65538, 458763, 47, 131075, 589783, 54, 0, 589784, 54, 131079, 589785, 52, 0, 589786, 52, 1, 589787, 52, 1, 589788, 52, 1, 589789, 52, 1, 589790, 52, 2, 589791, 54, 65536, 589792, 54, 65538, 589793, 47, 131075, 589794, 49, 0, 589795, 49, 0, 589796, 47, 131075, 589797, 54, 65536, 589798, 54, 65538, 589799, 48, 0, 589800, 53, 196608, 589801, 53, 196610, 589802, 48, 0, 589803, 54, 65536, 589804, 54, 65537, 589805, 54, 65537, 589806, 54, 65537, 589807, 54, 65538, 589808, 48, 0, 589809, 49, 0, 589810, 49, 0, 589811, 53, 196608, 589812, 53, 6, 589813, 53, 5, 589814, 53, 196610, 589815, 49, 0, 589816, 49, 0, 589817, 49, 0, 589818, 49, 0, 589819, 49, 0, 589820, 49, 0, 589821, 47, 65539, 589822, 48, 0, 589823, 47, 65539, 524288, 49, 0, 524289, 54, 65536, 524290, 54, 65537, 524291, 54, 65537, 524292, 54, 65537, 524293, 54, 65537, 524294, 54, 65537, 524295, 54, 65537, 524296, 54, 65537, 524297, 54, 65537, 524298, 54, 131077, 524299, 54, 2, 655319, 54, 65536, 655320, 54, 65538, 655321, 52, 131072, 655322, 52, 131073, 655323, 52, 131073, 655324, 52, 131073, 655325, 52, 131073, 655326, 52, 131074, 655327, 54, 65536, 655328, 54, 131077, 655329, 54, 2, 655330, 49, 0, 655331, 49, 0, 655332, 54, 0, 655333, 54, 131078, 655334, 54, 65538, 655335, 48, 0, 655336, 52, 0, 655337, 52, 2, 655338, 48, 0, 655339, 54, 65536, 655340, 54, 65537, 655341, 54, 65537, 655342, 54, 65537, 655343, 54, 65538, 655344, 48, 0, 655345, 49, 0, 655346, 49, 0, 655347, 49, 0, 655348, 53, 131072, 655349, 53, 131074, 655350, 49, 0, 655351, 49, 0, 655352, 49, 0, 655353, 49, 0, 655354, 49, 0, 655355, 49, 0, 655356, 49, 0, 655357, 47, 131075, 655358, 48, 0, 655359, 47, 131075, 589824, 49, 0, 589825, 54, 65536, 589826, 54, 65537, 589827, 54, 65537, 589828, 54, 65537, 589829, 54, 65537, 589830, 54, 65537, 589831, 54, 65537, 589832, 54, 65537, 589833, 54, 65537, 589834, 54, 65537, 589835, 54, 65538, 720850, 53, 0, 720851, 53, 2, 720855, 54, 131072, 720856, 54, 196613, 720857, 54, 196609, 720858, 54, 196609, 720859, 54, 196609, 720860, 54, 196609, 720861, 54, 196609, 720862, 54, 196609, 720863, 54, 196614, 720864, 54, 131073, 720865, 54, 131074, 720866, 49, 0, 720867, 49, 0, 720868, 54, 131072, 720869, 54, 131073, 720870, 54, 131074, 720871, 48, 0, 720872, 52, 131072, 720873, 52, 131074, 720874, 48, 0, 720875, 54, 131072, 720876, 54, 131073, 720877, 54, 131073, 720878, 54, 131073, 720879, 54, 131074, 720880, 48, 0, 720881, 49, 0, 720882, 49, 0, 720883, 49, 0, 720884, 49, 0, 720885, 49, 0, 720886, 49, 0, 720887, 49, 0, 720888, 49, 0, 720889, 49, 0, 720890, 49, 0, 720891, 49, 0, 720892, 49, 0, 720893, 49, 0, 720894, 49, 0, 720895, 49, 0, 655360, 49, 0, 655361, 54, 131072, 655362, 54, 131073, 655363, 54, 131073, 655364, 54, 131073, 655365, 54, 131073, 655366, 54, 131073, 655367, 54, 131073, 655368, 54, 131073, 655369, 54, 131073, 655370, 54, 131073, 655371, 54, 131074, 786382, 53, 0, 786383, 53, 1, 786384, 53, 1, 786385, 53, 1, 786386, 53, 131078, 786387, 53, 131077, 786388, 53, 1, 786389, 53, 1, 786390, 53, 2, 786391, 47, 0, 786392, 47, 1, 786393, 47, 1, 786394, 47, 1, 786395, 47, 1, 786396, 47, 1, 786397, 47, 1, 786398, 47, 1, 786399, 47, 1, 786400, 47, 1, 786401, 47, 1, 786402, 47, 1, 786403, 47, 1, 786404, 47, 1, 786405, 47, 1, 786406, 47, 1, 786407, 47, 1, 786408, 47, 1, 786409, 47, 1, 786410, 47, 1, 786411, 47, 1, 786412, 47, 1, 786413, 47, 1, 786414, 47, 1, 786415, 47, 2, 786416, 53, 0, 786417, 53, 1, 786418, 53, 1, 786419, 53, 1, 786420, 53, 1, 786421, 53, 1, 786422, 53, 1, 786423, 53, 1, 786424, 53, 1, 786425, 53, 1, 786426, 53, 1, 786427, 53, 1, 786428, 53, 1, 786429, 53, 1, 786430, 53, 1, 786431, 53, 1, 720896, 53, 2, 720897, 47, 0, 720898, 47, 1, 720899, 47, 1, 720900, 47, 1, 720901, 47, 1, 720902, 47, 1, 720903, 47, 1, 720904, 47, 1, 720905, 47, 1, 720906, 47, 1, 720907, 47, 2, 720908, 53, 0, 720909, 53, 1, 720910, 53, 1, 720911, 53, 1, 720912, 53, 1, 720913, 53, 1, 720914, 53, 1, 720915, 53, 1, 720916, 53, 1, 720917, 53, 1, 720918, 53, 1, 720919, 53, 1, 720920, 53, 1, 720921, 53, 1, 720922, 53, 1, 720923, 53, 1, 720924, 53, 1, 720925, 53, 1, 720926, 53, 1, 720927, 53, 2, 851918, 53, 65536, 851919, 53, 65537, 851920, 53, 65537, 851921, 53, 65537, 851922, 53, 65537, 851923, 53, 65537, 851924, 53, 65537, 851925, 53, 65537, 851926, 53, 65538, 851927, 47, 65536, 851928, 47, 65537, 851929, 47, 65537, 851930, 47, 65537, 851931, 47, 65537, 851932, 47, 65537, 851933, 47, 65537, 851934, 47, 65537, 851935, 47, 65537, 851936, 47, 65537, 851937, 47, 65537, 851938, 47, 65537, 851939, 47, 65537, 851940, 47, 65537, 851941, 47, 65537, 851942, 47, 65537, 851943, 47, 65537, 851944, 47, 65537, 851945, 47, 65537, 851946, 47, 65537, 851947, 47, 65537, 851948, 47, 65537, 851949, 47, 65537, 851950, 47, 65537, 851951, 47, 65538, 851952, 53, 65536, 851953, 53, 65537, 851954, 53, 65537, 851955, 53, 65537, 851956, 53, 65537, 851957, 53, 65537, 851958, 53, 65537, 851959, 53, 65537, 851960, 53, 65537, 851961, 53, 65537, 851962, 53, 65537, 851963, 53, 65537, 851964, 53, 65537, 851965, 53, 65537, 851966, 53, 65537, 851967, 53, 65537, 786432, 53, 65538, 786433, 47, 65536, 786434, 47, 65537, 786435, 47, 65537, 786436, 47, 65537, 786437, 47, 65537, 786438, 47, 65537, 786439, 47, 65537, 786440, 47, 65537, 786441, 47, 65537, 786442, 47, 65537, 786443, 47, 65538, 786444, 53, 65536, 786445, 53, 65537, 786446, 53, 65537, 786447, 53, 65537, 786448, 53, 65537, 786449, 53, 65537, 786450, 53, 65537, 786451, 53, 65537, 786452, 53, 65537, 786453, 53, 65537, 786454, 53, 65537, 786455, 53, 65537, 786456, 53, 65537, 786457, 53, 65537, 786458, 53, 65537, 786459, 53, 65537, 786460, 53, 65537, 786461, 53, 65537, 786462, 53, 65537, 786463, 53, 65538, 917454, 53, 131072, 917455, 53, 131073, 917456, 53, 131073, 917457, 53, 131073, 917458, 53, 131073, 917459, 53, 131073, 917460, 53, 131073, 917461, 53, 131073, 917462, 53, 131074, 917463, 47, 131072, 917464, 47, 131073, 917465, 47, 131073, 917466, 47, 131073, 917467, 47, 131073, 917468, 47, 131073, 917469, 47, 131073, 917470, 47, 131073, 917471, 47, 131073, 917472, 47, 131073, 917473, 47, 131073, 917474, 47, 131073, 917475, 47, 131073, 917476, 47, 131073, 917477, 47, 131073, 917478, 47, 131073, 917479, 47, 131073, 917480, 47, 131073, 917481, 47, 131073, 917482, 47, 131073, 917483, 47, 131073, 917484, 47, 131073, 917485, 47, 131073, 917486, 47, 131073, 917487, 47, 131074, 917488, 53, 131072, 917489, 53, 131073, 917490, 53, 131073, 917491, 53, 131073, 917492, 53, 131073, 917493, 53, 131073, 917494, 53, 131073, 917495, 53, 131073, 917496, 53, 131073, 917497, 53, 131073, 917498, 53, 131073, 917499, 53, 131073, 917500, 53, 131073, 917501, 53, 131073, 917502, 53, 131073, 917503, 53, 131073, 851968, 53, 131074, 851969, 47, 131072, 851970, 47, 131073, 851971, 47, 131073, 851972, 47, 131073, 851973, 47, 131073, 851974, 47, 131073, 851975, 47, 131073, 851976, 47, 131073, 851977, 47, 131073, 851978, 47, 131073, 851979, 47, 131074, 851980, 53, 131072, 851981, 53, 131073, 851982, 53, 131073, 851983, 53, 131073, 851984, 53, 131073, 851985, 53, 131073, 851986, 53, 131073, 851987, 53, 131073, 851988, 53, 131073, 851989, 53, 131073, 851990, 53, 131073, 851991, 53, 131073, 851992, 53, 131073, 851993, 53, 131073, 851994, 53, 131073, 851995, 53, 131073, 851996, 53, 131073, 851997, 53, 131073, 851998, 53, 131073, 851999, 53, 131074 ) [node name="Soldier" parent="." instance=ExtResource( 8 )] position = Vector2( 111.361, 167.466 ) @@ -49,7 +52,7 @@ start_on_play = false position = Vector2( 133.095, -0.638016 ) [node name="Killbox" type="Area2D" parent="."] -position = Vector2( -175.617, 105.37 ) +position = Vector2( 16.9294, 250.937 ) script = ExtResource( 9 ) __meta__ = { "_edit_group_": true @@ -67,3 +70,19 @@ __meta__ = { [node name="CollisionShape2D" type="CollisionShape2D" parent="Savebox"] shape = SubResource( 2 ) + +[node name="ElevatorDoor" parent="." instance=ExtResource( 12 )] +position = Vector2( -446, 160 ) + +[node name="ElevatorDoor2" parent="." instance=ExtResource( 12 )] +position = Vector2( -482, 160 ) + +[node name="Elevator" parent="." instance=ExtResource( 11 )] +position = Vector2( -464, 160 ) +relative_positions = [ Vector2( 0, 0 ), Vector2( 0, -112 ) ] +labels = [ "Bottom", "Top" ] +doors = [ NodePath("../ElevatorDoor"), NodePath("../ElevatorDoor2") ] + +[node name="ElevatorButton" parent="." instance=ExtResource( 13 )] +position = Vector2( -498.391, 161.72 ) +elevator = NodePath("../Elevator") diff --git a/client/Scenes/World.scn b/client/Scenes/World.scn index b4e888aa1b6fcb9aac942d16c867246fd01d8da1..9e6fc699c39dc868ffa6bda02a3b323c1c04a60c 100644 GIT binary patch literal 12727 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 I{J(7cAAi)*wEzGB literal 11883 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 diff --git a/client/Scripts/Component/ElevatorControls.gd b/client/Scripts/Component/ElevatorControls.gd new file mode 100644 index 0000000..ba10a00 --- /dev/null +++ b/client/Scripts/Component/ElevatorControls.gd @@ -0,0 +1,4 @@ +extends "res://Scripts/Component/Interactable.gd" + +func _ready(): + connect("interacted", get_parent(), "_on_interact") diff --git a/client/Scripts/Entities/Door.gd b/client/Scripts/Entities/Door.gd index d482e26..a647520 100644 --- a/client/Scripts/Entities/Door.gd +++ b/client/Scripts/Entities/Door.gd @@ -6,34 +6,43 @@ var opened = false export var locked = false export var security_level = 0 var player_level = -1 +var color_node : Node2D + + func lock(): locked = true - $Top/Color.modulate = Color.red + if color_node: + color_node.modulate = Color.red func unlock(): locked = false set_color() func set_color(): - match(security_level): - 0: - $Top/Color.modulate = Color.green - 1: - $Top/Color.modulate = Color.blue - 2: - $Top/Color.modulate = Color.yellow - 3: - $Top/Color.modulate = Color.orange - 4: - $Top/Color.modulate = Color.red - 5: - $Top/Color.modulate = Color.purple + if color_node: + match(security_level): + 0: + color_node.modulate = Color.green + 1: + color_node.modulate = Color.blue + 2: + color_node.modulate = Color.yellow + 3: + color_node.modulate = Color.orange + 4: + color_node.modulate = Color.red + 5: + color_node.modulate = Color.purple # Called when the node enters the scene tree for the first time. func _ready(): connect("body_entered", self, "_on_body_enter") connect("body_exited", self, "_on_body_exit") + if $Top/Color: + color_node = $Top/Color + elif $Color: + color_node = $Color if locked: lock() else: @@ -60,6 +69,7 @@ func close(): if opened: $AnimationPlayer.play("Close") $AudioStreamPlayer2D.play() + $StaticBody2D.collision_layer = 1 $StaticBody2D.collision_mask = 1 opened = false diff --git a/client/Scripts/Entities/Elevator.gd b/client/Scripts/Entities/Elevator.gd new file mode 100644 index 0000000..0875144 --- /dev/null +++ b/client/Scripts/Entities/Elevator.gd @@ -0,0 +1,62 @@ +extends Node2D + +signal elevator_stopped + +export(Array, Vector2) var relative_positions = [Vector2(0,0)] +export(Array, String) var labels = ["Default"] +export(Array, NodePath) var doors = [] +export var current_pos : int = 0 + +var moving : bool = false + +var gui +var motion +var intial_pos : Vector2 +export var elevator_speed = 25 + +func _ready(): + motion = Vector2.ZERO + intial_pos = global_position + +func _on_interact(): + if not moving: + if not gui: + gui = get_node("/root/World/GUI") + gui.open_elevator_menu(self) + +func _on_choice(index): + start_moving(index) + gui.close_elevator_menu() + +func start_moving(index): + if current_pos != index: + moving = true + current_pos = index + + # Close all doors while in transit + for door_path in doors: + var door = get_node(door_path) + door.close() + door.lock() + return true + return false + +func stop_moving(): + emit_signal("elevator_stopped") + moving = false + # Alert doors of updated elevator state + for door_path in doors: + get_node(door_path).on_elevator_stop(current_pos) + +func _physics_process(delta): + if moving: + # Move towards elevator stop + var target_pos = intial_pos + relative_positions[current_pos] + var angle = get_angle_to(target_pos) + var velocity = Vector2(cos(angle),sin(angle)) + global_position += velocity * elevator_speed * delta + + # Stop when elevator is at destination + if global_position.distance_to(target_pos) < 0.25: + global_position = target_pos + stop_moving() diff --git a/client/Scripts/Entities/ElevatorButton.gd b/client/Scripts/Entities/ElevatorButton.gd new file mode 100644 index 0000000..906eb85 --- /dev/null +++ b/client/Scripts/Entities/ElevatorButton.gd @@ -0,0 +1,20 @@ +extends "res://Scripts/Component/Interactable.gd" + +export(NodePath) var elevator +export var call_to_index : int = 0 + +var elevator_node + +func _ready(): + elevator_node = get_node(elevator) + connect("interacted", self, "_on_interact") + $AnimationPlayer.play("Done") + +func _on_interact(): + if elevator_node.start_moving(call_to_index): + elevator_node.connect("elevator_stopped", self, "_on_finish") + $AnimationPlayer.play("Waiting") + +func _on_finish(): + elevator_node.disconnect("elevator_stopped", self, "_on_finish") + $AnimationPlayer.play("Done") diff --git a/client/Scripts/Entities/ElevatorDoor.gd b/client/Scripts/Entities/ElevatorDoor.gd new file mode 100644 index 0000000..15c8b3b --- /dev/null +++ b/client/Scripts/Entities/ElevatorDoor.gd @@ -0,0 +1,10 @@ +extends "res://Scripts/Entities/Door.gd" + +export var level_index : int = 0 + +func on_elevator_stop(index): + if index == level_index: + unlock() + open() + else: + lock() diff --git a/client/Scripts/Entities/Player.gd b/client/Scripts/Entities/Player.gd index ebf3ccb..0e32de7 100644 --- a/client/Scripts/Entities/Player.gd +++ b/client/Scripts/Entities/Player.gd @@ -139,17 +139,17 @@ func user_input(): # Interactions if Input.is_action_just_pressed("interact") and len(interactables) > 0 and not gui.is_in_dialog(): interact() - - # Move down platforms - if is_on_floor() and Input.is_action_just_pressed("ui_up") and Input.is_action_pressed("ui_down"): - var test_pos = Vector2(position.x,position.y+6) - if not test_move(Transform2D(0,test_pos), Vector2(0,1)): - position.y = position.y + 2 - return - + # Jumping - if(test_move(transform, Vector2(0,1)) and Input.is_action_just_pressed("ui_up")): - jumped = true + if Input.is_action_just_pressed("ui_up"): + if Input.is_action_pressed("ui_down"): + if is_on_floor(): + var test_pos = Vector2(position.x,position.y+6) + if not test_move(Transform2D(0,test_pos), Vector2(0,1)): + position.y = position.y + 2 + return + elif(test_move(transform, Vector2(0,1))): + jumped = true # Move left and right <- & -> # - - - - - - - - - - - - - - - diff --git a/client/Scripts/Entities/Wall Light.gd b/client/Scripts/Entities/Wall Light.gd index 1dda072..a01192e 100644 --- a/client/Scripts/Entities/Wall Light.gd +++ b/client/Scripts/Entities/Wall Light.gd @@ -1,7 +1,9 @@ extends Sprite export var shadows : bool = false +export var energy : float = 1.1 func _ready(): $Light2D.show() $Light2D.shadow_enabled = shadows + $Light2D.energy = energy diff --git a/client/Scripts/Systems/GameGui.gd b/client/Scripts/Systems/GameGui.gd index d30ddd6..57cd8a4 100644 --- a/client/Scripts/Systems/GameGui.gd +++ b/client/Scripts/Systems/GameGui.gd @@ -120,3 +120,20 @@ func fade_screen(seconds = 1, fade_in=true): func _on_screen_fade_complete(): emit_signal("screen_fade_complete") + +func open_elevator_menu(elevator): + for i in range($ElevatorDialog/Buttons.get_child_count()): + $ElevatorDialog/Buttons.get_child(i).queue_free() + + var num = 0 + for pos in elevator.relative_positions: + var button = Button.new() + button.text = elevator.labels[num] + button.connect("button_down", elevator, "_on_choice", [num]) + $ElevatorDialog/Buttons.add_child(button) + num = num + 1 + + $ElevatorDialog.popup_centered() + +func close_elevator_menu(): + $ElevatorDialog.hide()