Compare commits

..

No commits in common. "11eb875d2e6cef9a7cd3c079c95ba3cf4ba1ee74" and "b59cb48b773bf1c9918aa99652c85b8227a65428" have entirely different histories.

189 changed files with 666 additions and 961 deletions

Binary file not shown.

View file

@ -1,16 +0,0 @@
extends Button
@export var weapon: WeaponResource
func _ready() -> void:
icon = weapon.preview
text = str(weapon.cost)
func _pressed() -> void:
try_server_buy.rpc_id(1)
@rpc("any_peer","call_local","reliable")
func try_server_buy() -> void:
if not multiplayer.is_server():
return
Shop.buy(multiplayer.get_remote_sender_id(),weapon)

View file

@ -1 +0,0 @@
uid://bq32y7eee1f63

View file

@ -1,17 +0,0 @@
[gd_scene load_steps=3 format=3 uid="uid://b1ej6kmbjpm78"]
[ext_resource type="Texture2D" uid="uid://dnxw4x3cmu7io" path="res://icon.svg" id="1_apu4l"]
[ext_resource type="Script" uid="uid://bq32y7eee1f63" path="res://gui/buy_menu/buy_button/buy_button.gd" id="1_impj7"]
[node name="BuyButton" type="Button"]
anchors_preset = -1
anchor_right = 0.035
anchor_bottom = 0.075
offset_right = -4.799999
offset_bottom = -14.000004
text = "3600"
icon = ExtResource("1_apu4l")
icon_alignment = 1
vertical_icon_alignment = 0
expand_icon = true
script = ExtResource("1_impj7")

View file

@ -1,29 +0,0 @@
extends ColorRect
func _ready() -> void:
Session.round_state_changed.connect(on_round_state_changed)
func on_round_state_changed(state: int) -> void:
if state != Session.ROUND_STATES.BUY:
visible = false
if visible:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
else:
if Session.session_started_flag:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
else:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
func _input(event: InputEvent) -> void:
if event.is_action_pressed("plr_buy"):
if Session.round_state == Session.ROUND_STATES.BUY:
visible = not visible
else:
visible = false
if visible:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
else:
if Session.session_started_flag:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
else:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE

View file

@ -1 +0,0 @@
uid://dba17sgimp4j0

View file

