Implementation of teams and it's spawnpoints and partial(basic) implementation of classes

This commit is contained in:
leca 2024-02-26 13:32:26 +03:00
parent 534a3be505
commit 0f0217713a
10 changed files with 445 additions and 81 deletions

View File

@ -4,23 +4,40 @@
[node name="ChooseTeam" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
grow_horizontal = 2
grow_vertical = 2
[node name="CS" type="Control" parent="."]
[node name="Choose_team" type="Control" parent="."]
layout_mode = 1
anchors_preset = 4
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -20.0
offset_right = 40.0
offset_right = 20.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
[node name="Closed source" type="Label" parent="CS"]
[node name="CS" type="Control" parent="Choose_team"]
layout_mode = 1
anchors_preset = 11
anchor_left = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 37.0
offset_right = 37.0
grow_horizontal = 0
grow_vertical = 2
[node name="Closed source" type="Label" parent="Choose_team/CS"]
layout_mode = 0
offset_left = 100.0
offset_top = -100.0
@ -29,7 +46,7 @@ offset_bottom = -77.0
text = "Closed source
"
[node name="Select_CS" type="Button" parent="CS"]
[node name="Select_CS" type="Button" parent="Choose_team/CS"]
layout_mode = 0
offset_left = 121.0
offset_right = 175.0
@ -38,20 +55,15 @@ text = "Select
"
script = ExtResource("1_nua8c")
[node name="OS" type="Control" parent="."]
[node name="OS" type="Control" parent="Choose_team"]
layout_mode = 1
anchors_preset = 6
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -40.0
offset_top = -20.0
offset_bottom = 20.0
grow_horizontal = 0
anchors_preset = 9
anchor_bottom = 1.0
offset_left = -130.0
offset_right = -130.0
grow_vertical = 2
[node name="Open source" type="Label" parent="OS"]
[node name="Open source" type="Label" parent="Choose_team/OS"]
layout_mode = 0
offset_left = -150.0
offset_top = -100.0
@ -60,7 +72,7 @@ offset_bottom = -77.0
text = "Open source
"
[node name="Select_OS" type="Button" parent="OS"]
[node name="Select_OS" type="Button" parent="Choose_team/OS"]
layout_mode = 0
offset_left = -129.0
offset_right = -75.0
@ -68,3 +80,262 @@ offset_bottom = 31.0
text = "Select
"
script = ExtResource("1_nua8c")
[node name="Spectator" type="Control" parent="Choose_team"]
layout_mode = 1
anchors_preset = 12
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 0
[node name="Spectator" type="Label" parent="Choose_team/Spectator"]
layout_mode = 0
offset_left = -33.0
offset_right = 42.0
offset_bottom = 23.0
text = "Spectator"
[node name="Select_SP" type="Button" parent="Choose_team/Spectator"]
layout_mode = 0
offset_left = -21.0
offset_top = 56.0
offset_right = 33.0
offset_bottom = 87.0
text = "Select
"
script = ExtResource("1_nua8c")
[node name="Choose_class_OS" type="Control" parent="."]
visible = false
layout_mode = 1
anchors_preset = 0
offset_left = -556.0
offset_top = -139.0
offset_right = -556.0
offset_bottom = -139.0
[node name="Class 1" type="Control" parent="Choose_class_OS"]
layout_mode = 3
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
scale = Vector2(3.8, 3.8)
[node name="Name" type="Label" parent="Choose_class_OS/Class 1"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 23.0
text = "Class 1"
[node name="Select_1" type="Button" parent="Choose_class_OS/Class 1"]
layout_mode = 0
offset_top = 23.0
offset_right = 54.0
offset_bottom = 54.0
text = "Select"
script = ExtResource("1_nua8c")
[node name="Class 2" type="Control" parent="Choose_class_OS"]
anchors_preset = 0
offset_left = 221.0
offset_right = 261.0
offset_bottom = 40.0
scale = Vector2(3.8, 3.8)
[node name="Name" type="Label" parent="Choose_class_OS/Class 2"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 23.0
text = "Class 2"
[node name="Select_2" type="Button" parent="Choose_class_OS/Class 2"]
layout_mode = 0
offset_top = 23.0
offset_right = 54.0
offset_bottom = 54.0
text = "Select"
script = ExtResource("1_nua8c")
[node name="Class 3" type="Control" parent="Choose_class_OS"]
anchors_preset = 0
offset_left = 445.0
offset_right = 485.0
offset_bottom = 40.0
scale = Vector2(3.8, 3.8)
[node name="Name" type="Label" parent="Choose_class_OS/Class 3"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 23.0
text = "Class 3"
[node name="Select_3" type="Button" parent="Choose_class_OS/Class 3"]
layout_mode = 0
offset_top = 23.0
offset_right = 54.0
offset_bottom = 54.0
text = "Select"
script = ExtResource("1_nua8c")
[node name="Class 4" type="Control" parent="Choose_class_OS"]
anchors_preset = 0
offset_left = 670.0
offset_right = 710.0
offset_bottom = 40.0
scale = Vector2(3.8, 3.8)
[node name="Name" type="Label" parent="Choose_class_OS/Class 4"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 23.0
text = "Class 4"
[node name="Select_4" type="Button" parent="Choose_class_OS/Class 4"]
layout_mode = 0
offset_top = 23.0
offset_right = 54.0
offset_bottom = 54.0
text = "Select"
script = ExtResource("1_nua8c")
[node name="Class 5" type="Control" parent="Choose_class_OS"]
anchors_preset = 0
offset_left = 894.0
offset_right = 934.0
offset_bottom = 40.0
scale = Vector2(3.8, 3.8)
[node name="Name" type="Label" parent="Choose_class_OS/Class 5"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 23.0
text = "Class 5"
[node name="Select_5" type="Button" parent="Choose_class_OS/Class 5"]
layout_mode = 0
offset_top = 23.0
offset_right = 54.0
offset_bottom = 54.0
text = "Select"
script = ExtResource("1_nua8c")
[node name="Choose_class_CS" type="Control" parent="."]
visible = false
layout_mode = 1
anchors_preset = 14
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -560.0
offset_top = -139.0
offset_right = -560.0
offset_bottom = -139.0
grow_horizontal = 2
grow_vertical = 2
[node name="Class -1" type="Control" parent="Choose_class_CS"]
layout_mode = 3
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
scale = Vector2(3.8, 3.8)
[node name="Name" type="Label" parent="Choose_class_CS/Class -1"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 23.0
text = "Class -1"
[node name="Select_-1" type="Button" parent="Choose_class_CS/Class -1"]
layout_mode = 0
offset_top = 23.0
offset_right = 54.0
offset_bottom = 54.0
text = "Select"
script = ExtResource("1_nua8c")
[node name="Class -2" type="Control" parent="Choose_class_CS"]
anchors_preset = 0
offset_left = 221.0
offset_right = 261.0
offset_bottom = 40.0
scale = Vector2(3.8, 3.8)
[node name="Name" type="Label" parent="Choose_class_CS/Class -2"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 23.0
text = "Class -2"
[node name="Select_-2" type="Button" parent="Choose_class_CS/Class -2"]
layout_mode = 0
offset_top = 23.0
offset_right = 54.0
offset_bottom = 54.0
text = "Select"
script = ExtResource("1_nua8c")
[node name="Class -3" type="Control" parent="Choose_class_CS"]
anchors_preset = 0
offset_left = 445.0
offset_right = 485.0
offset_bottom = 40.0
scale = Vector2(3.8, 3.8)
[node name="Name" type="Label" parent="Choose_class_CS/Class -3"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 23.0
text = "Class -3"
[node name="Select_-3" type="Button" parent="Choose_class_CS/Class -3"]
layout_mode = 0
offset_top = 23.0
offset_right = 54.0
offset_bottom = 54.0
text = "Select"
script = ExtResource("1_nua8c")
[node name="Class -4" type="Control" parent="Choose_class_CS"]
anchors_preset = 0
offset_left = 670.0
offset_right = 710.0
offset_bottom = 40.0
scale = Vector2(3.8, 3.8)
[node name="Name" type="Label" parent="Choose_class_CS/Class -4"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 23.0
text = "Class -4"
[node name="Select_-4" type="Button" parent="Choose_class_CS/Class -4"]
layout_mode = 0
offset_top = 23.0
offset_right = 54.0
offset_bottom = 54.0
text = "Select"
script = ExtResource("1_nua8c")
[node name="Class -5" type="Control" parent="Choose_class_CS"]
anchors_preset = 0
offset_left = 894.0
offset_right = 934.0
offset_bottom = 40.0
scale = Vector2(3.8, 3.8)
[node name="Name" type="Label" parent="Choose_class_CS/Class -5"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 23.0
text = "Class -5"
[node name="Select_-5" type="Button" parent="Choose_class_CS/Class -5"]
layout_mode = 0
offset_top = 23.0
offset_right = 54.0
offset_bottom = 54.0
text = "Select"
script = ExtResource("1_nua8c")

View File

@ -1,4 +1,6 @@
[gd_scene load_steps=5 format=3 uid="uid://18evx7g8m824"]
[gd_scene load_steps=6 format=3 uid="uid://18evx7g8m824"]
[ext_resource type="PackedScene" uid="uid://833q6upr0s1k" path="res://scenes/special/spawnpoint.tscn" id="1_cgcr3"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_efxfa"]
@ -18,7 +20,7 @@ tonemap_white = 4.37
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8g7wu"]
[node name="OffisMi" type="Node3D"]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 26.5085, -5.99906, 0)
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 26.508, 0, 0)
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_n1nic")
@ -69,3 +71,10 @@ depth = 3.72
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-4.37114e-08, 0.422618, -0.906308, 0, 0.906308, 0.422618, 1, 1.84732e-08, -3.9616e-08, -68.4262, 84.9077, -2.99101e-06)
[node name="spawnpoint" parent="." instance=ExtResource("1_cgcr3")]
transform = Transform3D(4, 0, 0, 0, 4, 0, 0, 0, 4, -16.854, 0.629008, 2.82309)
team = 1
[node name="spawnpoint2" parent="." instance=ExtResource("1_cgcr3")]
transform = Transform3D(4, 0, 0, 0, 4, 0, 0, 0, 4, 23.9201, 0.425767, -1.07893)

View File

@ -11,7 +11,7 @@
[sub_resource type="CapsuleMesh" id="CapsuleMesh_jqfxo"]
[node name="player" type="Node3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.10113, 0)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
[node name="CharacterBody3D" type="CharacterBody3D" parent="."]
script = ExtResource("1_8hh2g")

View File

@ -0,0 +1,17 @@
[gd_scene load_steps=4 format=3 uid="uid://833q6upr0s1k"]
[ext_resource type="Script" path="res://scripts/team_spawnpoint.gd" id="1_xuukx"]
[sub_resource type="PlaneMesh" id="PlaneMesh_ic53j"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lytgi"]
albedo_color = Color(1, 1, 0, 1)
[node name="spawnpoint" type="Node3D"]
transform = Transform3D(4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0)
script = ExtResource("1_xuukx")
[node name="area" type="CSGMesh3D" parent="."]
visible = false
mesh = SubResource("PlaneMesh_ic53j")
material = SubResource("StandardMaterial3D_lytgi")

View File

@ -11,6 +11,9 @@ var last_client_id = 1
var map_path
var map_root_name
var spawnpoints_os = []
var spawnpoints_cs = []
func parse_arguments():
var arguments = {}
for argument in OS.get_cmdline_args():
@ -47,12 +50,11 @@ func StartServer(map_name):
await get_tree().create_timer(0.1).timeout #костыль пиздец но мне похую как-то
var root_node_name = (map_name.split("/")[-1]).split(".")[0]
print(str(root_node_name))
print(str(get_tree().root.get_children()))
server_map = get_tree().root.get_node(root_node_name)
await get_tree().create_timer(0.5).timeout #костыль
settings = GameData.server_settings
var port = int(settings["port"])
var maxclients = int(settings["maxclients"])
@ -68,7 +70,15 @@ func StartServer(map_name):
var spectator = preload("res://scenes/models/spectator.tscn").instantiate()
server_map.add_child(spectator)
var spawnpoints = server_map.find_children("spawnpoint*", "" ,true)
print(str(spawnpoints))
for spawnpoint in spawnpoints:
print("Checking spawnpoint: " + str(spawnpoint) + ", team: " + str(spawnpoint.team))
if spawnpoint.team == 0: # cs
spawnpoints_cs.push_back(spawnpoint)
elif spawnpoint.team > 0: # os
spawnpoints_os.push_back(spawnpoint)
func send_everyone_except(client_id, args):
if (typeof(args[0]) == 4): #string
for current_client_id in clients.keys():
@ -108,10 +118,11 @@ func _Peer_Connected(client_id):
last_client_id += 1
clients[client_id] = player_script.new().properties.duplicate()
clients[client_id]["position"] = Vector3(0, 10, 0)
clients[client_id]["internal_id"] = internal_id
clients[client_id]["is_playable"] = false
clients[client_id]["current_weapon"] = settings["game"]["weapons"]["knife"].duplicate()
var client = clients[client_id]
client["position"] = Vector3(0, 10, 0)
client["internal_id"] = internal_id
client["is_playable"] = false
client["current_weapon"] = settings["game"]["weapons"]["knife"].duplicate()
print("New client's properties: " + str(clients[client_id]))
@ -128,11 +139,19 @@ func client_ready(client_id):
send_everyone_except(client_id, ["spawn_puppet", clients[client_id]])
clients[client_id]["ready"] = true
client["ready"] = true
var client_cb3d = find_cb3d_by_internal_id(internal_id)
var class_spawnpoint = find_class_type_by_number(client["class_type"])["spawnpoint"]
if (client["class_type"] == 0):
var class_spawnpoint = find_class_type_by_number(client["class_type"])["spawnpoint"]
client["position"] = Vector3(class_spawnpoint[0], class_spawnpoint[1], class_spawnpoint[2])
else:
var index = abs(client["class_type"])
if (client["class_type"] > 0):
client["position"] = spawnpoints_os.pick_random().get_class_spawnpoint(index)
elif (client["class_type"] < 0):
client["position"] = spawnpoints_cs.pick_random().get_class_spawnpoint(index)
client_cb3d.set_properties(client)
client_cb3d.teleport.rpc_id(client_id, Vector3(class_spawnpoint[0], class_spawnpoint[1], class_spawnpoint[2]))
client_cb3d.teleport.rpc_id(client_id, Vector3(client["position"].x, client["position"].y, client["position"].z))
func _Peer_Disconnected(client_id):
print("User " + str(client_id) + " has disconnected")
@ -149,7 +168,7 @@ func get_character_properties(client_id):
return
var to_send = clients[client_id]
rpc_id(client_id, "set_character_properties", to_send.duplicate())
@rpc("any_peer", "call_remote", "unreliable")
func sync_client(client_id, position, rotation):
var client = clients[client_id]
@ -196,8 +215,8 @@ func shot(client_id):
raycast.force_update_transform()
var target_point = raycast.get_collision_point()
weapon_raycast.target_position = weapon_raycast.to_local(target_point) #- weapon_raycast.position)
weapon_raycast.get_node("..").rotation.y = - atan((weapon_raycast.position.x - client_cb3d.position.x) / ((-current_weapon_settings["range"]) - (abs(weapon_raycast.position.z - client_cb3d.position.z))))
weapon_raycast.target_position = weapon_raycast.to_local(target_point) * 1.1
weapon_raycast.rotation.y = atan((weapon_raycast.position.x - client_cb3d.position.x) / ((-current_weapon_settings["range"]) - (abs(weapon_raycast.position.z - client_cb3d.position.z))))
weapon_raycast.target_position.y += current_weapon_settings["spreading"] * randf() * sin(randf() * 2 * PI)
weapon_raycast.target_position.z += current_weapon_settings["spreading"] * randf() * cos(randf() * 2 * PI)
@ -244,7 +263,7 @@ func change_weapon(client_id, new_weapon_number):
var client_cb3d = find_cb3d_by_internal_id(internal_id)
client_cb3d.change_weapon(new_weapon_number)
send_everyone_except(client_id, [client_cb3d.change_weapon_puppet, internal_id, new_weapon_number])
@rpc("any_peer", "call_remote", "reliable")
func client_reloading(client_id):
var client = clients[client_id]
@ -277,11 +296,21 @@ func reloading_complete(client_id, reloading_time):
@rpc("reliable", "any_peer", "call_remote")
func get_map(client_id):
rpc_id(client_id, "receive_map", map_path)
@rpc("reliable", "any_peer", "call_remote")
func choose_class(client_id, class_id):
var client = clients[client_id]
client["class_type"] = class_id
#here are must be checks if the teams are balanced. WIP.
switch_class.rpc_id(client_id, class_id)
##########################################CLIENT#######################
var player
var menu = preload("res://scenes/HUD/menu.tscn")
var current_map_instance
var choose_team_hud
var player_cb3d
@rpc ("reliable", "call_remote")
func set_character_properties(p):
@ -306,19 +335,28 @@ func despawn_puppet(internal_id):
func receive_map(p):
map_path = p
map_root_name = (map_path.split("/")[-1]).split(".")[0]
@rpc("authority", "reliable", "call_remote")
func switch_team(team):
pass
func switch_class(class_id):
print("Switching to team: " + str(class_id))
if (class_id == 128): # team is full, you must chose another
current_map_instance.remove_child(choose_team_hud)
current_map_instance.add_child(choose_team_hud)
player["class_type"] = class_id
rpc_id(1, "client_ready", multiplayer.get_unique_id())
current_map_instance.remove_child(choose_team_hud)
player_cb3d.set_property("is_playable", true)
player_cb3d.set_property("ready", true)
func spawn_player():
var player_node = player_model.instantiate()
var CB3D = player_node.find_child("CharacterBody3D")
player_cb3d = player_node.find_child("CharacterBody3D")
var properties = player_script.new().properties.duplicate()
properties = player
properties["is_playable"] = true
properties["ready"] = true
CB3D.set_properties(properties)
properties["is_playable"] = false
properties["ready"] = false
player_cb3d.set_properties(properties)
current_map_instance.add_child(player_node)
@ -338,7 +376,7 @@ func _Connection_Failed():
multiplayer.multiplayer_peer = null
peer = ENetMultiplayerPeer.new()
multiplayer.multiplayer_peer = peer
func _Connection_Succseeded():
print("Succsessfully connected to the server")
var nickname = GameData.client_settings["nickname"]
@ -357,11 +395,9 @@ func _Connection_Succseeded():
await spawn_player()
#var choose_team_hud = preload("res://scenes/HUD/choose_team.tscn").instantiate()
#current_map_instance.add_child(choose_team_hud)
rpc_id(1, "client_ready", multiplayer.get_unique_id())
choose_team_hud = preload("res://scenes/HUD/choose_team.tscn").instantiate()
current_map_instance.add_child(choose_team_hud)
func _Server_Disconnected():
print("Server has disconnected")
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)

View File

@ -31,7 +31,8 @@ var properties = {
current_weapon_number = 0,
last_shot = 0,
reloading = false,
offline_mode = false
offline_mode = false,
position = Vector3(0, 5, 0)
}
var speed = 12
@ -46,7 +47,7 @@ var client_settings
var can_shoot = true
var time_since_last_shot = 0
@onready var head = $Head
@onready var camera = $Head/Camera
@onready var camera: Camera3D = $Head/Camera
@onready var playerCharacterBody = $"."
var HUD
var healthBar
@ -58,9 +59,14 @@ func set_properties(props):
properties = props
$"Head/Nickname".text = properties["nickname"]
$"..".name = "player" + str(properties["internal_id"])
position = properties["position"]
if (game_settings != null):
change_weapon(properties["current_weapon"]["number"])
func set_property(key, value):
properties[key] = value
update_state()
func update_hud():
healthBar.value = properties["HP"]
ammoLabel.text = "Ammo: " + str(properties["current_weapon"]["ammo"])
@ -93,14 +99,15 @@ func find_current_weapon_by_number(number):
break
return found_weapon
func _ready():
position = Vector3(0, 5, 0)
func update_state():
camera.set_current(false)
$"Head/Nickname".text = properties["nickname"]
if (!properties["is_playable"]): return
camera.make_current()
print("I am alive")
var hud = load("res://scenes/HUD/hud.tscn").instantiate()
add_child(hud)
camera.set_current(true)
if (HUD == null):
var hud = load("res://scenes/HUD/hud.tscn").instantiate()
add_child(hud)
HUD = $"HUD"
healthBar = HUD.get_node("HealthBar")
ammoLabel = HUD.get_node("AmmoDisplay/Ammo")
@ -110,10 +117,11 @@ func _ready():
playerCharacterBody.up_direction = Vector3.UP;
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
func _ready():
update_state()
func update_weapon_raycast():
print(str(Weapons))
var current_weapon_name = Weapons.find_key(properties["current_weapon"])
print(current_weapon_name)
if(current_weapon_name == null): current_weapon_name = "knife"
var raycast:RayCast3D = get_node("Head/Camera/viewRaycast")
var weapon_raycast:RayCast3D = get_node("Head/Camera/Hand/" + str(current_weapon_name) + "/raycast")
@ -123,11 +131,12 @@ func update_weapon_raycast():
func try_shoot():
var current_weapon = game_settings["weapons"].find_key(find_weapon_by_number(properties["current_weapon"]["number"]))
var current_weapon_settings = game_settings["weapons"][current_weapon]
properties["reloading"] = false
if (properties["current_weapon"]["magazine"] == 0):
return
if Input.is_action_pressed("shoot") and current_weapon_settings["fireRate"] >= 0.5 and not Input.is_action_just_pressed("shoot"):
return
properties["reloading"] = false
time_since_last_shot = (Time.get_ticks_msec() - properties["last_shot"]) / 1000.
if (time_since_last_shot > current_weapon_settings["fireRate"]):
@ -142,7 +151,6 @@ func reload():
var current_weapon_settings = game_settings["weapons"][current_weapon]
var to_reload = current_weapon_settings["magazine"] - current_weapon_instance["magazine"]
if (properties["reloading"]):
print("Succsessfully reloaded")
if (to_reload <= current_weapon_instance["ammo"]):
current_weapon_instance["magazine"] += to_reload
current_weapon_instance["ammo"] -= to_reload
@ -228,34 +236,25 @@ func sync_puppet(i_id, p, rot):
@rpc ("authority", "call_remote", "reliable")
func set_hp(hp):
print("Got new hp" + str(hp))
if (!properties["is_playable"]): return
properties["HP"] = hp
healthBar.value = properties["HP"]
@rpc ("authority", "call_remote", "reliable")
func set_game_settings(s):
if(!properties["is_playable"]): return
#print("Got settings from server: " + str(s))
#if(!properties["is_playable"]): return
game_settings = s
gravity = game_settings["moving"]["gravity"]
walk = game_settings["moving"]["walk"]
run = game_settings["moving"]["run"]
jump = game_settings["moving"]["jump"]
print("Game settings weapon list: "+ str(game_settings["weapons"]))
print("Changing weapon to " + str(properties["current_weapon"]["number"]))
change_weapon(properties["current_weapon"]["number"])
@rpc ("authority", "call_remote", "reliable")
func teleport(pos):
$".".position = pos
print("Teleporing to " + str(pos))
@rpc ("authority", "call_remote", "reliable")
func change_weapon_puppet(i_id, new_weapon_number):
if (int(i_id) == properties["internal_id"]):
change_weapon(new_weapon_number)
#@rpc("any_peer", "call_remote", "reliable")
#func shot_made():
#properties["current_weapon"]["magazine"] -= 1

View File

@ -1,11 +1,26 @@
extends Button
@onready var button = $"."
@onready var choose_team = $"../.."
@onready var choose_class_os = $"../../../Choose_class_OS"
@onready var choose_class_cs = $"../../../Choose_class_CS"
func _ready():
button.pressed.connect(self._button_pressed)
func _button_pressed():
if name == "Select_CS":
print("Selected CS")
elif name == "Select_OS":
print("Selected OS")
var team
match name:
"Select_CS":
choose_class_cs.visible = true
choose_class_os.visible = false
"Select_OS":
choose_class_os.visible = true
choose_class_cs.visible = false
"Select_SP":
print("Spectating")
Networking.choose_class.rpc_id(1, multiplayer.get_unique_id(), 0)
_:
var class_id = int(name.split("_")[1])
Networking.choose_class.rpc_id(1, multiplayer.get_unique_id(), class_id)
choose_team.visible = false

View File

@ -0,0 +1,19 @@
extends Node3D
enum teams {
team_CS = -1,
team_OS = 1
}
@onready var spawnpoints = [
Vector3(0, 1, 0),
Vector3(scale.x, 2, scale.z),
Vector3(-scale.x, 2, scale.z),
Vector3(scale.x, 2, -scale.z),
Vector3(-scale.x, 2, -scale.z)
]
@export var team:teams
func get_class_spawnpoint(class_id):
return position + (spawnpoints[abs(class_id) - 1])

View File

@ -1,3 +1 @@
{
"nickname": "Unnamed"
}
{ "nickname": "Unnamed" }

View File

@ -36,7 +36,7 @@
"reload": 4,
"magazine": 30,
"fireRate": 0.2,
"spreading": 0,
"spreading": 1,
"ammo": 100,
"range": 100
}