Round system
This commit is contained in:
parent
bcb42f8d16
commit
3df8247a84
32 changed files with 573 additions and 123 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=22 format=3 uid="uid://cqrh2cc7m2i7f"]
|
[gd_scene load_steps=24 format=3 uid="uid://cqrh2cc7m2i7f"]
|
||||||
|
|
||||||
[ext_resource type="Environment" uid="uid://d0cfgtx2yxw13" path="res://environments/prototype_environment.tres" id="1_i6jab"]
|
[ext_resource type="Environment" uid="uid://d0cfgtx2yxw13" path="res://environments/prototype_environment.tres" id="1_i6jab"]
|
||||||
[ext_resource type="Script" uid="uid://ypgm3aplt78m" path="res://scripts/multiplayer/team_spawner.gd" id="4_pi0y7"]
|
[ext_resource type="Script" uid="uid://ypgm3aplt78m" path="res://scripts/multiplayer/team_spawner.gd" id="4_pi0y7"]
|
||||||
|
|
@ -15,6 +15,7 @@
|
||||||
[ext_resource type="Script" uid="uid://dk1gjbuydemmb" path="res://scripts/multiplayer/plant_site/plant_site.gd" id="8_oujx2"]
|
[ext_resource type="Script" uid="uid://dk1gjbuydemmb" path="res://scripts/multiplayer/plant_site/plant_site.gd" id="8_oujx2"]
|
||||||
[ext_resource type="Script" uid="uid://b4cpux52fmx5o" path="res://scripts/multiplayer/plant_site/plant_deadzone.gd" id="9_1wlgq"]
|
[ext_resource type="Script" uid="uid://b4cpux52fmx5o" path="res://scripts/multiplayer/plant_site/plant_deadzone.gd" id="9_1wlgq"]
|
||||||
[ext_resource type="Material" uid="uid://c6xa4phihtya2" path="res://materials/Redmat.tres" id="9_ysk2e"]
|
[ext_resource type="Material" uid="uid://c6xa4phihtya2" path="res://materials/Redmat.tres" id="9_ysk2e"]
|
||||||
|
[ext_resource type="Script" uid="uid://3i00rp8urth7" path="res://scripts/object_container.gd" id="11_02ic3"]
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_y6i55"]
|
[sub_resource type="Animation" id="Animation_y6i55"]
|
||||||
length = 0.001
|
length = 0.001
|
||||||
|
|
@ -31,7 +32,10 @@ _data = {
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_ysk2e"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_ysk2e"]
|
||||||
size = Vector3(15.324341, 1.4935913, 21.381592)
|
size = Vector3(15.324341, 0.96273804, 21.381592)
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_8bje3"]
|
||||||
|
size = Vector3(0.8275013, 0.96273804, 1.0796204)
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_1wlgq"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_1wlgq"]
|
||||||
size = Vector3(34.28946, 8.172485, 33.813843)
|
size = Vector3(34.28946, 8.172485, 33.813843)
|
||||||
|
|
@ -49,6 +53,12 @@ shadow_opacity = 0.72
|
||||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
environment = ExtResource("1_i6jab")
|
environment = ExtResource("1_i6jab")
|
||||||
|
|
||||||
|
[node name="CSGBox3D29" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(0.92477864, 0, 0.38050553, 0, 1, 0, -0.38050553, 0, 0.92477864, 2.3401544, 1.2806039, -9.494778)
|
||||||
|
use_collision = true
|
||||||
|
size = Vector3(1.5958366, 1.7258911, 1.7827377)
|
||||||
|
material = ExtResource("5_foctg")
|
||||||
|
|
||||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||||
use_collision = true
|
use_collision = true
|
||||||
collision_mask = 9
|
collision_mask = 9
|
||||||
|
|
@ -61,23 +71,20 @@ size = Vector3(126.25586, 1, 100.838135)
|
||||||
material = ExtResource("4_y6i55")
|
material = ExtResource("4_y6i55")
|
||||||
|
|
||||||
[node name="CSGBox3D18" type="CSGBox3D" parent="CSGCombiner3D"]
|
[node name="CSGBox3D18" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.487278, 2.707026, -9.567705)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.487278, 3.9812875, -24.729654)
|
||||||
size = Vector3(4.0271816, 4.5787354, 5.284851)
|
size = Vector3(4.0271816, 7.1272583, 33.69597)
|
||||||
material = ExtResource("5_bno23")
|
material = ExtResource("5_bno23")
|
||||||
|
|
||||||
[node name="CSGBox3D22" type="CSGBox3D" parent="CSGCombiner3D"]
|
[node name="CSGBox3D19" type="CSGBox3D" parent="CSGCombiner3D/CSGBox3D18"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.487278, 6.839224, -24.810701)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.0283356, 4.066929)
|
||||||
size = Vector3(4.0271816, 3.7450104, 35.770844)
|
operation = 2
|
||||||
|
size = Vector3(4.0271816, 5.070587, 6.0345716)
|
||||||
material = ExtResource("5_bno23")
|
material = ExtResource("5_bno23")
|
||||||
|
|
||||||
[node name="CSGBox3D19" type="CSGBox3D" parent="CSGCombiner3D"]
|
[node name="CSGBox3D20" type="CSGBox3D" parent="CSGCombiner3D/CSGBox3D18"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.487278, 2.707026, -23.270264)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.0283356, -14.085073)
|
||||||
size = Vector3(4.0271816, 4.5787354, 14.136078)
|
operation = 2
|
||||||
material = ExtResource("5_bno23")
|
size = Vector3(4.0271816, 5.070587, 3.538221)
|
||||||
|
|
||||||
[node name="CSGBox3D20" type="CSGBox3D" parent="CSGCombiner3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.347204, 2.707026, -39.01053)
|
|
||||||
size = Vector3(4.307333, 4.5787354, 7.6101303)
|
|
||||||
material = ExtResource("5_bno23")
|
material = ExtResource("5_bno23")
|
||||||
|
|
||||||
[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D"]
|
[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
|
@ -86,15 +93,10 @@ size = Vector3(3.9233856, 7.2024536, 17.76538)
|
||||||
material = ExtResource("5_bno23")
|
material = ExtResource("5_bno23")
|
||||||
|
|
||||||
[node name="CSGBox3D25" type="CSGBox3D" parent="CSGCombiner3D"]
|
[node name="CSGBox3D25" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4624505, 2.707026, -10.422279)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4624505, 2.707026, -12.430679)
|
||||||
size = Vector3(1.047142, 4.5787354, 5.901947)
|
size = Vector3(1.047142, 4.5787354, 9.918747)
|
||||||
material = ExtResource("4_yx0ab")
|
material = ExtResource("4_yx0ab")
|
||||||
|
|
||||||
[node name="CSGBox3D29" type="CSGBox3D" parent="CSGCombiner3D"]
|
|
||||||
transform = Transform3D(0.92477864, 0, 0.38050553, 0, 1, 0, -0.38050553, 0, 0.92477864, 2.3401544, 1.2806039, -9.494778)
|
|
||||||
size = Vector3(1.5958366, 1.7258911, 1.7827377)
|
|
||||||
material = ExtResource("5_foctg")
|
|
||||||
|
|
||||||
[node name="CSGBox3D6" type="CSGBox3D" parent="CSGCombiner3D"]
|
[node name="CSGBox3D6" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.189109, 2.707026, 24.290133)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.189109, 2.707026, 24.290133)
|
||||||
size = Vector3(3.9233856, 4.5787354, 9.820068)
|
size = Vector3(3.9233856, 4.5787354, 9.820068)
|
||||||
|
|
@ -141,11 +143,6 @@ transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -46.
|
||||||
size = Vector3(85.006775, 4.5787354, 5.6578064)
|
size = Vector3(85.006775, 4.5787354, 5.6578064)
|
||||||
material = ExtResource("6_8bje3")
|
material = ExtResource("6_8bje3")
|
||||||
|
|
||||||
[node name="CSGBox3D14" type="CSGBox3D" parent="CSGCombiner3D"]
|
|
||||||
transform = Transform3D(-0.50000006, 0, -0.8660254, 0, 1, 0, 0.8660254, 0, -0.50000006, -48.2127, 2.7070298, -31.084457)
|
|
||||||
size = Vector3(41.872528, 4.5787354, 35.261032)
|
|
||||||
material = ExtResource("5_bno23")
|
|
||||||
|
|
||||||
[node name="CSGBox3D15" type="CSGBox3D" parent="CSGCombiner3D"]
|
[node name="CSGBox3D15" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
transform = Transform3D(0.8660254, 0, -0.5, 0, 1, 0, 0.5, 0, 0.8660254, -32.975563, 17.84463, 39.652107)
|
transform = Transform3D(0.8660254, 0, -0.5, 0, 1, 0, 0.5, 0, 0.8660254, -32.975563, 17.84463, 39.652107)
|
||||||
size = Vector3(41.872528, 34.853943, 27.1624)
|
size = Vector3(41.872528, 34.853943, 27.1624)
|
||||||
|
|
@ -167,19 +164,21 @@ polygon = PackedVector2Array(-1.3562565, -1.5799096, -1.3376074, 1.3967638, 3.46
|
||||||
depth = 14.19
|
depth = 14.19
|
||||||
material = ExtResource("5_bno23")
|
material = ExtResource("5_bno23")
|
||||||
|
|
||||||
[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.175511, 8.376497, -12.051787)
|
|
||||||
size = Vector3(9.126762, 15.917679, 8.480011)
|
|
||||||
material = ExtResource("5_bno23")
|
|
||||||
|
|
||||||
[node name="CSGBox3D17" type="CSGBox3D" parent="CSGCombiner3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -33.36447, 9.907686, -16.614532)
|
|
||||||
size = Vector3(19.777737, 18.980057, 17.6055)
|
|
||||||
material = ExtResource("5_bno23")
|
|
||||||
|
|
||||||
[node name="CSGBox3D16" type="CSGBox3D" parent="CSGCombiner3D"]
|
[node name="CSGBox3D16" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22.201584, 11.806246, -32.960644)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -28.345552, 11.806246, -24.122513)
|
||||||
size = Vector3(29.178907, 22.777176, 17.689468)
|
size = Vector3(41.466846, 22.777176, 35.36573)
|
||||||
|
material = ExtResource("5_bno23")
|
||||||
|
|
||||||
|
[node name="CSGBox3D18" type="CSGBox3D" parent="CSGCombiner3D/CSGBox3D16"]
|
||||||
|
transform = Transform3D(0.2478614, 0, 0.96879554, 0, 1, 0, -0.96879554, 0, 0.2478614, -0.98422813, -9.519702, 10.0603485)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(20.900824, 3.737772, 4.796875)
|
||||||
|
material = ExtResource("5_bno23")
|
||||||
|
|
||||||
|
[node name="CSGBox3D19" type="CSGBox3D" parent="CSGCombiner3D/CSGBox3D16"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11.064535, -9.519702, 1.6905918)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(23.704197, 3.737772, 4.796875)
|
||||||
material = ExtResource("5_bno23")
|
material = ExtResource("5_bno23")
|
||||||
|
|
||||||
[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D"]
|
[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
|
@ -188,13 +187,38 @@ size = Vector3(5.681938, 18.808083, 7.111515)
|
||||||
material = ExtResource("6_foctg")
|
material = ExtResource("6_foctg")
|
||||||
|
|
||||||
[node name="CSGBox3D21" type="CSGBox3D" parent="CSGCombiner3D"]
|
[node name="CSGBox3D21" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
transform = Transform3D(0.99998313, 0, -0.005811914, 0, 1, 0, 0.005811914, 0, 0.99998313, 5.4263325, 3.1404138, -35.9143)
|
transform = Transform3D(0.99998313, 0, -0.005811914, 0, 1, 0, 0.005811914, 0, 0.99998313, 7.7764754, 2.6420484, -35.90064)
|
||||||
size = Vector3(17.193996, 5.445511, 2.406681)
|
size = Vector3(21.894361, 4.44878, 2.406681)
|
||||||
|
material = ExtResource("4_yx0ab")
|
||||||
|
|
||||||
|
[node name="CSGBox3D30" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(0.99998313, 0, -0.005811914, 0, 1, 0, 0.005811914, 0, 0.99998313, -1.0181996, 6.118735, -35.927147)
|
||||||
|
size = Vector3(1.8304019, 2.8889408, 1.5464945)
|
||||||
|
material = ExtResource("4_yx0ab")
|
||||||
|
|
||||||
|
[node name="CSGBox3D31" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(0.99998313, 0, -0.005811914, 0, 1, 0, 0.005811914, 0, 0.99998313, 2.7812057, 6.118735, -35.927147)
|
||||||
|
size = Vector3(1.8304019, 2.8889408, 1.5464945)
|
||||||
|
material = ExtResource("4_yx0ab")
|
||||||
|
|
||||||
|
[node name="CSGBox3D32" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(0.99998313, 0, -0.005811914, 0, 1, 0, 0.005811914, 0, 0.99998313, 8.024893, 6.118735, -35.927147)
|
||||||
|
size = Vector3(1.8304019, 2.8889408, 1.5464945)
|
||||||
|
material = ExtResource("4_yx0ab")
|
||||||
|
|
||||||
|
[node name="CSGBox3D33" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(0.99998313, 0, -0.005811914, 0, 1, 0, 0.005811914, 0, 0.99998313, 12.4400835, 6.118735, -35.927147)
|
||||||
|
size = Vector3(1.8304019, 2.8889408, 1.5464945)
|
||||||
|
material = ExtResource("4_yx0ab")
|
||||||
|
|
||||||
|
[node name="CSGBox3D34" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(0.99998313, 0, -0.005811914, 0, 1, 0, 0.005811914, 0, 0.99998313, 17.691769, 6.118735, -35.927147)
|
||||||
|
size = Vector3(1.8304019, 2.8889408, 1.5464945)
|
||||||
material = ExtResource("4_yx0ab")
|
material = ExtResource("4_yx0ab")
|
||||||
|
|
||||||
[node name="CSGBox3D24" type="CSGBox3D" parent="CSGCombiner3D"]
|
[node name="CSGBox3D24" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 0.93200153, -0.3624543, 0, 0.3624543, 0.93200153, 2.6995444, 6.9419756, -39.9535)
|
transform = Transform3D(1, 0, 0, 0, 0.93200153, -0.3624543, 0, 0.3624543, 0.93200153, 5.8547053, 8.527166, -37.974197)
|
||||||
size = Vector3(33.342323, 1.3384781, 10.485079)
|
size = Vector3(27.032001, 1.3384781, 6.2376566)
|
||||||
material = ExtResource("7_8bje3")
|
material = ExtResource("7_8bje3")
|
||||||
|
|
||||||
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D"]
|
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
|
@ -231,7 +255,9 @@ libraries = {
|
||||||
}
|
}
|
||||||
autoplay = "main"
|
autoplay = "main"
|
||||||
|
|
||||||
[node name="PlayersContainer" type="Node3D" parent="."]
|
[node name="PlayersContainer" type="Node3D" parent="." node_paths=PackedStringArray("exlusion_list")]
|
||||||
|
script = ExtResource("11_02ic3")
|
||||||
|
exlusion_list = [NodePath("DefenceSpawn"), NodePath("AttackSpawn"), NodePath("SpectatorSpawn"), NodePath("MultiplayerSpawner")]
|
||||||
|
|
||||||
[node name="DefenceSpawn" type="Marker3D" parent="PlayersContainer"]
|
[node name="DefenceSpawn" type="Marker3D" parent="PlayersContainer"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 37.170197, 0.5180037, 9.210396)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 37.170197, 0.5180037, 9.210396)
|
||||||
|
|
@ -254,7 +280,9 @@ spawn_radius = 10.0
|
||||||
_spawnable_scenes = PackedStringArray("uid://dpsr6ug3pkb40", "uid://ckjabjcvgki6n")
|
_spawnable_scenes = PackedStringArray("uid://dpsr6ug3pkb40", "uid://ckjabjcvgki6n")
|
||||||
spawn_path = NodePath("..")
|
spawn_path = NodePath("..")
|
||||||
|
|
||||||
[node name="DynamicObjectsContainer" type="Node3D" parent="."]
|
[node name="DynamicObjectsContainer" type="Node3D" parent="." node_paths=PackedStringArray("exlusion_list")]
|
||||||
|
script = ExtResource("11_02ic3")
|
||||||
|
exlusion_list = [NodePath("MultiplayerSpawner"), NodePath("Bomb")]
|
||||||
|
|
||||||
[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="DynamicObjectsContainer"]
|
[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="DynamicObjectsContainer"]
|
||||||
_spawnable_scenes = PackedStringArray("uid://dtbpyfdawb02b", "uid://cxdgk74ln5xpn", "uid://dgfqppi21c2u0")
|
_spawnable_scenes = PackedStringArray("uid://dtbpyfdawb02b", "uid://cxdgk74ln5xpn", "uid://dgfqppi21c2u0")
|
||||||
|
|
@ -288,8 +316,14 @@ collision_mask = 16
|
||||||
script = ExtResource("8_oujx2")
|
script = ExtResource("8_oujx2")
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlantA"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlantA"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.484192, 0.24679565, 3.1519775)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.484192, -0.018630981, 3.1519775)
|
||||||
shape = SubResource("BoxShape3D_ysk2e")
|
shape = SubResource("BoxShape3D_ysk2e")
|
||||||
|
debug_color = Color(0.96, 0, 0.5279997, 0.9411765)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D2" type="CollisionShape3D" parent="PlantA"]
|
||||||
|
transform = Transform3D(0.92546135, 0, 0.37884247, 0, 1, 0, -0.37884247, 0, 0.92546135, 0.7677882, 0.9896631, 11.913087)
|
||||||
|
shape = SubResource("BoxShape3D_8bje3")
|
||||||
|
debug_color = Color(0.96, 0, 0.5279997, 0.9411765)
|
||||||
|
|
||||||
[node name="PlantADeadzone" type="Area3D" parent="." node_paths=PackedStringArray("bound_plant")]
|
[node name="PlantADeadzone" type="Area3D" parent="." node_paths=PackedStringArray("bound_plant")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9.00709, -26.598661)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9.00709, -26.598661)
|
||||||
|
|
@ -305,3 +339,6 @@ shape = SubResource("BoxShape3D_1wlgq")
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="PlantADeadzone"]
|
[node name="CollisionShape3D2" type="CollisionShape3D" parent="PlantADeadzone"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8295212, -7.2330484, 25.29969)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8295212, -7.2330484, 25.29969)
|
||||||
shape = SubResource("BoxShape3D_5uqia")
|
shape = SubResource("BoxShape3D_5uqia")
|
||||||
|
|
||||||
|
[node name="DefaultCamera" type="Camera3D" parent="."]
|
||||||
|
transform = Transform3D(0.6629243, -0.44385082, 0.60293275, 0.022305315, 0.81667197, 0.57667094, -0.7483541, -0.36884052, 0.5512919, 17.194904, 16.47376, -9.509804)
|
||||||
|
|
|
||||||
|
|
@ -5,3 +5,5 @@
|
||||||
[resource]
|
[resource]
|
||||||
albedo_texture = ExtResource("1_anv2g")
|
albedo_texture = ExtResource("1_anv2g")
|
||||||
uv1_offset = Vector3(0.5, 0.5, 0.5)
|
uv1_offset = Vector3(0.5, 0.5, 0.5)
|
||||||
|
uv1_triplanar = true
|
||||||
|
uv2_offset = Vector3(0.5, 0.5, 0.5)
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
[gd_scene load_steps=29 format=3 uid="uid://dpsr6ug3pkb40"]
|
[gd_scene load_steps=34 format=3 uid="uid://dpsr6ug3pkb40"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://3dphlay25fih" path="res://scripts/player/player.gd" id="1_g2els"]
|
[ext_resource type="Script" uid="uid://3dphlay25fih" path="res://scripts/player/player.gd" id="1_g2els"]
|
||||||
[ext_resource type="Script" uid="uid://dalwlndejfdhm" path="res://scripts/player/crosshair.gd" id="3_dqkch"]
|
[ext_resource type="Script" uid="uid://dalwlndejfdhm" path="res://scripts/player/crosshair.gd" id="3_dqkch"]
|
||||||
[ext_resource type="Script" uid="uid://bjhbdh6xsjgnn" path="res://scripts/player/player_camera.gd" id="3_qhqgy"]
|
[ext_resource type="Script" uid="uid://bjhbdh6xsjgnn" path="res://scripts/player/player_camera.gd" id="3_qhqgy"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bc21f85o0ovc1" path="res://models/characters/viewmodels/molikman_hands.glb" id="4_dqkch"]
|
[ext_resource type="PackedScene" uid="uid://bc21f85o0ovc1" path="res://models/characters/viewmodels/molikman_hands.glb" id="4_dqkch"]
|
||||||
[ext_resource type="Script" uid="uid://6c14qse4vnra" path="res://scripts/player/player_raycast.gd" id="4_fjrip"]
|
|
||||||
[ext_resource type="Script" uid="uid://bmecgup3kcua7" path="res://scripts/weapon_system/weapon_system.gd" id="4_qlg0r"]
|
[ext_resource type="Script" uid="uid://bmecgup3kcua7" path="res://scripts/weapon_system/weapon_system.gd" id="4_qlg0r"]
|
||||||
[ext_resource type="Script" uid="uid://dd5mp72dq43v6" path="res://scripts/multiplayer/own_visibility_toggle.gd" id="4_smehm"]
|
[ext_resource type="Script" uid="uid://dd5mp72dq43v6" path="res://scripts/multiplayer/own_visibility_toggle.gd" id="4_smehm"]
|
||||||
[ext_resource type="Script" uid="uid://5gwpjiswnegn" path="res://scripts/player/collision_team_updater.gd" id="7_a8ls1"]
|
[ext_resource type="Script" uid="uid://5gwpjiswnegn" path="res://scripts/player/collision_team_updater.gd" id="7_a8ls1"]
|
||||||
[ext_resource type="Script" uid="uid://7gmgcaxfh8sb" path="res://scripts/debug/property_shower.gd" id="7_oprun"]
|
[ext_resource type="Script" uid="uid://7gmgcaxfh8sb" path="res://scripts/debug/property_shower.gd" id="7_oprun"]
|
||||||
[ext_resource type="Script" uid="uid://3777rkbebgjm" path="res://scripts/state_machine/machine.gd" id="8_f1ej7"]
|
[ext_resource type="Script" uid="uid://3777rkbebgjm" path="res://scripts/state_machine/machine.gd" id="8_f1ej7"]
|
||||||
|
[ext_resource type="Script" uid="uid://bl8gfrrc512q2" path="res://scripts/player/dead_player_spectator.gd" id="8_rwwcc"]
|
||||||
[ext_resource type="PackedScene" uid="uid://c2r8dbudbs7l3" path="res://models/characters/worldmodels/molikman_ingame.glb" id="8_smehm"]
|
[ext_resource type="PackedScene" uid="uid://c2r8dbudbs7l3" path="res://models/characters/worldmodels/molikman_ingame.glb" id="8_smehm"]
|
||||||
[ext_resource type="Script" uid="uid://bv8sgx78s8hwn" path="res://scripts/player/states/crouching.gd" id="9_oprun"]
|
[ext_resource type="Script" uid="uid://bv8sgx78s8hwn" path="res://scripts/player/states/crouching.gd" id="9_oprun"]
|
||||||
[ext_resource type="Script" uid="uid://dmy6ahci16los" path="res://scripts/debug/inventory_preview.gd" id="9_ownlk"]
|
[ext_resource type="Script" uid="uid://dmy6ahci16los" path="res://scripts/debug/inventory_preview.gd" id="9_ownlk"]
|
||||||
|
|
@ -18,8 +18,12 @@
|
||||||
[ext_resource type="Script" uid="uid://cwasvwhm5yg0o" path="res://scripts/player/states/walk.gd" id="11_qfm1y"]
|
[ext_resource type="Script" uid="uid://cwasvwhm5yg0o" path="res://scripts/player/states/walk.gd" id="11_qfm1y"]
|
||||||
[ext_resource type="Script" uid="uid://cq4i0afwesdm3" path="res://scripts/player/states/falling.gd" id="12_fulsm"]
|
[ext_resource type="Script" uid="uid://cq4i0afwesdm3" path="res://scripts/player/states/falling.gd" id="12_fulsm"]
|
||||||
[ext_resource type="Script" uid="uid://gan0amqbhi4i" path="res://scripts/gui/hud/player_ammo_display.gd" id="12_iortg"]
|
[ext_resource type="Script" uid="uid://gan0amqbhi4i" path="res://scripts/gui/hud/player_ammo_display.gd" id="12_iortg"]
|
||||||
|
[ext_resource type="Script" uid="uid://bala54fa32e35" path="res://scripts/gui/hud/player_round_display.gd" id="13_x73hv"]
|
||||||
|
[ext_resource type="Script" uid="uid://bos7nftlx8tv3" path="res://scripts/gui/hud/player_round_time.gd" id="13_xar7t"]
|
||||||
[ext_resource type="Script" uid="uid://xsgfbuyje35p" path="res://scripts/player/player_pickup.gd" id="17_fjvrb"]
|
[ext_resource type="Script" uid="uid://xsgfbuyje35p" path="res://scripts/player/player_pickup.gd" id="17_fjvrb"]
|
||||||
[ext_resource type="Script" uid="uid://doevvmbvhlig8" path="res://scripts/weapon_system/starting_weapon_spawner.gd" id="17_ownlk"]
|
[ext_resource type="Script" uid="uid://doevvmbvhlig8" path="res://scripts/weapon_system/starting_weapon_spawner.gd" id="17_ownlk"]
|
||||||
|
[ext_resource type="Script" uid="uid://bs4y647h5rdfr" path="res://scripts/player/player_movement.gd" id="19_70eug"]
|
||||||
|
[ext_resource type="Script" uid="uid://tb140f8fweug" path="res://scripts/player/states/death.gd" id="19_rwwcc"]
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_u8vuu"]
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_u8vuu"]
|
||||||
resource_local_to_scene = true
|
resource_local_to_scene = true
|
||||||
|
|
@ -97,6 +101,30 @@ tracks/3/keys = {
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [Vector3(0, 1.1793717, 0)]
|
"values": [Vector3(0, 1.1793717, 0)]
|
||||||
}
|
}
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("molikman_ingame:rotation")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector3(0, 0, 0)]
|
||||||
|
}
|
||||||
|
tracks/5/type = "value"
|
||||||
|
tracks/5/imported = false
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("CollisionShape3D:disabled")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_oprun"]
|
[sub_resource type="Animation" id="Animation_oprun"]
|
||||||
resource_name = "crouch"
|
resource_name = "crouch"
|
||||||
|
|
@ -149,10 +177,51 @@ tracks/3/keys = {
|
||||||
"values": [Vector3(0, 1.1793717, 0), Vector3(0, 0.6695229, 0)]
|
"values": [Vector3(0, 1.1793717, 0), Vector3(0, 0.6695229, 0)]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_rwwcc"]
|
||||||
|
resource_name = "die"
|
||||||
|
length = 0.25
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("molikman_ingame:rotation")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.23333333),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector3(0, 0, 0), Vector3(1.5707964, 0, 0)]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("molikman_ingame:position")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.23333333),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector3(0, 1.1793717, 0), Vector3(0, 0.019058675, 1.1753564)]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("CollisionShape3D:disabled")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_a8ls1"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_a8ls1"]
|
||||||
_data = {
|
_data = {
|
||||||
&"RESET": SubResource("Animation_a8ls1"),
|
&"RESET": SubResource("Animation_a8ls1"),
|
||||||
&"crouch": SubResource("Animation_oprun")
|
&"crouch": SubResource("Animation_oprun"),
|
||||||
|
&"die": SubResource("Animation_rwwcc")
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_3xmak"]
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_3xmak"]
|
||||||
|
|
@ -169,7 +238,7 @@ weapon_models = {
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="molikman_ingame" parent="." instance=ExtResource("8_smehm")]
|
[node name="molikman_ingame" parent="." instance=ExtResource("8_smehm")]
|
||||||
transform = Transform3D(0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 1.1793717, 0)
|
transform = Transform3D(0.75, 0, 0, 0, 0.74999994, 0, 0, 0, 0.74999994, 0, 1.1793717, 0)
|
||||||
|
|
||||||
[node name="VisibleEnabler" type="Node" parent="molikman_ingame"]
|
[node name="VisibleEnabler" type="Node" parent="molikman_ingame"]
|
||||||
script = ExtResource("4_smehm")
|
script = ExtResource("4_smehm")
|
||||||
|
|
@ -199,13 +268,9 @@ visible = false
|
||||||
[node name="VisibleDisabler" type="Node" parent="Camera3D/molikman_hands"]
|
[node name="VisibleDisabler" type="Node" parent="Camera3D/molikman_hands"]
|
||||||
script = ExtResource("4_smehm")
|
script = ExtResource("4_smehm")
|
||||||
|
|
||||||
[node name="RayCast3D" type="RayCast3D" parent="Camera3D"]
|
[node name="DeadSpectator" type="Camera3D" parent="Camera3D"]
|
||||||
target_position = Vector3(0, 0, -1000)
|
fov = 90.0
|
||||||
script = ExtResource("4_fjrip")
|
script = ExtResource("8_rwwcc")
|
||||||
|
|
||||||
[node name="TeamUpdater" type="Node" parent="Camera3D/RayCast3D" node_paths=PackedStringArray("player")]
|
|
||||||
script = ExtResource("7_a8ls1")
|
|
||||||
player = NodePath("../../..")
|
|
||||||
|
|
||||||
[node name="StandArea" type="Area3D" parent="."]
|
[node name="StandArea" type="Area3D" parent="."]
|
||||||
collision_layer = 0
|
collision_layer = 0
|
||||||
|
|
@ -293,6 +358,29 @@ grow_vertical = 0
|
||||||
label_settings = SubResource("LabelSettings_x73hv")
|
label_settings = SubResource("LabelSettings_x73hv")
|
||||||
script = ExtResource("12_iortg")
|
script = ExtResource("12_iortg")
|
||||||
|
|
||||||
|
[node name="RoundData" type="HBoxContainer" parent="HUD"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 5
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
offset_left = -20.0
|
||||||
|
offset_right = 20.0
|
||||||
|
offset_bottom = 40.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
|
||||||
|
[node name="RoundDisplayOur" type="Label" parent="HUD/RoundData"]
|
||||||
|
layout_mode = 2
|
||||||
|
script = ExtResource("13_x73hv")
|
||||||
|
our_side = true
|
||||||
|
|
||||||
|
[node name="RoundTime" type="Label" parent="HUD/RoundData"]
|
||||||
|
layout_mode = 2
|
||||||
|
script = ExtResource("13_xar7t")
|
||||||
|
|
||||||
|
[node name="RoundDisplayTheir" type="Label" parent="HUD/RoundData"]
|
||||||
|
layout_mode = 2
|
||||||
|
script = ExtResource("13_x73hv")
|
||||||
|
|
||||||
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
|
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
|
||||||
replication_config = SubResource("SceneReplicationConfig_qhqgy")
|
replication_config = SubResource("SceneReplicationConfig_qhqgy")
|
||||||
|
|
||||||
|
|
@ -301,39 +389,51 @@ script = ExtResource("8_f1ej7")
|
||||||
current_state = NodePath("Stand")
|
current_state = NodePath("Stand")
|
||||||
metadata/_custom_type_script = "uid://3777rkbebgjm"
|
metadata/_custom_type_script = "uid://3777rkbebgjm"
|
||||||
|
|
||||||
[node name="Crouch" type="Node" parent="BodyStateMachine" node_paths=PackedStringArray("stand_up_area", "player", "animation_player", "weapon_system")]
|
[node name="Crouch" type="Node" parent="BodyStateMachine" node_paths=PackedStringArray("stand_up_area", "player", "player_movement", "animation_player", "weapon_system")]
|
||||||
script = ExtResource("9_oprun")
|
script = ExtResource("9_oprun")
|
||||||
max_speed = 3.0
|
max_speed = 3.0
|
||||||
acceleration = 50.0
|
acceleration = 50.0
|
||||||
deceleration = 50.0
|
deceleration = 50.0
|
||||||
stand_up_area = NodePath("../../StandArea")
|
stand_up_area = NodePath("../../StandArea")
|
||||||
player = NodePath("../..")
|
player = NodePath("../..")
|
||||||
|
player_movement = NodePath("../../PlayerMovement")
|
||||||
animation_player = NodePath("../../AnimationPlayer")
|
animation_player = NodePath("../../AnimationPlayer")
|
||||||
weapon_system = NodePath("../../WeaponSystem")
|
weapon_system = NodePath("../../WeaponSystem")
|
||||||
|
|
||||||
[node name="Stand" type="Node" parent="BodyStateMachine" node_paths=PackedStringArray("player", "weapon_system")]
|
[node name="Stand" type="Node" parent="BodyStateMachine" node_paths=PackedStringArray("player", "player_movement", "weapon_system")]
|
||||||
script = ExtResource("10_a8ls1")
|
script = ExtResource("10_a8ls1")
|
||||||
max_speed = 6.0
|
max_speed = 6.0
|
||||||
acceleration = 100.0
|
acceleration = 100.0
|
||||||
deceleration = 50.0
|
deceleration = 50.0
|
||||||
JUMP_VELOCITY = 6.0
|
JUMP_VELOCITY = 6.0
|
||||||
player = NodePath("../..")
|
player = NodePath("../..")
|
||||||
|
player_movement = NodePath("../../PlayerMovement")
|
||||||
weapon_system = NodePath("../../WeaponSystem")
|
weapon_system = NodePath("../../WeaponSystem")
|
||||||
|
|
||||||
[node name="Walk" type="Node" parent="BodyStateMachine" node_paths=PackedStringArray("player", "weapon_system")]
|
[node name="Walk" type="Node" parent="BodyStateMachine" node_paths=PackedStringArray("player", "player_movement", "weapon_system")]
|
||||||
script = ExtResource("11_qfm1y")
|
script = ExtResource("11_qfm1y")
|
||||||
max_speed = 3.0
|
max_speed = 3.0
|
||||||
acceleration = 50.0
|
acceleration = 50.0
|
||||||
deceleration = 50.0
|
deceleration = 50.0
|
||||||
player = NodePath("../..")
|
player = NodePath("../..")
|
||||||
|
player_movement = NodePath("../../PlayerMovement")
|
||||||
weapon_system = NodePath("../../WeaponSystem")
|
weapon_system = NodePath("../../WeaponSystem")
|
||||||
|
|
||||||
[node name="Fall" type="Node" parent="BodyStateMachine" node_paths=PackedStringArray("player", "weapon_system")]
|
[node name="Fall" type="Node" parent="BodyStateMachine" node_paths=PackedStringArray("player", "player_movement", "weapon_system")]
|
||||||
script = ExtResource("12_fulsm")
|
script = ExtResource("12_fulsm")
|
||||||
player = NodePath("../..")
|
player = NodePath("../..")
|
||||||
|
player_movement = NodePath("../../PlayerMovement")
|
||||||
acceleration = 25.0
|
acceleration = 25.0
|
||||||
weapon_system = NodePath("../../WeaponSystem")
|
weapon_system = NodePath("../../WeaponSystem")
|
||||||
|
|
||||||
|
[node name="Death" type="Node" parent="BodyStateMachine" node_paths=PackedStringArray("animation_player")]
|
||||||
|
script = ExtResource("19_rwwcc")
|
||||||
|
animation_player = NodePath("../../AnimationPlayer")
|
||||||
|
|
||||||
|
[node name="PlayerMovement" type="Node" parent="." node_paths=PackedStringArray("player")]
|
||||||
|
script = ExtResource("19_70eug")
|
||||||
|
player = NodePath("..")
|
||||||
|
|
||||||
[node name="WeaponSystem" type="Node" parent="." node_paths=PackedStringArray("animation_player", "camera", "player")]
|
[node name="WeaponSystem" type="Node" parent="." node_paths=PackedStringArray("animation_player", "camera", "player")]
|
||||||
script = ExtResource("4_qlg0r")
|
script = ExtResource("4_qlg0r")
|
||||||
animation_player = NodePath("../Camera3D/molikman_hands/AnimationPlayer")
|
animation_player = NodePath("../Camera3D/molikman_hands/AnimationPlayer")
|
||||||
|
|
@ -371,8 +471,12 @@ weapon_system = NodePath("../WeaponSystem")
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.8543701, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.8543701, 0)
|
||||||
shape = SubResource("CapsuleShape3D_3xmak")
|
shape = SubResource("CapsuleShape3D_3xmak")
|
||||||
|
|
||||||
|
[connection signal="died" from="." to="molikman_ingame/VisibleEnabler" method="reverse"]
|
||||||
|
[connection signal="died" from="." to="Camera3D/molikman_hands/VisibleDisabler" method="reverse"]
|
||||||
|
[connection signal="died" from="." to="WeaponSystem" method="disable"]
|
||||||
|
[connection signal="died" from="." to="Camera3D/DeadSpectator" method="set_active"]
|
||||||
|
[connection signal="died" from="." to="BodyStateMachine/Death" method="on_death"]
|
||||||
[connection signal="health_changed" from="." to="HUD/Healthbar" method="on_hp_changed"]
|
[connection signal="health_changed" from="." to="HUD/Healthbar" method="on_hp_changed"]
|
||||||
[connection signal="spawned" from="." to="Camera3D/RayCast3D/TeamUpdater" method="on_spawned"]
|
|
||||||
[connection signal="spawned" from="." to="TeamUpdater" method="on_spawned"]
|
[connection signal="spawned" from="." to="TeamUpdater" method="on_spawned"]
|
||||||
[connection signal="ammo_updated" from="WeaponSystem" to="HUD/AmmoDisplay" method="on_ammo_updated"]
|
[connection signal="ammo_updated" from="WeaponSystem" to="HUD/AmmoDisplay" method="on_ammo_updated"]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,3 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1307683, 0)
|
||||||
|
|
||||||
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
|
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
|
||||||
replication_config = SubResource("SceneReplicationConfig_yh58y")
|
replication_config = SubResource("SceneReplicationConfig_yh58y")
|
||||||
|
|
||||||
[node name="Timer" type="Timer" parent="."]
|
|
||||||
wait_time = 5.0
|
|
||||||
one_shot = true
|
|
||||||
autostart = true
|
|
||||||
|
|
|
||||||
18
scripts/gui/hud/player_round_display.gd
Normal file
18
scripts/gui/hud/player_round_display.gd
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
extends Label
|
||||||
|
|
||||||
|
@export var our_side: bool
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready() -> void:
|
||||||
|
if our_side:
|
||||||
|
match Lobby.get_team():
|
||||||
|
Session.TEAMS.DEFENCE:
|
||||||
|
text = str(Session.defender_score)
|
||||||
|
Session.TEAMS.ATTACK, Session.TEAMS.SPECTATE, Session.TEAMS.UNASSIGNED:
|
||||||
|
text = str(Session.attacker_score)
|
||||||
|
else:
|
||||||
|
match Lobby.get_team():
|
||||||
|
Session.TEAMS.DEFENCE:
|
||||||
|
text = str(Session.attacker_score)
|
||||||
|
Session.TEAMS.ATTACK, Session.TEAMS.SPECTATE, Session.TEAMS.UNASSIGNED:
|
||||||
|
text = str(Session.defender_score)
|
||||||
1
scripts/gui/hud/player_round_display.gd.uid
Normal file
1
scripts/gui/hud/player_round_display.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://bala54fa32e35
|
||||||
8
scripts/gui/hud/player_round_time.gd
Normal file
8
scripts/gui/hud/player_round_time.gd
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
extends Label
|
||||||
|
|
||||||
|
func _process(_delta: float) -> void:
|
||||||
|
var seconds_u = int(round(Session.reference_round_time))
|
||||||
|
var seconds = seconds_u % 60
|
||||||
|
@warning_ignore("integer_division")
|
||||||
|
var minutes = seconds_u / 60
|
||||||
|
text = str(minutes)+":"+str(seconds).pad_zeros(2)
|
||||||
1
scripts/gui/hud/player_round_time.gd.uid
Normal file
1
scripts/gui/hud/player_round_time.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://bos7nftlx8tv3
|
||||||
|
|
@ -3,11 +3,11 @@ extends Node3D
|
||||||
@export var item: PackedScene
|
@export var item: PackedScene
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
deferred_spawn.call_deferred()
|
if multiplayer.is_server():
|
||||||
|
Session.round_started.connect(spawn)
|
||||||
|
|
||||||
func deferred_spawn():
|
func spawn():
|
||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
var node = item.instantiate()
|
var node = item.instantiate()
|
||||||
add_sibling(node,true)
|
add_sibling(node,true)
|
||||||
node.global_position = global_position
|
node.global_position = global_position
|
||||||
queue_free()
|
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,15 @@ signal lobby_joined
|
||||||
signal lobby_closed
|
signal lobby_closed
|
||||||
signal update_teams_state
|
signal update_teams_state
|
||||||
|
|
||||||
|
var in_lobby: bool = false
|
||||||
|
|
||||||
var attack_team: Array[int] = []
|
var attack_team: Array[int] = []
|
||||||
var defence_team: Array[int] = []
|
var defence_team: Array[int] = []
|
||||||
var specators_team: Array[int] = []
|
var specators_team: Array[int] = []
|
||||||
|
|
||||||
|
var win_score = 13
|
||||||
|
var half_rounds = 12
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
multiplayer.peer_disconnected.connect(player_left)
|
multiplayer.peer_disconnected.connect(player_left)
|
||||||
multiplayer.server_disconnected.connect(server_disconnected)
|
multiplayer.server_disconnected.connect(server_disconnected)
|
||||||
|
|
@ -36,6 +41,7 @@ func host() -> void:
|
||||||
multiplayer.multiplayer_peer = peer
|
multiplayer.multiplayer_peer = peer
|
||||||
lobby_created.emit()
|
lobby_created.emit()
|
||||||
specators_team.append(multiplayer.get_unique_id())
|
specators_team.append(multiplayer.get_unique_id())
|
||||||
|
in_lobby = true
|
||||||
|
|
||||||
func join(ip: String) -> Error:
|
func join(ip: String) -> Error:
|
||||||
var peer: ENetMultiplayerPeer = ENetMultiplayerPeer.new()
|
var peer: ENetMultiplayerPeer = ENetMultiplayerPeer.new()
|
||||||
|
|
@ -44,6 +50,7 @@ func join(ip: String) -> Error:
|
||||||
return res
|
return res
|
||||||
multiplayer.multiplayer_peer = peer
|
multiplayer.multiplayer_peer = peer
|
||||||
lobby_joined.emit()
|
lobby_joined.emit()
|
||||||
|
in_lobby = true
|
||||||
return Error.OK
|
return Error.OK
|
||||||
|
|
||||||
func leave() -> void:
|
func leave() -> void:
|
||||||
|
|
@ -52,6 +59,7 @@ func leave() -> void:
|
||||||
defence_team.clear()
|
defence_team.clear()
|
||||||
specators_team.clear()
|
specators_team.clear()
|
||||||
lobby_closed.emit()
|
lobby_closed.emit()
|
||||||
|
in_lobby = false
|
||||||
|
|
||||||
func add_and_sync_peer(id: int) -> void:
|
func add_and_sync_peer(id: int) -> void:
|
||||||
if multiplayer.is_server() == false:
|
if multiplayer.is_server() == false:
|
||||||
|
|
@ -100,3 +108,16 @@ func team_switch_notification(id: int, team: int) -> void:
|
||||||
@rpc("authority","call_local","reliable")
|
@rpc("authority","call_local","reliable")
|
||||||
func start_game() -> void:
|
func start_game() -> void:
|
||||||
get_tree().change_scene_to_file("res://levels/prototype_scene.tscn")
|
get_tree().change_scene_to_file("res://levels/prototype_scene.tscn")
|
||||||
|
if multiplayer.is_server():
|
||||||
|
await get_tree().scene_changed
|
||||||
|
Session.start_session()
|
||||||
|
|
||||||
|
func get_team() -> Session.TEAMS:
|
||||||
|
var id = multiplayer.get_unique_id()
|
||||||
|
if attack_team.has(id):
|
||||||
|
return Session.TEAMS.ATTACK
|
||||||
|
if defence_team.has(id):
|
||||||
|
return Session.TEAMS.DEFENCE
|
||||||
|
if specators_team.has(id):
|
||||||
|
return Session.TEAMS.SPECTATE
|
||||||
|
return Session.TEAMS.UNASSIGNED
|
||||||
|
|
|
||||||
|
|
@ -4,3 +4,6 @@ extends Node
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
get_parent().visible = (get_multiplayer_authority() != multiplayer.get_unique_id()) == visible_for_others
|
get_parent().visible = (get_multiplayer_authority() != multiplayer.get_unique_id()) == visible_for_others
|
||||||
|
|
||||||
|
func reverse() -> void:
|
||||||
|
get_parent().visible = not get_parent().visible
|
||||||
|
|
|
||||||
|
|
@ -6,15 +6,186 @@ enum TEAMS {
|
||||||
SPECTATE,
|
SPECTATE,
|
||||||
UNASSIGNED
|
UNASSIGNED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum ROUND_STATES {
|
||||||
|
NOT_SET = 0,
|
||||||
|
BUY = 1,
|
||||||
|
ROUND = 2,
|
||||||
|
AFTER_ROUND = 3,
|
||||||
|
AFTER_PLANT = 4,
|
||||||
|
AFTER_SESSION = 5,
|
||||||
|
}
|
||||||
|
|
||||||
const ATTACK_LAYER: int = 0b10000
|
const ATTACK_LAYER: int = 0b10000
|
||||||
const DEFENCE_LAYER: int = 0b100000
|
const DEFENCE_LAYER: int = 0b100000
|
||||||
|
|
||||||
|
signal round_started
|
||||||
|
signal round_state_changed(state: int)
|
||||||
|
|
||||||
var player_nodes: Dictionary[int,Player] = {}
|
var player_nodes: Dictionary[int,Player] = {}
|
||||||
|
var object_containers: Array[ObjectContainer]
|
||||||
|
|
||||||
var dynamic_objects_spawner: MultiplayerSpawner
|
var dynamic_objects_spawner: MultiplayerSpawner
|
||||||
var plants: Array[PlantSite]
|
var plants: Array[PlantSite]
|
||||||
var plant_deadzones: Dictionary[StringName, Area3D]
|
var plant_deadzones: Dictionary[StringName, Area3D]
|
||||||
|
|
||||||
|
var current_round: int = 0
|
||||||
|
var attacker_score: int = 0
|
||||||
|
var defender_score: int = 0
|
||||||
|
var attackers_alive: int = 0
|
||||||
|
var defenders_alive: int = 0
|
||||||
|
|
||||||
|
var bomb_timer: Timer
|
||||||
|
var round_timer: Timer
|
||||||
|
var buy_timer: Timer
|
||||||
|
|
||||||
|
var round_state: ROUND_STATES
|
||||||
|
var session_started: bool = false
|
||||||
|
|
||||||
|
var reference_round_time: float
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if multiplayer.is_server() == false:
|
||||||
|
return
|
||||||
|
|
||||||
|
bomb_timer = Timer.new()
|
||||||
|
bomb_timer.wait_time = 45.0
|
||||||
|
bomb_timer.one_shot = true
|
||||||
|
bomb_timer.timeout.connect(end_round.bind(TEAMS.ATTACK))
|
||||||
|
|
||||||
|
round_timer = Timer.new()
|
||||||
|
round_timer.wait_time = 150
|
||||||
|
round_timer.one_shot = true
|
||||||
|
round_timer.timeout.connect(end_round.bind(TEAMS.DEFENCE))
|
||||||
|
|
||||||
|
buy_timer = Timer.new()
|
||||||
|
buy_timer.wait_time = 15
|
||||||
|
buy_timer.one_shot = true
|
||||||
|
buy_timer.timeout.connect(begin_main_stage)
|
||||||
|
|
||||||
|
add_child(bomb_timer)
|
||||||
|
add_child(round_timer)
|
||||||
|
add_child(buy_timer)
|
||||||
|
|
||||||
|
func _process(_delta: float) -> void:
|
||||||
|
if multiplayer.is_server() == false or not session_started:
|
||||||
|
return
|
||||||
|
match round_state:
|
||||||
|
ROUND_STATES.BUY:
|
||||||
|
reference_round_time = buy_timer.time_left
|
||||||
|
ROUND_STATES.ROUND:
|
||||||
|
reference_round_time = round_timer.time_left
|
||||||
|
ROUND_STATES.AFTER_PLANT:
|
||||||
|
reference_round_time = bomb_timer.time_left
|
||||||
|
_:
|
||||||
|
reference_round_time = 0
|
||||||
|
update_clock.rpc(reference_round_time)
|
||||||
|
|
||||||
|
@rpc("authority","call_remote","unreliable")
|
||||||
|
func update_clock(time: float):
|
||||||
|
reference_round_time = time
|
||||||
|
|
||||||
|
@rpc("any_peer","call_remote","reliable")
|
||||||
|
func start_session() -> void:
|
||||||
|
if not is_server_request():
|
||||||
|
return
|
||||||
|
if multiplayer.is_server():
|
||||||
|
start_session.rpc()
|
||||||
|
|
||||||
|
current_round = 0
|
||||||
|
attacker_score = 0
|
||||||
|
defender_score = 0
|
||||||
|
session_started = true
|
||||||
|
|
||||||
|
start_round()
|
||||||
|
|
||||||
|
@rpc("any_peer","call_remote","reliable")
|
||||||
|
func end_session() -> void:
|
||||||
|
if not is_server_request():
|
||||||
|
return
|
||||||
|
if multiplayer.is_server():
|
||||||
|
end_session.rpc()
|
||||||
|
|
||||||
|
bomb_timer.stop()
|
||||||
|
round_timer.stop()
|
||||||
|
buy_timer.stop()
|
||||||
|
object_containers.clear()
|
||||||
|
|
||||||
|
session_started = false
|
||||||
|
|
||||||
|
@rpc("any_peer","call_remote","reliable")
|
||||||
|
func start_round() -> void:
|
||||||
|
if not is_server_request():
|
||||||
|
return
|
||||||
|
if multiplayer.is_server():
|
||||||
|
buy_timer.start()
|
||||||
|
start_round.rpc()
|
||||||
|
for container in object_containers:
|
||||||
|
container.despawn()
|
||||||
|
attackers_alive = 0
|
||||||
|
defenders_alive = 0
|
||||||
|
|
||||||
|
current_round += 1
|
||||||
|
|
||||||
|
round_started.emit.call_deferred()
|
||||||
|
round_state = ROUND_STATES.BUY
|
||||||
|
round_state_changed.emit.call_deferred(round_state)
|
||||||
|
|
||||||
|
@rpc("any_peer","call_remote","reliable")
|
||||||
|
func end_round(win_team: int) -> void:
|
||||||
|
if not is_server_request():
|
||||||
|
return
|
||||||
|
if multiplayer.is_server():
|
||||||
|
get_tree().create_timer(5).timeout.connect(start_round)
|
||||||
|
end_round.rpc(win_team)
|
||||||
|
|
||||||
|
if win_team == TEAMS.DEFENCE:
|
||||||
|
defender_score += 1
|
||||||
|
elif win_team == TEAMS.ATTACK:
|
||||||
|
attacker_score += 1
|
||||||
|
|
||||||
|
round_state = ROUND_STATES.AFTER_ROUND
|
||||||
|
round_state_changed.emit(round_state)
|
||||||
|
|
||||||
|
@rpc("any_peer","call_remote","reliable")
|
||||||
|
func begin_main_stage() -> void:
|
||||||
|
if not is_server_request():
|
||||||
|
return
|
||||||
|
if multiplayer.is_server():
|
||||||
|
round_timer.start()
|
||||||
|
begin_main_stage.rpc()
|
||||||
|
|
||||||
|
round_state = ROUND_STATES.ROUND
|
||||||
|
round_state_changed.emit(round_state)
|
||||||
|
|
||||||
|
@rpc("any_peer","call_remote","reliable")
|
||||||
|
func begin_bomb_stage() -> void:
|
||||||
|
if not is_server_request():
|
||||||
|
return
|
||||||
|
if multiplayer.is_server():
|
||||||
|
bomb_timer.start()
|
||||||
|
round_timer.stop()
|
||||||
|
begin_bomb_stage.rpc()
|
||||||
|
|
||||||
|
round_state = ROUND_STATES.AFTER_PLANT
|
||||||
|
round_state_changed.emit(round_state)
|
||||||
|
|
||||||
|
@rpc("any_peer","call_local","reliable")
|
||||||
|
func add_dead(team: int):
|
||||||
|
if multiplayer.is_server() == false:
|
||||||
|
return
|
||||||
|
if team == TEAMS.ATTACK:
|
||||||
|
attackers_alive -= 1
|
||||||
|
if attackers_alive == 0 and round_state != ROUND_STATES.AFTER_ROUND:
|
||||||
|
end_round(TEAMS.DEFENCE)
|
||||||
|
if team == TEAMS.DEFENCE:
|
||||||
|
defenders_alive -= 1
|
||||||
|
if defenders_alive == 0 and round_state != ROUND_STATES.AFTER_ROUND:
|
||||||
|
end_round(TEAMS.ATTACK)
|
||||||
|
|
||||||
|
func is_server_request() -> bool:
|
||||||
|
return multiplayer.is_server() or multiplayer.get_remote_sender_id() == 1
|
||||||
|
|
||||||
## Spawns dynamic object at game scene [br]
|
## Spawns dynamic object at game scene [br]
|
||||||
## Dictionary keys: [br]
|
## Dictionary keys: [br]
|
||||||
## (Required) scene - path/uuid to scene [br]
|
## (Required) scene - path/uuid to scene [br]
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,14 @@ func _ready() -> void:
|
||||||
if not multiplayer.is_server():
|
if not multiplayer.is_server():
|
||||||
queue_free()
|
queue_free()
|
||||||
return
|
return
|
||||||
|
Session.round_started.connect(spawn)
|
||||||
|
|
||||||
|
func _exit_tree() -> void:
|
||||||
|
if not multiplayer.is_server():
|
||||||
|
return
|
||||||
|
Session.round_started.disconnect(spawn)
|
||||||
|
|
||||||
|
func spawn():
|
||||||
match team:
|
match team:
|
||||||
Session.TEAMS.ATTACK:
|
Session.TEAMS.ATTACK:
|
||||||
for attacker in Lobby.attack_team:
|
for attacker in Lobby.attack_team:
|
||||||
|
|
@ -23,6 +31,10 @@ func spawn_player(id: int) -> void:
|
||||||
var inst: Player = player.instantiate()
|
var inst: Player = player.instantiate()
|
||||||
Session.player_nodes[id] = inst
|
Session.player_nodes[id] = inst
|
||||||
inst.name = str(id)
|
inst.name = str(id)
|
||||||
|
if team == Session.TEAMS.DEFENCE:
|
||||||
|
Session.defenders_alive += 1
|
||||||
|
elif team == Session.TEAMS.ATTACK:
|
||||||
|
Session.attackers_alive += 1
|
||||||
|
|
||||||
deferred_setup.bind(inst,team).call_deferred()
|
deferred_setup.bind(inst,team).call_deferred()
|
||||||
|
|
||||||
|
|
@ -34,7 +46,7 @@ func spawn_spectator(id: int) -> void:
|
||||||
deferred_setup.bind(inst,Session.TEAMS.SPECTATE).call_deferred()
|
deferred_setup.bind(inst,Session.TEAMS.SPECTATE).call_deferred()
|
||||||
|
|
||||||
func deferred_setup(what: Node3D, new_team: Session.TEAMS):
|
func deferred_setup(what: Node3D, new_team: Session.TEAMS):
|
||||||
get_parent().add_child(what)
|
get_parent().add_child(what,true)
|
||||||
var distance = randf_range(0,spawn_radius)
|
var distance = randf_range(0,spawn_radius)
|
||||||
var angle = randf_range(0,TAU)
|
var angle = randf_range(0,TAU)
|
||||||
var new_position = global_position + Vector3.RIGHT.rotated(Vector3.UP,angle) * distance
|
var new_position = global_position + Vector3.RIGHT.rotated(Vector3.UP,angle) * distance
|
||||||
|
|
|
||||||
16
scripts/object_container.gd
Normal file
16
scripts/object_container.gd
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
class_name ObjectContainer
|
||||||
|
|
||||||
|
@export var exlusion_list: Array[Node]
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if not multiplayer.is_server(): return
|
||||||
|
Session.object_containers.append(self)
|
||||||
|
|
||||||
|
func despawn():
|
||||||
|
if not multiplayer.is_server(): return
|
||||||
|
for child in get_children():
|
||||||
|
if exlusion_list.has(child):
|
||||||
|
continue
|
||||||
|
child.queue_free()
|
||||||
1
scripts/object_container.gd.uid
Normal file
1
scripts/object_container.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://3i00rp8urth7
|
||||||
36
scripts/player/dead_player_spectator.gd
Normal file
36
scripts/player/dead_player_spectator.gd
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
extends Camera3D
|
||||||
|
|
||||||
|
@export var SENSITIVITY = 0.02
|
||||||
|
@export var SPEED = 10.0
|
||||||
|
|
||||||
|
var active: bool
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if not is_multiplayer_authority():
|
||||||
|
return
|
||||||
|
|
||||||
|
func set_active() -> void:
|
||||||
|
if not is_multiplayer_authority():
|
||||||
|
return
|
||||||
|
active = true
|
||||||
|
current = true
|
||||||
|
|
||||||
|
func _process(delta: float) -> void:
|
||||||
|
if active == false or not is_multiplayer_authority():
|
||||||
|
return
|
||||||
|
var xz_plane = Input.get_vector("plr_strafe_l","plr_strafe_r","plr_forward","plr_back")
|
||||||
|
var y = Input.get_axis("spc_down","spc_up")
|
||||||
|
|
||||||
|
var direction = Vector3(xz_plane.x,y,xz_plane.y)
|
||||||
|
global_position += global_basis * direction * SPEED * delta
|
||||||
|
|
||||||
|
func rotate_camera(x,y) -> void:
|
||||||
|
rotate_y(x)
|
||||||
|
rotation.x = clamp(rotation.x + y,-PI/2,PI/2)
|
||||||
|
orthonormalize()
|
||||||
|
|
||||||
|
func _input(event: InputEvent) -> void:
|
||||||
|
if active == false or not is_multiplayer_authority():
|
||||||
|
return
|
||||||
|
if event is InputEventMouseMotion:
|
||||||
|
rotate_camera(-event.relative.x * SENSITIVITY,-event.relative.y * SENSITIVITY)
|
||||||
1
scripts/player/dead_player_spectator.gd.uid
Normal file
1
scripts/player/dead_player_spectator.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://bl8gfrrc512q2
|
||||||
|
|
@ -7,6 +7,7 @@ class_name Player
|
||||||
|
|
||||||
signal spawned
|
signal spawned
|
||||||
signal health_changed(to: int)
|
signal health_changed(to: int)
|
||||||
|
signal died
|
||||||
|
|
||||||
const MAX_HP = 100
|
const MAX_HP = 100
|
||||||
|
|
||||||
|
|
@ -23,8 +24,6 @@ const MAX_HP = 100
|
||||||
get:
|
get:
|
||||||
return hp
|
return hp
|
||||||
|
|
||||||
var TEMP_start_pos
|
|
||||||
|
|
||||||
func _enter_tree() -> void:
|
func _enter_tree() -> void:
|
||||||
set_multiplayer_authority(str(name).to_int())
|
set_multiplayer_authority(str(name).to_int())
|
||||||
|
|
||||||
|
|
@ -37,9 +36,8 @@ func _physics_process(_delta: float) -> void:
|
||||||
func die() -> void:
|
func die() -> void:
|
||||||
if (not is_multiplayer_authority()):
|
if (not is_multiplayer_authority()):
|
||||||
return
|
return
|
||||||
|
Session.add_dead.rpc(team)
|
||||||
global_position = TEMP_start_pos
|
died.emit()
|
||||||
hp = MAX_HP
|
|
||||||
|
|
||||||
@rpc("any_peer","call_local","reliable")
|
@rpc("any_peer","call_local","reliable")
|
||||||
func kill_request() -> void:
|
func kill_request() -> void:
|
||||||
|
|
@ -51,7 +49,6 @@ func kill_request() -> void:
|
||||||
@rpc("any_peer","call_local","reliable")
|
@rpc("any_peer","call_local","reliable")
|
||||||
func set_after_spawn(start_position: Vector3,new_team: int):
|
func set_after_spawn(start_position: Vector3,new_team: int):
|
||||||
global_position = start_position
|
global_position = start_position
|
||||||
TEMP_start_pos = global_position
|
|
||||||
team = new_team as Session.TEAMS
|
team = new_team as Session.TEAMS
|
||||||
spawned.emit()
|
spawned.emit()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ class_name PlayerCamera
|
||||||
var vertical_compensation : float
|
var vertical_compensation : float
|
||||||
var compensation_tween: Tween
|
var compensation_tween: Tween
|
||||||
var compensate: bool = false
|
var compensate: bool = false
|
||||||
|
var disable: bool = false
|
||||||
var compensation_speed: float
|
var compensation_speed: float
|
||||||
@export var compensation_time: float = 1.0
|
@export var compensation_time: float = 1.0
|
||||||
@export var compensation_delay: float = 0.5
|
@export var compensation_delay: float = 0.5
|
||||||
|
|
@ -20,6 +21,7 @@ func _ready() -> void:
|
||||||
current = true
|
current = true
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
|
if disable: return
|
||||||
if compensate:
|
if compensate:
|
||||||
if abs(vertical_compensation) <= 0.001:
|
if abs(vertical_compensation) <= 0.001:
|
||||||
vertical_compensation = 0
|
vertical_compensation = 0
|
||||||
|
|
@ -28,7 +30,7 @@ func _process(delta: float) -> void:
|
||||||
rotate_camera(0,compensation_speed * delta)
|
rotate_camera(0,compensation_speed * delta)
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
if not is_multiplayer_authority():
|
if not is_multiplayer_authority() or disable:
|
||||||
return
|
return
|
||||||
if event is InputEventMouseMotion:
|
if event is InputEventMouseMotion:
|
||||||
rotate_camera(-event.relative.x * SENSITIVITY,-event.relative.y * SENSITIVITY)
|
rotate_camera(-event.relative.x * SENSITIVITY,-event.relative.y * SENSITIVITY)
|
||||||
|
|
|
||||||
21
scripts/player/player_movement.gd
Normal file
21
scripts/player/player_movement.gd
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
class_name PlayerMovement
|
||||||
|
|
||||||
|
@export var player: Player
|
||||||
|
|
||||||
|
func process_movement(max_speed: float,acceleration: float,deceleration: float,delta: float) -> void:
|
||||||
|
if is_multiplayer_authority() == false:
|
||||||
|
return
|
||||||
|
if Session.round_state == Session.ROUND_STATES.BUY:
|
||||||
|
player.velocity.x = 0
|
||||||
|
player.velocity.z = 0
|
||||||
|
return
|
||||||
|
var input_dir := Input.get_vector("plr_strafe_r","plr_strafe_l", "plr_back","plr_forward")
|
||||||
|
var direction := (player.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
||||||
|
if direction:
|
||||||
|
player.velocity.x = clamp(player.velocity.x + direction.x * acceleration * delta,-max_speed*abs(direction.x),max_speed*abs(direction.x))
|
||||||
|
player.velocity.z = clamp(player.velocity.z + direction.z * acceleration * delta,-max_speed*abs(direction.z),max_speed*abs(direction.z))
|
||||||
|
else:
|
||||||
|
player.velocity.x = move_toward(player.velocity.x, 0, deceleration*delta)
|
||||||
|
player.velocity.z = move_toward(player.velocity.z, 0, deceleration*delta)
|
||||||
1
scripts/player/player_movement.gd.uid
Normal file
1
scripts/player/player_movement.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://bs4y647h5rdfr
|
||||||
|
|
@ -14,6 +14,8 @@ func _ready() -> void:
|
||||||
current = true
|
current = true
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
|
if not is_multiplayer_authority():
|
||||||
|
return
|
||||||
var xz_plane = Input.get_vector("plr_strafe_l","plr_strafe_r","plr_forward","plr_back")
|
var xz_plane = Input.get_vector("plr_strafe_l","plr_strafe_r","plr_forward","plr_back")
|
||||||
var y = Input.get_axis("spc_down","spc_up")
|
var y = Input.get_axis("spc_down","spc_up")
|
||||||
|
|
||||||
|
|
@ -26,6 +28,8 @@ func rotate_camera(x,y) -> void:
|
||||||
orthonormalize()
|
orthonormalize()
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
|
if not is_multiplayer_authority():
|
||||||
|
return
|
||||||
if event is InputEventMouseMotion:
|
if event is InputEventMouseMotion:
|
||||||
rotate_camera(-event.relative.x * SENSITIVITY,-event.relative.y * SENSITIVITY)
|
rotate_camera(-event.relative.x * SENSITIVITY,-event.relative.y * SENSITIVITY)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ extends State
|
||||||
@export var toggle: bool = false
|
@export var toggle: bool = false
|
||||||
@export var stand_up_area: Area3D
|
@export var stand_up_area: Area3D
|
||||||
@export var player: Player
|
@export var player: Player
|
||||||
|
@export var player_movement: PlayerMovement
|
||||||
@export var animation_player: AnimationPlayer
|
@export var animation_player: AnimationPlayer
|
||||||
@export var crouch_time: float = 0.1
|
@export var crouch_time: float = 0.1
|
||||||
@export var weapon_system: WeaponSystem
|
@export var weapon_system: WeaponSystem
|
||||||
|
|
@ -28,15 +29,7 @@ func physics_update(delta: float) -> void:
|
||||||
transition.emit("Fall")
|
transition.emit("Fall")
|
||||||
return
|
return
|
||||||
|
|
||||||
var input_dir := Input.get_vector("plr_strafe_r","plr_strafe_l", "plr_back","plr_forward")
|
player_movement.process_movement(max_speed * weapon_system.get_speed_modifier(),acceleration,deceleration,delta)
|
||||||
var direction := (player.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
|
||||||
var modified_max_speed = max_speed * weapon_system.get_speed_modifier()
|
|
||||||
if direction:
|
|
||||||
player.velocity.x = clamp(player.velocity.x + direction.x * acceleration * delta,-modified_max_speed*abs(direction.x),modified_max_speed*abs(direction.x))
|
|
||||||
player.velocity.z = clamp(player.velocity.z + direction.z * acceleration * delta,-modified_max_speed*abs(direction.z),modified_max_speed*abs(direction.z))
|
|
||||||
else:
|
|
||||||
player.velocity.x = move_toward(player.velocity.x, 0, deceleration*delta)
|
|
||||||
player.velocity.z = move_toward(player.velocity.z, 0, deceleration*delta)
|
|
||||||
|
|
||||||
func state_input(event: InputEvent) -> void:
|
func state_input(event: InputEvent) -> void:
|
||||||
if (toggle == true and event.is_action_pressed("plr_crouch")) or (toggle == false and event.is_action_released("plr_crouch")):
|
if (toggle == true and event.is_action_pressed("plr_crouch")) or (toggle == false and event.is_action_released("plr_crouch")):
|
||||||
|
|
|
||||||
12
scripts/player/states/death.gd
Normal file
12
scripts/player/states/death.gd
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
extends State
|
||||||
|
|
||||||
|
@export var animation_player: AnimationPlayer
|
||||||
|
|
||||||
|
func on_death() -> void:
|
||||||
|
transition.emit("Death")
|
||||||
|
|
||||||
|
func enter() -> void:
|
||||||
|
animation_player.play("die")
|
||||||
|
|
||||||
|
func exit() -> void:
|
||||||
|
pass
|
||||||
1
scripts/player/states/death.gd.uid
Normal file
1
scripts/player/states/death.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://tb140f8fweug
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
extends State
|
extends State
|
||||||
|
|
||||||
@export var player: Player
|
@export var player: Player
|
||||||
|
@export var player_movement: PlayerMovement
|
||||||
@export var max_speed: float = 5.0
|
@export var max_speed: float = 5.0
|
||||||
@export var acceleration: float
|
@export var acceleration: float
|
||||||
@export var weapon_system: WeaponSystem
|
@export var weapon_system: WeaponSystem
|
||||||
|
|
@ -20,11 +21,4 @@ func physics_update(delta: float) -> void:
|
||||||
|
|
||||||
player.velocity += player.get_gravity() * delta
|
player.velocity += player.get_gravity() * delta
|
||||||
|
|
||||||
var input_dir := Input.get_vector("plr_strafe_r","plr_strafe_l", "plr_back","plr_forward")
|
player_movement.process_movement(max_speed * weapon_system.get_speed_modifier(),acceleration,0,delta)
|
||||||
var direction := (player.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
|
||||||
var modified_max_speed = max_speed * weapon_system.get_speed_modifier()
|
|
||||||
if direction:
|
|
||||||
if abs(player.velocity.x + direction.x * acceleration * delta) < abs(modified_max_speed * direction.x):
|
|
||||||
player.velocity.x += direction.x * acceleration * delta
|
|
||||||
if abs(player.velocity.z + direction.z * acceleration * delta) < abs(modified_max_speed * direction.z):
|
|
||||||
player.velocity.z += direction.z * acceleration * delta
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ extends State
|
||||||
@export var deceleration: float = 200.0
|
@export var deceleration: float = 200.0
|
||||||
@export var JUMP_VELOCITY: float = 4.5
|
@export var JUMP_VELOCITY: float = 4.5
|
||||||
@export var player: Player
|
@export var player: Player
|
||||||
|
@export var player_movement: PlayerMovement
|
||||||
@export var weapon_system: WeaponSystem
|
@export var weapon_system: WeaponSystem
|
||||||
|
|
||||||
func enter() -> void:
|
func enter() -> void:
|
||||||
|
|
@ -17,7 +18,7 @@ func physics_update(delta: float) -> void:
|
||||||
if not is_multiplayer_authority():
|
if not is_multiplayer_authority():
|
||||||
return
|
return
|
||||||
if Input.is_action_just_pressed("plr_jump") and player.is_on_floor():
|
if Input.is_action_just_pressed("plr_jump") and player.is_on_floor():
|
||||||
player.velocity.y = JUMP_VELOCITY
|
player.velocity.y = JUMP_VELOCITY * sign(weapon_system.get_speed_modifier())
|
||||||
transition.emit("Fall")
|
transition.emit("Fall")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
@ -25,15 +26,7 @@ func physics_update(delta: float) -> void:
|
||||||
transition.emit("Fall")
|
transition.emit("Fall")
|
||||||
return
|
return
|
||||||
|
|
||||||
var input_dir := Input.get_vector("plr_strafe_r","plr_strafe_l", "plr_back","plr_forward")
|
player_movement.process_movement(max_speed * weapon_system.get_speed_modifier(),acceleration,deceleration,delta)
|
||||||
var direction := (player.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
|
||||||
var modified_max_speed = max_speed * weapon_system.get_speed_modifier()
|
|
||||||
if direction:
|
|
||||||
player.velocity.x = clamp(player.velocity.x + direction.x * acceleration * delta,-modified_max_speed*abs(direction.x),modified_max_speed*abs(direction.x))
|
|
||||||
player.velocity.z = clamp(player.velocity.z + direction.z * acceleration * delta,-modified_max_speed*abs(direction.z),modified_max_speed*abs(direction.z))
|
|
||||||
else:
|
|
||||||
player.velocity.x = move_toward(player.velocity.x, 0, deceleration*delta)
|
|
||||||
player.velocity.z = move_toward(player.velocity.z, 0, deceleration*delta)
|
|
||||||
|
|
||||||
func state_input(event: InputEvent) -> void:
|
func state_input(event: InputEvent) -> void:
|
||||||
if event.is_action_pressed("plr_crouch"):
|
if event.is_action_pressed("plr_crouch"):
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ extends State
|
||||||
@export var deceleration: float = 100.0
|
@export var deceleration: float = 100.0
|
||||||
@export var JUMP_VELOCITY: float = 4.5
|
@export var JUMP_VELOCITY: float = 4.5
|
||||||
@export var player: Player
|
@export var player: Player
|
||||||
|
@export var player_movement: PlayerMovement
|
||||||
@export var weapon_system: WeaponSystem
|
@export var weapon_system: WeaponSystem
|
||||||
|
|
||||||
func enter() -> void:
|
func enter() -> void:
|
||||||
|
|
@ -25,15 +26,7 @@ func physics_update(delta: float) -> void:
|
||||||
transition.emit("Fall")
|
transition.emit("Fall")
|
||||||
return
|
return
|
||||||
|
|
||||||
var input_dir := Input.get_vector("plr_strafe_r","plr_strafe_l", "plr_back","plr_forward")
|
player_movement.process_movement(max_speed * weapon_system.get_speed_modifier(),acceleration,deceleration,delta)
|
||||||
var direction := (player.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
|
||||||
var modified_max_speed = max_speed * weapon_system.get_speed_modifier()
|
|
||||||
if direction:
|
|
||||||
player.velocity.x = clamp(player.velocity.x + direction.x * acceleration * delta,-modified_max_speed*abs(direction.x),modified_max_speed*abs(direction.x))
|
|
||||||
player.velocity.z = clamp(player.velocity.z + direction.z * acceleration * delta,-modified_max_speed*abs(direction.z),modified_max_speed*abs(direction.z))
|
|
||||||
else:
|
|
||||||
player.velocity.x = move_toward(player.velocity.x, 0, deceleration*delta)
|
|
||||||
player.velocity.z = move_toward(player.velocity.z, 0, deceleration*delta)
|
|
||||||
|
|
||||||
func state_input(event: InputEvent) -> void:
|
func state_input(event: InputEvent) -> void:
|
||||||
if event.is_action_released("plr_walk"):
|
if event.is_action_released("plr_walk"):
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@ var plant: StringName
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
$Timer.timeout.connect(on_timeout)
|
Session.bomb_timer.timeout.connect(on_timeout)
|
||||||
|
Session.begin_bomb_stage()
|
||||||
|
|
||||||
func on_timeout():
|
func on_timeout():
|
||||||
if multiplayer.is_server() == false:
|
if multiplayer.is_server() == false:
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@ func exit():
|
||||||
machine.speed_modifier = 1.0
|
machine.speed_modifier = 1.0
|
||||||
|
|
||||||
func on_animation_finished(animation: StringName):
|
func on_animation_finished(animation: StringName):
|
||||||
|
if is_multiplayer_authority() == false:
|
||||||
|
return
|
||||||
if animation == machine.animation_prefix + "plant":
|
if animation == machine.animation_prefix + "plant":
|
||||||
|
|
||||||
Session.spawn({"scene": active_bomb, "position": machine.player_camera.get_parent().global_position,"plant": Session.get_site().name})
|
Session.spawn({"scene": active_bomb, "position": machine.player_camera.get_parent().global_position,"plant": Session.get_site().name})
|
||||||
|
|
@ -20,5 +22,7 @@ func on_animation_finished(animation: StringName):
|
||||||
return_to_previous.emit()
|
return_to_previous.emit()
|
||||||
|
|
||||||
func state_input(event: InputEvent) -> void:
|
func state_input(event: InputEvent) -> void:
|
||||||
|
if is_multiplayer_authority() == false:
|
||||||
|
return
|
||||||
if event.is_action_released("plr_bomb"):
|
if event.is_action_released("plr_bomb"):
|
||||||
transition.emit("Idle")
|
transition.emit("Idle")
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ class_name WeaponSystem
|
||||||
|
|
||||||
var current_state: WeaponSubStateMachine
|
var current_state: WeaponSubStateMachine
|
||||||
var last_slot: StringName
|
var last_slot: StringName
|
||||||
|
var disabled: bool
|
||||||
|
|
||||||
var slots: Dictionary[StringName,WeaponSubStateMachine] = {
|
var slots: Dictionary[StringName,WeaponSubStateMachine] = {
|
||||||
"primary": null,
|
"primary": null,
|
||||||
|
|
@ -151,18 +152,21 @@ func check_for_empty() -> void:
|
||||||
func on_ammo_updated() -> void:
|
func on_ammo_updated() -> void:
|
||||||
ammo_updated.emit(current_state.ammo,current_state.remaining_ammo)
|
ammo_updated.emit(current_state.ammo,current_state.remaining_ammo)
|
||||||
|
|
||||||
|
func disable() -> void:
|
||||||
|
disabled = true
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
if current_state == null:
|
if current_state == null or disabled:
|
||||||
return
|
return
|
||||||
current_state.update(delta)
|
current_state.update(delta)
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
if current_state == null:
|
if current_state == null or disabled:
|
||||||
return
|
return
|
||||||
current_state.physics_update(delta)
|
current_state.physics_update(delta)
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
if is_multiplayer_authority() == false: return
|
if is_multiplayer_authority() == false or disabled or Session.round_state == Session.ROUND_STATES.BUY: return
|
||||||
|
|
||||||
if current_state != null:
|
if current_state != null:
|
||||||
current_state.state_input(event)
|
current_state.state_input(event)
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,9 @@
|
||||||
id="svg1"
|
id="svg1"
|
||||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||||
sodipodi:docname="prototype_256x256.svg"
|
sodipodi:docname="prototype_256x256.svg"
|
||||||
|
inkscape:export-filename="prototype_yellow_256x256.png"
|
||||||
|
inkscape:export-xdpi="96.000008"
|
||||||
|
inkscape:export-ydpi="96.000008"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
|
@ -25,14 +28,14 @@
|
||||||
inkscape:deskcolor="#d1d1d1"
|
inkscape:deskcolor="#d1d1d1"
|
||||||
inkscape:document-units="mm"
|
inkscape:document-units="mm"
|
||||||
inkscape:zoom="2"
|
inkscape:zoom="2"
|
||||||
inkscape:cx="185.25"
|
inkscape:cx="67.75"
|
||||||
inkscape:cy="135.25"
|
inkscape:cy="128.75"
|
||||||
inkscape:window-width="1890"
|
inkscape:window-width="1890"
|
||||||
inkscape:window-height="1012"
|
inkscape:window-height="1012"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="0"
|
||||||
inkscape:window-y="0"
|
inkscape:window-y="0"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="1"
|
||||||
inkscape:current-layer="g19">
|
inkscape:current-layer="layer1">
|
||||||
<inkscape:page
|
<inkscape:page
|
||||||
x="0"
|
x="0"
|
||||||
y="0"
|
y="0"
|
||||||
|
|
@ -121,7 +124,7 @@
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1">
|
id="layer1">
|
||||||
<rect
|
<rect
|
||||||
style="fill:#2f32e6;stroke-width:4.2;stroke:#ffffff;stroke-opacity:1;stroke-dasharray:none;paint-order:normal;stroke-linecap:butt;stroke-linejoin:miter;fill-opacity:1"
|
style="fill:#edcf2b;stroke-width:4.2;stroke:#ffffff;stroke-opacity:1;stroke-dasharray:none;paint-order:normal;stroke-linecap:butt;stroke-linejoin:miter;fill-opacity:1"
|
||||||
id="rect2"
|
id="rect2"
|
||||||
width="67.73333"
|
width="67.73333"
|
||||||
height="67.73333"
|
height="67.73333"
|
||||||
|
|
@ -141,7 +144,7 @@
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
transform="matrix(0.26458333,0,0,0.26458333,0.280633,-0.1403165)"
|
transform="matrix(0.26458333,0,0,0.26458333,0.280633,-0.1403165)"
|
||||||
id="text31"
|
id="text31"
|
||||||
style="text-align:start;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect31);opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:7.55906;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:15.1181, 7.55906;stroke-dashoffset:4.15748;stroke-opacity:1;paint-order:normal"><tspan
|
style="text-align:start;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect31);display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:7.55906;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:15.1181, 7.55906;stroke-dashoffset:4.15748;stroke-opacity:1;paint-order:normal"><tspan
|
||||||
x="8.484375"
|
x="8.484375"
|
||||||
y="19.402877"
|
y="19.402877"
|
||||||
id="tspan2"><tspan
|
id="tspan2"><tspan
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.8 KiB |
Loading…
Add table
Add a link
Reference in a new issue