@ -1,45 +0,0 @@
[gd_scene load_steps=5 format=3 uid="uid://j5lgbg8c0pq"]
[ext_resource type="PackedScene" uid="uid://b1ej6kmbjpm78" path="res://gui/buy_menu/buy_button/buy_button.tscn" id="1_8guql"]
[ext_resource type="Script" uid="uid://dba17sgimp4j0" path="res://gui/buy_menu/buy_menu.gd" id="1_ko0fn"]
[ext_resource type="Resource" uid="uid://b081hg7uxx1wu" path="res://weapons/molikman_molotov.tres" id="2_0gws3"]
[ext_resource type="Script" uid="uid://dk4diwvruvkch" path="res://gui/buy_menu/player_money_label.gd" id="2_ll0n6"]
[node name="BuyMenu" type="ColorRect"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.22745098)
script = ExtResource("1_ko0fn")
[node name="CenterContainer" type="CenterContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="PanelContainer" type="PanelContainer" parent="CenterContainer"]
layout_mode = 2
[node name="AbilitiesContainer" type="VBoxContainer" parent="CenterContainer/PanelContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="CenterContainer/PanelContainer/AbilitiesContainer"]
layout_mode = 2
script = ExtResource("2_ll0n6")
[node name="WeaponsContainer" type="GridContainer" parent="CenterContainer/PanelContainer/AbilitiesContainer"]
layout_mode = 2
columns = 5
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/PanelContainer/AbilitiesContainer"]
layout_mode = 2
[node name="BuyButton" parent="CenterContainer/PanelContainer/AbilitiesContainer/HBoxContainer" instance=ExtResource("1_8guql")]
layout_mode = 2
weapon = ExtResource("2_0gws3")

View file

@ -1,7 +0,0 @@
extends Label
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
var data = Session.get_player_data()
if data.has("money"):
text = str(data["money"])

View file

@ -1 +0,0 @@
uid://dk4diwvruvkch

View file

@ -1,29 +0,0 @@
extends Node
func can_buy(player_id: int,weapon: WeaponResource) -> bool:
return Session.player_data[player_id]["money"] >= weapon.cost
func buy(player_id: int, weapon: WeaponResource) -> void:
if not multiplayer.is_server() or can_buy(player_id,weapon) == false:
return
var player: Player = Session.player_nodes[player_id]
if player.hp == 0:
return
var weapon_system: WeaponSystem = player.get_node("%WeaponSystem")
var slot: StringName = ""
match weapon.slot:
"ability":
slot = weapon_system.get_empty_ability_slot()
var anything:
slot = anything
if not weapon_system.can_add(slot):
return
var player_data = Session.player_data[player_id]
player_data["money"] -= weapon.cost
weapon_system.add(weapon.weapon_system_scene.instantiate(),slot)

View file

@ -1 +0,0 @@
uid://hyldsai23dh4

View file

@ -1,47 +0,0 @@
[gd_scene load_steps=2 format=3 uid="uid://cmon3g1lsm3q"]
[ext_resource type="Script" uid="uid://m8qq2eynls6n" path="res://gui/team_choice/team_choice_menu.gd" id="1_kch1g"]
[node name="TeamChoiceMenu" type="CenterContainer"]
visible = false
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_kch1g")
[node name="Panel" type="PanelContainer" parent="."]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="Panel"]
layout_mode = 2
[node name="Label" type="Label" parent="Panel/VBoxContainer"]
layout_mode = 2
text = "Choose your team"
horizontal_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="Panel/VBoxContainer"]
layout_mode = 2
[node name="SpectatorButton" type="Button" parent="Panel/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Spectators"
[node name="AttackButton" type="Button" parent="Panel/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Attackers"
[node name="DefenceButton" type="Button" parent="Panel/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Defenders"
[node name="CancelButton" type="Button" parent="Panel/VBoxContainer"]
layout_mode = 2
text = "Cancel"
[connection signal="pressed" from="Panel/VBoxContainer/HBoxContainer/SpectatorButton" to="." method="_on_spectator_button_pressed"]
[connection signal="pressed" from="Panel/VBoxContainer/HBoxContainer/AttackButton" to="." method="_on_attack_button_pressed"]
[connection signal="pressed" from="Panel/VBoxContainer/HBoxContainer/DefenceButton" to="." method="_on_defence_button_pressed"]
[connection signal="pressed" from="Panel/VBoxContainer/CancelButton" to="." method="_on_cancel_button_pressed"]

View file

@ -6,20 +6,20 @@
[ext_resource type="Material" uid="uid://mlha6r17v2en" path="res://materials/DarkBluemat.tres" id="5_bno23"] [ext_resource type="Material" uid="uid://mlha6r17v2en" path="res://materials/DarkBluemat.tres" id="5_bno23"]
[ext_resource type="Material" uid="uid://duvlktlyurohd" path="res://materials/Yellowmat.tres" id="5_foctg"] [ext_resource type="Material" uid="uid://duvlktlyurohd" path="res://materials/Yellowmat.tres" id="5_foctg"]
[ext_resource type="Material" uid="uid://jdfticwelku4" path="res://materials/Greenmat.tres" id="6_8bje3"] [ext_resource type="Material" uid="uid://jdfticwelku4" path="res://materials/Greenmat.tres" id="6_8bje3"]
[ext_resource type="Script" uid="uid://dncldab5y4yod" path="res://systems/item_spawner.gd" id="6_61ure"] [ext_resource type="Script" uid="uid://dncldab5y4yod" path="res://scripts/item_spawner.gd" id="6_61ure"]
[ext_resource type="PackedScene" uid="uid://cxdgk74ln5xpn" path="res://weapons/bomb/droppable_bomb.tscn" id="6_bno23"] [ext_resource type="PackedScene" uid="uid://cxdgk74ln5xpn" path="res://scenes/weapons/droppable_bomb.tscn" id="6_bno23"]
[ext_resource type="Material" uid="uid://cyej4ph6hcnou" path="res://materials/Orangemat.tres" id="6_foctg"] [ext_resource type="Material" uid="uid://cyej4ph6hcnou" path="res://materials/Orangemat.tres" id="6_foctg"]
[ext_resource type="Script" uid="uid://bqjv6l7hh0lix" path="res://scripts/multiplayer/spawn_system/dyn_objects_spawner.gd" id="6_oujx2"]
[ext_resource type="Material" uid="uid://cdeggf10dmama" path="res://materials/Purplemat.tres" id="7_8bje3"] [ext_resource type="Material" uid="uid://cdeggf10dmama" path="res://materials/Purplemat.tres" id="7_8bje3"]
[ext_resource type="Script" uid="uid://dk1gjbuydemmb" path="res://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://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://ypgm3aplt78m" path="res://multiplayer/team_spawner.gd" id="10_02ic3"] [ext_resource type="Script" uid="uid://ypgm3aplt78m" path="res://scripts/multiplayer/spawn_system/team_spawner.gd" id="10_02ic3"]
[ext_resource type="Script" uid="uid://3i00rp8urth7" path="res://systems/object_container.gd" id="11_02ic3"] [ext_resource type="Script" uid="uid://3i00rp8urth7" path="res://scripts/object_container.gd" id="11_02ic3"]
[ext_resource type="Script" uid="uid://xwiw2g6uc21k" path="res://multiplayer/dynamic_objects_parent.gd" id="11_gcyg7"] [ext_resource type="Script" uid="uid://bala54fa32e35" path="res://scripts/gui/hud/player_round_display.gd" id="17_wsuwo"]
[ext_resource type="Script" uid="uid://bala54fa32e35" path="res://gui/hud/player_round_display.gd" id="17_wsuwo"] [ext_resource type="Script" uid="uid://bos7nftlx8tv3" path="res://scripts/gui/hud/player_round_time.gd" id="18_0hcup"]
[ext_resource type="Script" uid="uid://bos7nftlx8tv3" path="res://gui/hud/player_round_time.gd" id="18_0hcup"] [ext_resource type="Script" uid="uid://m8qq2eynls6n" path="res://scripts/gui/team_choice_menu.gd" id="19_0hcup"]
[ext_resource type="PackedScene" uid="uid://cmon3g1lsm3q" path="res://gui/team_choice/team_choice_menu.tscn" id="19_gcyg7"] [ext_resource type="PackedScene" uid="uid://l4t1mflutm3t" path="res://scenes/projectiles/molikman/molikman_molotov_fire.tscn" id="20_gcyg7"]
[ext_resource type="PackedScene" uid="uid://j5lgbg8c0pq" path="res://gui/buy_menu/buy_menu.tscn" id="20_gcyg7"]
[sub_resource type="BoxShape3D" id="BoxShape3D_ysk2e"] [sub_resource type="BoxShape3D" id="BoxShape3D_ysk2e"]
size = Vector3(15.324341, 0.96273804, 21.381592) size = Vector3(15.324341, 0.96273804, 21.381592)
@ -267,12 +267,12 @@ script = ExtResource("11_02ic3")
exlusion_list = [NodePath("DefenceSpawn"), NodePath("AttackSpawn"), NodePath("SpectatorSpawn"), NodePath("MultiplayerSpawner")] 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.5, -11.271502) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 37.170197, 0.5180037, -11.271502)
script = ExtResource("10_02ic3") script = ExtResource("10_02ic3")
spawn_radius = 10.0 spawn_radius = 10.0
[node name="AttackSpawn" type="Marker3D" parent="PlayersContainer"] [node name="AttackSpawn" type="Marker3D" parent="PlayersContainer"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -31.553003, 0.49999988, 20.371899) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -31.553003, 0.5180037, 20.371899)
script = ExtResource("10_02ic3") script = ExtResource("10_02ic3")
team = 1 team = 1
spawn_radius = 5.0 spawn_radius = 5.0
@ -289,14 +289,12 @@ spawn_path = NodePath("..")
[node name="DynamicObjectsContainer" type="Node3D" parent="." node_paths=PackedStringArray("exlusion_list")] [node name="DynamicObjectsContainer" type="Node3D" parent="." node_paths=PackedStringArray("exlusion_list")]
script = ExtResource("11_02ic3") script = ExtResource("11_02ic3")
exlusion_list = [NodePath("MultiplayerSpawner"), NodePath("Bomb"), NodePath("Parenter")] exlusion_list = [NodePath("MultiplayerSpawner"), NodePath("Bomb")]
[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="DynamicObjectsContainer"] [node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="DynamicObjectsContainer"]
_spawnable_scenes = PackedStringArray("uid://cxdgk74ln5xpn", "uid://dtbpyfdawb02b", "uid://dgfqppi21c2u0", "uid://b6qahd6q60js7", "uid://l4t1mflutm3t") _spawnable_scenes = PackedStringArray("uid://cxdgk74ln5xpn", "uid://dgfqppi21c2u0")
spawn_path = NodePath("..") spawn_path = NodePath("..")
script = ExtResource("6_oujx2")
[node name="Parenter" type="Node" parent="DynamicObjectsContainer"]
script = ExtResource("11_gcyg7")
[node name="Bomb" type="Node3D" parent="DynamicObjectsContainer"] [node name="Bomb" type="Node3D" parent="DynamicObjectsContainer"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -28.858309, 1.4657042, 12.873563) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -28.858309, 1.4657042, 12.873563)
@ -377,7 +375,49 @@ script = ExtResource("18_0hcup")
layout_mode = 2 layout_mode = 2
script = ExtResource("17_wsuwo") script = ExtResource("17_wsuwo")
[node name="TeamChoiceMenu" parent="CanvasLayer" instance=ExtResource("19_gcyg7")] [node name="CenterContainer" type="CenterContainer" parent="CanvasLayer"]
[node name="BuyMenu" parent="CanvasLayer" instance=ExtResource("20_gcyg7")]
visible = false visible = false
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("19_0hcup")
[node name="Panel" type="PanelContainer" parent="CanvasLayer/CenterContainer"]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/CenterContainer/Panel"]
layout_mode = 2
[node name="Label" type="Label" parent="CanvasLayer/CenterContainer/Panel/VBoxContainer"]
layout_mode = 2
text = "Choose your team"
horizontal_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/CenterContainer/Panel/VBoxContainer"]
layout_mode = 2
[node name="SpectatorButton" type="Button" parent="CanvasLayer/CenterContainer/Panel/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Spectators"
[node name="AttackButton" type="Button" parent="CanvasLayer/CenterContainer/Panel/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Attackers"
[node name="DefenceButton" type="Button" parent="CanvasLayer/CenterContainer/Panel/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Defenders"
[node name="CancelButton" type="Button" parent="CanvasLayer/CenterContainer/Panel/VBoxContainer"]
layout_mode = 2
text = "Cancel"
[node name="MolikmanMolotovFire" parent="." instance=ExtResource("20_gcyg7")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -25.65116, 0.67484045, 14.924126)
[connection signal="pressed" from="CanvasLayer/CenterContainer/Panel/VBoxContainer/HBoxContainer/SpectatorButton" to="CanvasLayer/CenterContainer" method="_on_spectator_button_pressed"]
[connection signal="pressed" from="CanvasLayer/CenterContainer/Panel/VBoxContainer/HBoxContainer/AttackButton" to="CanvasLayer/CenterContainer" method="_on_attack_button_pressed"]
[connection signal="pressed" from="CanvasLayer/CenterContainer/Panel/VBoxContainer/HBoxContainer/DefenceButton" to="CanvasLayer/CenterContainer" method="_on_defence_button_pressed"]
[connection signal="pressed" from="CanvasLayer/CenterContainer/Panel/VBoxContainer/CancelButton" to="CanvasLayer/CenterContainer" method="_on_cancel_button_pressed"]

View file

@ -2,11 +2,11 @@
[ext_resource type="Environment" uid="uid://ybeuqwdb504c" path="res://environments/split_environment.tres" id="1_muj2s"] [ext_resource type="Environment" uid="uid://ybeuqwdb504c" path="res://environments/split_environment.tres" id="1_muj2s"]
[ext_resource type="Material" uid="uid://bx3f5vx71ynh5" path="res://materials/Graymat.tres" id="4_mj4b4"] [ext_resource type="Material" uid="uid://bx3f5vx71ynh5" path="res://materials/Graymat.tres" id="4_mj4b4"]
[ext_resource type="Script" uid="uid://3i00rp8urth7" path="res://systems/object_container.gd" id="9_klida"] [ext_resource type="Script" uid="uid://3i00rp8urth7" path="res://scripts/object_container.gd" id="9_klida"]
[ext_resource type="Script" uid="uid://ypgm3aplt78m" path="res://multiplayer/team_spawner.gd" id="10_n3y50"] [ext_resource type="Script" uid="uid://ypgm3aplt78m" path="res://scripts/multiplayer/team_spawner.gd" id="10_n3y50"]
[ext_resource type="Script" path="res://multiplayer/spawn_system/dyn_objects_spawner.gd" id="11_ydk8w"] [ext_resource type="Script" uid="uid://bqjv6l7hh0lix" path="res://scripts/multiplayer/spawn_system/dyn_objects_spawner.gd" id="11_ydk8w"]
[ext_resource type="Script" uid="uid://dncldab5y4yod" path="res://systems/item_spawner.gd" id="12_kry5j"] [ext_resource type="Script" uid="uid://dncldab5y4yod" path="res://scripts/item_spawner.gd" id="12_kry5j"]
[ext_resource type="PackedScene" uid="uid://cxdgk74ln5xpn" path="res://weapons/bomb/droppable_bomb.tscn" id="13_hy0sx"] [ext_resource type="PackedScene" uid="uid://cxdgk74ln5xpn" path="res://scenes/weapons/droppable_bomb.tscn" id="13_hy0sx"]
[node name="PrototypeScene" type="Node3D"] [node name="PrototypeScene" type="Node3D"]

View file

@ -1,6 +0,0 @@
extends Node
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
Session.dynamic_objects_parent = get_parent()

View file

@ -1 +0,0 @@
uid://xwiw2g6uc21k

View file

@ -1,5 +0,0 @@
[gd_scene format=3 uid="uid://eaali3lbode2"]
[node name="WeaponSpawner" type="MultiplayerSpawner"]
_spawnable_scenes = PackedStringArray("uid://djwjl8xll53vn", "uid://ts4xccpkjd3g", "uid://bxdatd1ilfgmc", "uid://c5q7e5dj86187")
spawn_path = NodePath("..")

View file

@ -20,25 +20,18 @@ config/icon="res://icon.svg"
[autoload] [autoload]
PlayerGlobal="*res://players/player/player_global.gd" PlayerGlobal="*res://scripts/player/player_global.gd"
Lobby="*res://multiplayer/lobby.gd" Lobby="*res://scripts/multiplayer/lobby.gd"
Session="*res://multiplayer/session.gd" Session="*res://scripts/multiplayer/session.gd"
ClientSettings="*res://gui/client_settings/client_settings.gd" ClientSettings="*res://scripts/client_settings.gd"
ClientSettingsMenu="res://gui/client_settings/client_settings.tscn" Registry="*res://scripts/registry.gd"
Registry="*res://systems/registry.gd" ClientSettingsMenu="res://scenes/gui/client_settings.tscn"
Shop="*res://gui/buy_menu/shop.gd"
[display] [display]
window/size/viewport_width=1280 window/size/viewport_width=1280
window/size/viewport_height=720 window/size/viewport_height=720
[file_customization]
folder_colors={
"res://gui/": "green"
}
[input] [input]
plr_forward={ plr_forward={
@ -171,11 +164,6 @@ menu_team_choice={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":77,"key_label":0,"unicode":109,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":77,"key_label":0,"unicode":109,"location":0,"echo":false,"script":null)
] ]
} }
plr_buy={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":66,"key_label":0,"unicode":98,"location":0,"echo":false,"script":null)
]
}
[layer_names] [layer_names]

View file

@ -1,8 +1,8 @@
[gd_scene load_steps=4 format=3 uid="uid://dstie24qkbc86"] [gd_scene load_steps=4 format=3 uid="uid://dstie24qkbc86"]
[ext_resource type="PackedScene" uid="uid://bv6ptrditssow" path="res://gui/client_settings/client_settings.tscn" id="1_yqjtg"] [ext_resource type="PackedScene" uid="uid://bv6ptrditssow" path="res://scenes/gui/client_settings.tscn" id="1_yqjtg"]
[ext_resource type="PackedScene" uid="uid://cbtp4rvg66ba1" path="res://gui/main_menu/main_menu.tscn" id="2_lnu2h"] [ext_resource type="PackedScene" uid="uid://cbtp4rvg66ba1" path="res://scenes/main_menu.tscn" id="2_lnu2h"]
[ext_resource type="Script" uid="uid://dj4mlrime72hx" path="res://multiplayer/level_container.gd" id="3_lnu2h"] [ext_resource type="Script" uid="uid://dj4mlrime72hx" path="res://scripts/multiplayer/level_container.gd" id="3_lnu2h"]
[node name="Game" type="Node"] [node name="Game" type="Node"]

View file

@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://bv6ptrditssow"] [gd_scene load_steps=2 format=3 uid="uid://bv6ptrditssow"]
[ext_resource type="Script" uid="uid://ddi1alk8oyi1b" path="res://gui/client_settings/client_settings_menu.gd" id="1_xqyus"] [ext_resource type="Script" uid="uid://ddi1alk8oyi1b" path="res://scripts/gui/client_settings_menu.gd" id="1_xqyus"]
[node name="ClientSettingsMenu" type="CanvasLayer"] [node name="ClientSettingsMenu" type="CanvasLayer"]
layer = 3 layer = 3

View file

@ -1,7 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://cbtp4rvg66ba1"] [gd_scene load_steps=3 format=3 uid="uid://cbtp4rvg66ba1"]
[ext_resource type="Script" uid="uid://bsyuos803g7qf" path="res://gui/main_menu/main_menu_gui.gd" id="1_l6cm7"] [ext_resource type="Script" uid="uid://bsyuos803g7qf" path="res://scripts/gui/main_menu_gui.gd" id="1_l6cm7"]
[ext_resource type="Script" uid="uid://dh64rv15w8ecl" path="res://gui/main_menu/host_menu.gd" id="2_ekxnf"] [ext_resource type="Script" uid="uid://dh64rv15w8ecl" path="res://scripts/multiplayer/host_menu.gd" id="2_ekxnf"]
[node name="MainMenu" type="CenterContainer"] [node name="MainMenu" type="CenterContainer"]
anchors_preset = 15 anchors_preset = 15

File diff suppressed because one or more lines are too long

View file

@ -1,12 +1,12 @@
[gd_scene load_steps=11 format=3 uid="uid://l4t1mflutm3t"] [gd_scene load_steps=10 format=3 uid="uid://l4t1mflutm3t"]
[ext_resource type="Texture2D" uid="uid://bmnqvop2dy5pm" path="res://textures/prototype_yellow_256x256.png" id="1_hr7p8"] [ext_resource type="Texture2D" uid="uid://bmnqvop2dy5pm" path="res://textures/prototype_yellow_256x256.png" id="1_hr7p8"]
[ext_resource type="Script" uid="uid://bo0ij4miuksua" path="res://weapons/molikman/molik/molikman_molotov_fire.gd" id="1_qokq0"] [ext_resource type="Script" uid="uid://bo0ij4miuksua" path="res://scenes/projectiles/molikman/molikman_molotov_fire.gd" id="1_qokq0"]
[ext_resource type="Texture2D" uid="uid://b8aqstr5es5x4" path="res://textures/prototype_orange_256x256.png" id="2_qokq0"] [ext_resource type="Texture2D" uid="uid://b8aqstr5es5x4" path="res://textures/prototype_orange_256x256.png" id="2_qokq0"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_hr7p8"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_hr7p8"]
height = 3.0 height = 3.0
radius = 2.5 radius = 1.5
[sub_resource type="Gradient" id="Gradient_hr7p8"] [sub_resource type="Gradient" id="Gradient_hr7p8"]
colors = PackedColorArray(1, 0.53333336, 0, 1, 0.45, 0.45, 0.45, 1) colors = PackedColorArray(1, 0.53333336, 0, 1, 0.45, 0.45, 0.45, 1)
@ -33,11 +33,6 @@ color_ramp = SubResource("GradientTexture1D_qokq0")
material = SubResource("StandardMaterial3D_qokq0") material = SubResource("StandardMaterial3D_qokq0")
text = "fire" text = "fire"
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_ykxjp"]
properties/0/path = NodePath(".:position")
properties/0/spawn = true
properties/0/replication_mode = 1
[node name="MolikmanMolotovFire" type="Area3D" node_paths=PackedStringArray("damage_timer")] [node name="MolikmanMolotovFire" type="Area3D" node_paths=PackedStringArray("damage_timer")]
collision_layer = 8 collision_layer = 8
collision_mask = 2 collision_mask = 2
@ -46,7 +41,7 @@ dps = 25.0
damage_timer = NodePath("DamageTimer") damage_timer = NodePath("DamageTimer")
[node name="Decal" type="Decal" parent="."] [node name="Decal" type="Decal" parent="."]
size = Vector3(5, 3, 5) size = Vector3(3, 3, 3)
texture_albedo = ExtResource("1_hr7p8") texture_albedo = ExtResource("1_hr7p8")
texture_emission = ExtResource("2_qokq0") texture_emission = ExtResource("2_qokq0")
emission_energy = 0.25 emission_energy = 0.25
@ -70,8 +65,5 @@ autostart = true
wait_time = 0.25 wait_time = 0.25
autostart = true autostart = true
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
replication_config = SubResource("SceneReplicationConfig_ykxjp")
[connection signal="timeout" from="DieTimer" to="." method="queue_free"] [connection signal="timeout" from="DieTimer" to="." method="queue_free"]
[connection signal="timeout" from="DamageTimer" to="." method="damage"] [connection signal="timeout" from="DamageTimer" to="." method="damage"]

49
scenes/smoke.tscn Normal file
View file

@ -0,0 +1,49 @@
[gd_scene load_steps=8 format=3 uid="uid://cheu6vds21er7"]
[ext_resource type="Script" uid="uid://t5jjqwnkxgvo" path="res://scripts/smoke_grenade.gd" id="1_acmqr"]
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_acmqr"]
bounce = 0.5
[sub_resource type="CapsuleMesh" id="CapsuleMesh_vb5ru"]
radius = 0.1
height = 0.5
[sub_resource type="FastNoiseLite" id="FastNoiseLite_acmqr"]
frequency = 0.1141
[sub_resource type="NoiseTexture3D" id="NoiseTexture3D_rx0m8"]
width = 128
height = 128
depth = 128
noise = SubResource("FastNoiseLite_acmqr")
[sub_resource type="FogMaterial" id="FogMaterial_rx0m8"]
resource_local_to_scene = true
density = 8.0
density_texture = SubResource("NoiseTexture3D_rx0m8")
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_acmqr"]
radius = 0.1
height = 0.5
[node name="Smoke" type="RigidBody3D" node_paths=PackedStringArray("fog")]
physics_material_override = SubResource("PhysicsMaterial_acmqr")
contact_monitor = true
max_contacts_reported = 1
script = ExtResource("1_acmqr")
radius = 10.0
fog = NodePath("FogVolume")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("CapsuleMesh_vb5ru")
[node name="FogVolume" type="FogVolume" parent="."]
size = Vector3(0, 0, 0)
shape = 0
material = SubResource("FogMaterial_rx0m8")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("CapsuleShape3D_acmqr")
[connection signal="body_entered" from="." to="." method="_on_body_entered"]

View file

@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://ckjabjcvgki6n"] [gd_scene load_steps=2 format=3 uid="uid://ckjabjcvgki6n"]
[ext_resource type="Script" uid="uid://cikw7fcykkpd5" path="res://spectator.gd" id="1_jjbhc"] [ext_resource type="Script" uid="uid://cikw7fcykkpd5" path="res://scripts/player/spectator.gd" id="1_jjbhc"]
[node name="Spectator" type="Camera3D"] [node name="Spectator" type="Camera3D"]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, 0) transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, 0)

View file

@ -1,16 +1,15 @@
[gd_scene load_steps=7 format=3 uid="uid://bxdatd1ilfgmc"] [gd_scene load_steps=6 format=3 uid="uid://bxdatd1ilfgmc"]
[ext_resource type="Script" uid="uid://e6lqknfl4ngt" path="res://systems/weapon_system/weapon_substate_machine.gd" id="1_krsgt"] [ext_resource type="Script" uid="uid://e6lqknfl4ngt" path="res://scripts/weapon_system/weapon_substate_machine.gd" id="1_krsgt"]
[ext_resource type="Script" uid="uid://rx78vdadldm7" path="res://weapons/bomb/bomb_main_state.gd" id="2_870cc"] [ext_resource type="Script" uid="uid://rx78vdadldm7" path="res://scripts/weapon_system/bomb/bomb_main_state.gd" id="2_870cc"]
[ext_resource type="PackedScene" uid="uid://dtbpyfdawb02b" path="res://weapons/bomb/active_bomb.tscn" id="2_j5dxu"] [ext_resource type="Script" uid="uid://cx7j3kr1laq3s" path="res://scripts/weapon_system/bomb/bomb_idle_state.gd" id="3_1x0so"]
[ext_resource type="Script" uid="uid://cx7j3kr1laq3s" path="res://weapons/bomb/bomb_idle_state.gd" id="3_1x0so"] [ext_resource type="Script" uid="uid://dmyir46aricwi" path="res://scripts/weapon_system/bomb/bomb_intro_state.gd" id="4_fv3ha"]
[ext_resource type="Script" uid="uid://dmyir46aricwi" path="res://weapons/bomb/bomb_intro_state.gd" id="4_fv3ha"] [ext_resource type="Script" uid="uid://b5eapvgoni1pj" path="res://scripts/weapon_system/bomb/bomb_dropper.gd" id="5_fv3ha"]
[ext_resource type="Script" uid="uid://b5eapvgoni1pj" path="res://weapons/bomb/bomb_dropper.gd" id="5_fv3ha"]
[node name="Bomb" type="Node" node_paths=PackedStringArray("enter_state")] [node name="Bomb" type="Node" node_paths=PackedStringArray("enter_state")]
script = ExtResource("1_krsgt") script = ExtResource("1_krsgt")
animation_prefix = &"baked_bomb_" animation_prefix = &"baked_bomb_"
registry_entry = &"bomb" index = &"bomb"
visibility_target = &"bomb" visibility_target = &"bomb"
max_ammo = 1 max_ammo = 1
ammo_mags = 0 ammo_mags = 0
@ -22,7 +21,6 @@ metadata/_custom_type_script = "uid://e6lqknfl4ngt"
[node name="Plant" type="Node" parent="."] [node name="Plant" type="Node" parent="."]
script = ExtResource("2_870cc") script = ExtResource("2_870cc")
bomb_scene = ExtResource("2_j5dxu")
[node name="Idle" type="Node" parent="."] [node name="Idle" type="Node" parent="."]
script = ExtResource("3_1x0so") script = ExtResource("3_1x0so")

View file

@ -1,8 +1,8 @@
[gd_scene load_steps=6 format=3 uid="uid://cxdgk74ln5xpn"] [gd_scene load_steps=6 format=3 uid="uid://cxdgk74ln5xpn"]
[ext_resource type="Script" uid="uid://cskgqgkr7pmb0" path="res://systems/weapon_system/dropped_weapon.gd" id="1_hsebh"] [ext_resource type="Script" uid="uid://cskgqgkr7pmb0" path="res://scripts/weapon_system/dropped_weapon.gd" id="1_hsebh"]
[ext_resource type="PackedScene" uid="uid://dftij0fdq3lbr" path="res://models/weapons/Bomb.glb" id="1_pcfvq"] [ext_resource type="PackedScene" uid="uid://dftij0fdq3lbr" path="res://models/weapons/Bomb.glb" id="1_pcfvq"]
[ext_resource type="PackedScene" uid="uid://bxdatd1ilfgmc" path="res://weapons/bomb/bomb.tscn" id="2_ucc3u"] [ext_resource type="PackedScene" uid="uid://bxdatd1ilfgmc" path="res://scenes/weapons/bomb.tscn" id="2_ucc3u"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsebh"] [sub_resource type="BoxShape3D" id="BoxShape3D_hsebh"]
size = Vector3(1, 0.25274658, 0.7492676) size = Vector3(1, 0.25274658, 0.7492676)

View file

@ -1,7 +1,7 @@
[gd_scene load_steps=6 format=3 uid="uid://dgfqppi21c2u0"] [gd_scene load_steps=6 format=3 uid="uid://dgfqppi21c2u0"]
[ext_resource type="Script" uid="uid://cskgqgkr7pmb0" path="res://systems/weapon_system/dropped_weapon.gd" id="1_jym52"] [ext_resource type="Script" uid="uid://cskgqgkr7pmb0" path="res://scripts/weapon_system/dropped_weapon.gd" id="1_jym52"]
[ext_resource type="PackedScene" uid="uid://djwjl8xll53vn" path="res://weapons/gun/sp/starting_pistol.tscn" id="2_jym52"] [ext_resource type="PackedScene" uid="uid://djwjl8xll53vn" path="res://scenes/weapons/starting_pistol.tscn" id="2_jym52"]
[ext_resource type="PackedScene" uid="uid://d3sjs6efbshpk" path="res://models/weapons/starting_pistol.glb" id="3_jym52"] [ext_resource type="PackedScene" uid="uid://d3sjs6efbshpk" path="res://models/weapons/starting_pistol.glb" id="3_jym52"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsebh"] [sub_resource type="BoxShape3D" id="BoxShape3D_hsebh"]

View file

@ -1,10 +1,10 @@
[gd_scene load_steps=6 format=3 uid="uid://ts4xccpkjd3g"] [gd_scene load_steps=6 format=3 uid="uid://ts4xccpkjd3g"]
[ext_resource type="Script" uid="uid://e6lqknfl4ngt" path="res://systems/weapon_system/weapon_substate_machine.gd" id="1_2xf1r"] [ext_resource type="Script" uid="uid://e6lqknfl4ngt" path="res://scripts/weapon_system/weapon_substate_machine.gd" id="1_2xf1r"]
[ext_resource type="Script" uid="uid://dhmgd83rhjtyq" path="res://weapons/knife/knife_intro.gd" id="2_6fi8m"] [ext_resource type="Script" uid="uid://dhmgd83rhjtyq" path="res://scripts/weapon_system/knife/knife_intro.gd" id="2_6fi8m"]
[ext_resource type="Script" uid="uid://cn6wyj4v5xeej" path="res://weapons/knife/knife_idle.gd" id="3_7hrnw"] [ext_resource type="Script" uid="uid://cn6wyj4v5xeej" path="res://scripts/weapon_system/knife/knife_idle.gd" id="3_7hrnw"]
[ext_resource type="Script" uid="uid://d0r2fu21ei4hy" path="res://weapons/knife/knife_attack.gd" id="4_7hrnw"] [ext_resource type="Script" uid="uid://d0r2fu21ei4hy" path="res://scripts/weapon_system/knife/knife_attack.gd" id="4_7hrnw"]
[ext_resource type="Script" uid="uid://ctx2rjjs48nrc" path="res://weapons/knife/knife_attack_heavy.gd" id="5_c20fe"] [ext_resource type="Script" uid="uid://ctx2rjjs48nrc" path="res://scripts/weapon_system/knife/knife_attack_heavy.gd" id="5_c20fe"]
[node name="Knife" type="Node" node_paths=PackedStringArray("enter_state")] [node name="Knife" type="Node" node_paths=PackedStringArray("enter_state")]
script = ExtResource("1_2xf1r") script = ExtResource("1_2xf1r")

View file

@ -1,10 +1,10 @@
[gd_scene load_steps=9 format=3 uid="uid://djwjl8xll53vn"] [gd_scene load_steps=8 format=3 uid="uid://djwjl8xll53vn"]
[ext_resource type="Script" uid="uid://e6lqknfl4ngt" path="res://systems/weapon_system/weapon_substate_machine.gd" id="1_g7s1i"] [ext_resource type="Script" uid="uid://e6lqknfl4ngt" path="res://scripts/weapon_system/weapon_substate_machine.gd" id="1_g7s1i"]
[ext_resource type="Script" uid="uid://ofv4e3dsfe8" path="res://weapons/gun/idle_state.gd" id="2_cmn6f"] [ext_resource type="Script" uid="uid://ofv4e3dsfe8" path="res://scripts/weapon_system/gun/idle_state.gd" id="2_cmn6f"]
[ext_resource type="Script" uid="uid://vj13r83l3xyq" path="res://weapons/gun/semi_auto_shoot_state.gd" id="3_016ti"] [ext_resource type="Script" uid="uid://vj13r83l3xyq" path="res://scripts/weapon_system/gun/semi_auto_shoot_state.gd" id="3_016ti"]
[ext_resource type="Script" uid="uid://hmekwp8444ao" path="res://weapons/gun/reload_state.gd" id="4_hoqxt"] [ext_resource type="Script" uid="uid://hmekwp8444ao" path="res://scripts/weapon_system/gun/reload_state.gd" id="4_hoqxt"]
[ext_resource type="Script" uid="uid://bmj0bwy2tlian" path="res://weapons/gun/intro_state.gd" id="5_ud1dr"] [ext_resource type="Script" uid="uid://bmj0bwy2tlian" path="res://scripts/weapon_system/gun/intro_state.gd" id="5_ud1dr"]
[sub_resource type="Curve" id="Curve_cmn6f"] [sub_resource type="Curve" id="Curve_cmn6f"]
_limits = [0.0, 0.1, 0.0, 20.0] _limits = [0.0, 0.1, 0.0, 20.0]
@ -18,18 +18,10 @@ _limits = [-0.02, 0.02, 0.0, 20.0]
_data = [Vector2(0, -9.313226e-10), 0.0, 0.0, 0, 0, Vector2(4.959569, 0.0044327714), 0.0, 0.0, 0, 0, Vector2(9.919138, -0.0075840354), 0.0, 0.0, 0, 0, Vector2(15.09434, 0.011533612), 0.0, 0.0, 0, 0, Vector2(20, -0.014684878), 0.0, 0.0, 0, 0] _data = [Vector2(0, -9.313226e-10), 0.0, 0.0, 0, 0, Vector2(4.959569, 0.0044327714), 0.0, 0.0, 0, 0, Vector2(9.919138, -0.0075840354), 0.0, 0.0, 0, 0, Vector2(15.09434, 0.011533612), 0.0, 0.0, 0, 0, Vector2(20, -0.014684878), 0.0, 0.0, 0, 0]
point_count = 5 point_count = 5
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_bwg3m"]
properties/0/path = NodePath(".:ammo")
properties/0/spawn = true
properties/0/replication_mode = 2
properties/1/path = NodePath(".:remaining_ammo")
properties/1/spawn = true
properties/1/replication_mode = 2
[node name="StartingPistol" type="Node" node_paths=PackedStringArray("enter_state")] [node name="StartingPistol" type="Node" node_paths=PackedStringArray("enter_state")]
script = ExtResource("1_g7s1i") script = ExtResource("1_g7s1i")
animation_prefix = &"baked_sp_" animation_prefix = &"baked_sp_"
registry_entry = &"sp" index = &"sp"
visibility_target = &"sp" visibility_target = &"sp"
max_ammo = 20 max_ammo = 20
speed_modifier = 0.9 speed_modifier = 0.9
@ -60,6 +52,3 @@ emptyable = true
[node name="FireTimer" type="Timer" parent="."] [node name="FireTimer" type="Timer" parent="."]
wait_time = 0.15 wait_time = 0.15
one_shot = true one_shot = true
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
replication_config = SubResource("SceneReplicationConfig_bwg3m")

View file

@ -0,0 +1,6 @@
extends Resource
@export var internal_id: StringName
@export var immediate: bool
@export var max_uses: int
@export var cost: int

View file

@ -0,0 +1 @@
uid://cwn6swbl3bcqw

View file

@ -1,4 +1,5 @@
extends Label extends Label
func on_ammo_updated(ammo: int, remaining_ammo: int): func on_ammo_updated(ammo: int, remaining_ammo: int):
text = str(ammo)+"/"+str(remaining_ammo) text = str(ammo)+"/"+str(remaining_ammo)

View file

@ -0,0 +1,7 @@
extends Node
func _ready() -> void:
Lobby.lobby_joined.connect(on_lobby_joined)
func on_lobby_joined() -> void:
$StartButton.hide()

View file

@ -0,0 +1 @@
uid://2uyxkfmbbims

View file

@ -1,5 +1,7 @@
extends Control extends Control
var cached_mouse_state: Input.MouseMode
func _on_spectator_button_pressed() -> void: func _on_spectator_button_pressed() -> void:
if Lobby.get_team() != Session.TEAMS.SPECTATE: if Lobby.get_team() != Session.TEAMS.SPECTATE:
Lobby.switch_team(Session.TEAMS.SPECTATE) Lobby.switch_team(Session.TEAMS.SPECTATE)
@ -29,9 +31,7 @@ func _input(event: InputEvent) -> void:
func update_mouse() -> void: func update_mouse() -> void:
if visible: if visible:
cached_mouse_state = Input.mouse_mode
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
else: else:
if Session.session_started_flag: Input.mouse_mode = cached_mouse_state
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
else:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE

View file

@ -0,0 +1,7 @@
extends Node
func _ready() -> void:
if not multiplayer.is_server():
return
Lobby.add_loaded_player(multiplayer.get_unique_id())

View file

@ -0,0 +1 @@
uid://bdxy621fthtrv

View file

@ -16,9 +16,6 @@ enum ROUND_STATES {
AFTER_SESSION = 5, AFTER_SESSION = 5,
} }
const WIN_MONEY: int = 3400
const LOSE_MONEY: int = 2000
const ATTACK_LAYER: int = 0b10000 const ATTACK_LAYER: int = 0b10000
const DEFENCE_LAYER: int = 0b100000 const DEFENCE_LAYER: int = 0b100000
@ -30,26 +27,27 @@ signal round_state_changed(state: int)
signal player_stopped_interacting(id: int) signal player_stopped_interacting(id: int)
var player_nodes: Dictionary[int,Player] = {} var player_nodes: Dictionary[int,Player] = {}
var player_data: Dictionary[int,Dictionary] = {}
var dynamic_objects_parent: Node3D
var object_containers: Array[ObjectContainer] var object_containers: Array[ObjectContainer]
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 session_started_flag: bool = false
var round_state: ROUND_STATES
var current_round: int = 0 var current_round: int = 0
var attacker_score: int = 0 var attacker_score: int = 0
var defender_score: int = 0 var defender_score: int = 0
var attackers_alive: int = 0 var attackers_alive: int = 0
var defenders_alive: int = 0 var defenders_alive: int = 0
var reference_round_time: float
var bomb_timer: Timer var bomb_timer: Timer
var round_timer: Timer var round_timer: Timer
var buy_timer: Timer var buy_timer: Timer
var round_state: ROUND_STATES
var session_started_flag: bool = false
var reference_round_time: float
func _ready() -> void: func _ready() -> void:
if multiplayer.is_server() == false: if multiplayer.is_server() == false:
return return
@ -74,7 +72,6 @@ func _ready() -> void:
add_child(buy_timer) add_child(buy_timer)
multiplayer.peer_connected.connect(sync_session_server) multiplayer.peer_connected.connect(sync_session_server)
multiplayer.peer_disconnected.connect(delete_player)
func sync_session_server(id: int): func sync_session_server(id: int):
if multiplayer.is_server() == false or session_started_flag == false: if multiplayer.is_server() == false or session_started_flag == false:
@ -89,11 +86,11 @@ func sync_session_server(id: int):
data.encode_u8(4,defenders_alive) data.encode_u8(4,defenders_alive)
data.encode_u8(5,round_state) data.encode_u8(5,round_state)
sync_session_client.rpc_id(id,data,player_data) sync_session_client.rpc_id(id,data)
late_player_connected.emit(id) late_player_connected.emit(id)
@rpc("authority","call_remote","reliable") @rpc("authority","call_remote","reliable")
func sync_session_client(data: PackedByteArray,players_data_sent: Dictionary[int,Dictionary]): func sync_session_client(data: PackedByteArray):
if not is_server_request(): if not is_server_request():
return return
@ -104,36 +101,7 @@ func sync_session_client(data: PackedByteArray,players_data_sent: Dictionary[int
defenders_alive = data.decode_u8(4) defenders_alive = data.decode_u8(4)
round_state = data.decode_u8(5) as ROUND_STATES round_state = data.decode_u8(5) as ROUND_STATES
session_started.emit() session_started.emit()
player_data = players_data_sent
func send_session_data():
if multiplayer.is_server() == false or session_started_flag == false:
return
var data: PackedByteArray
data.resize(6)
data.encode_u8(0,current_round)
data.encode_u8(1,attacker_score)
data.encode_u8(2,defender_score)
data.encode_u8(3,attackers_alive)
data.encode_u8(4,defenders_alive)
data.encode_u8(5,round_state)
recieve_session_data.rpc(data,player_data)
@rpc("authority","call_remote","unreliable")
func recieve_session_data(data: PackedByteArray,players_data_sent: Dictionary[int,Dictionary]):
if not is_server_request():
return
current_round = data.decode_u8(0)
attacker_score = data.decode_u8(1)
defender_score = data.decode_u8(2)
attackers_alive = data.decode_u8(3)
defenders_alive = data.decode_u8(4)
round_state = data.decode_u8(5) as ROUND_STATES
session_started.emit()
player_data = players_data_sent
func _process(_delta: float) -> void: func _process(_delta: float) -> void:
if multiplayer.is_server() == false or not session_started: if multiplayer.is_server() == false or not session_started:
@ -148,7 +116,6 @@ func _process(_delta: float) -> void:
_: _:
reference_round_time = 0 reference_round_time = 0
update_clock.rpc(reference_round_time) update_clock.rpc(reference_round_time)
send_session_data()
@rpc("authority","call_remote","unreliable") @rpc("authority","call_remote","unreliable")
func update_clock(time: float): func update_clock(time: float):
@ -171,14 +138,6 @@ func start_session() -> void:
round_timer.wait_time = Lobby.round_time round_timer.wait_time = Lobby.round_time
buy_timer.wait_time = Lobby.buy_time buy_timer.wait_time = Lobby.buy_time
var all_players: PackedInt32Array = multiplayer.get_peers()
all_players.append(multiplayer.get_unique_id())
for player in all_players:
player_data[player] = {
"money" : 800,
"nickname" : "Seliboba"
}
start_round() start_round()
@rpc("authority","call_remote","reliable") @rpc("authority","call_remote","reliable")
@ -196,10 +155,9 @@ func end_session() -> void:
session_started_flag = false session_started_flag = false
dynamic_objects_spawner = null
plants = [] plants = []
plant_deadzones = {} plant_deadzones = {}
dynamic_objects_parent = null
func quit_session() -> void: func quit_session() -> void:
if multiplayer.is_server(): if multiplayer.is_server():
@ -247,16 +205,8 @@ func end_round(win_team: int) -> void:
if win_team == TEAMS.DEFENCE: if win_team == TEAMS.DEFENCE:
defender_score += 1 defender_score += 1
for defender in Lobby.defence_team:
player_data[defender].money += WIN_MONEY
for attacker in Lobby.attack_team:
player_data[attacker].money += LOSE_MONEY
elif win_team == TEAMS.ATTACK: elif win_team == TEAMS.ATTACK:
attacker_score += 1 attacker_score += 1
for defender in Lobby.defence_team:
player_data[defender].money += LOSE_MONEY
for attacker in Lobby.attack_team:
player_data[attacker].money += WIN_MONEY
round_state = ROUND_STATES.AFTER_ROUND round_state = ROUND_STATES.AFTER_ROUND
@ -306,6 +256,30 @@ func add_dead(team: int):
func is_server_request() -> bool: func is_server_request() -> bool:
return multiplayer.is_server() or multiplayer.get_remote_sender_id() == 1 return multiplayer.is_server() or multiplayer.get_remote_sender_id() == 1
## Spawns dynamic object at game scene [br]
## Dictionary keys: [br]
## (Required) scene - path/uuid to scene [br]
## (Optional) position - position to spawn [br]
## (Optional) impulse - impulse to apply [br]
## (Optional but required for each other) [br]
## ammo, remaining_ammo, slot - data for dropped weapon [br]
## for more, see dyn_objects_spawner.gd
func spawn(data: Dictionary) -> void:
if multiplayer.is_server() == false:
return
var object = dynamic_objects_spawner.spawn(data)
if data.has("position"):
object.global_position = data.position
func despawn(path: NodePath) -> void:
if multiplayer.is_server() == false:
printerr(str(multiplayer.get_remote_sender_id())+" tried to despawn internally on "+str(multiplayer.get_unique_id()))
return
get_node(path).queue_free()
func shoot(id:int , damage: int, distance: float) -> void: func shoot(id:int , damage: int, distance: float) -> void:
if multiplayer.is_server() == false: if multiplayer.is_server() == false:
return return
@ -379,19 +353,3 @@ func kill_site(site: StringName) -> void:
func sync_score(attack: int, defence: int): func sync_score(attack: int, defence: int):
attacker_score = attack attacker_score = attack
defender_score = defence defender_score = defence
@rpc("authority","call_remote","reliable")
func delete_player(id: int):
if not is_server_request():
return
if multiplayer.is_server():
delete_player.rpc_id(id)
player_data.erase(id)
func get_player_data() -> Dictionary:
var id: int = multiplayer.get_unique_id()
if player_data.has(id):
return player_data[id]
else:
return {}

View file

@ -0,0 +1,44 @@
extends MultiplayerSpawner
func _ready() -> void:
spawn_function = request_spawn
Session.dynamic_objects_spawner = self
func request_spawn(data: Variant) -> Node:
if data.has("type") == false or data.has("spawn_name") == false:
return Node.new()
match data.type:
"weapon":
var weapon: DroppableWeapon = Registry.weapons[data.spawn_name].dropped_scene.instantiate()
weapon.apply_central_impulse(data.impulse)
weapon.weapon.ammo = data.ammo
weapon.weapon.remaining_ammo = data.remaining_ammo
weapon.slot = Registry.weapons[data.spawn_name].slot
for key in data.keys():
if key == "impulse" or key == "ammo" or key == "remaining_ammo":
continue
weapon.set(key,data[key])
return weapon
"projectile":
var projectile: RigidBody3D = Registry.spawnable_objects[data.spawn_name].instantiate()
projectile.apply_central_impulse(data.impulse)
for key in data.keys():
if key == "impulse":
continue
projectile.set(key,data[key])
return projectile
"object":
var object: Node3D = Registry.spawnable_objects[data.spawn_name].instantiate()
for key in data.keys():
object.set(key,data[key])
return object
_:
return Node.new()

View file

@ -0,0 +1 @@
uid://bqjv6l7hh0lix

View file

@ -32,7 +32,7 @@ func spawn():
spawn_spectator(specator) spawn_spectator(specator)
func spawn_player(id: int) -> void: func spawn_player(id: int) -> void:
var player: PackedScene = preload("uid://dpsr6ug3pkb40") var player: PackedScene = load("res://scenes/molikman.tscn")
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)
@ -50,7 +50,7 @@ func spawn_player(id: int) -> void:
inst.global_position = new_position inst.global_position = new_position
func spawn_spectator(id: int) -> void: func spawn_spectator(id: int) -> void:
var spectator: PackedScene = load("res://players/spectator.tscn") var spectator: PackedScene = load("res://scenes/spectator.tscn")
var inst = spectator.instantiate() var inst = spectator.instantiate()
inst.name = str(id) inst.name = str(id)

View file

@ -0,0 +1,11 @@
extends Node
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass

View file

@ -0,0 +1 @@
uid://cg0v1nmwuuoej

Some files were not shown because too many files have changed in this diff Show more