2024-02-07 23:25:08 +03:00
|
|
|
extends CharacterBody3D
|
|
|
|
|
|
|
|
const SENSETIVITY = 0.009;
|
|
|
|
|
2024-02-08 21:16:31 +03:00
|
|
|
enum Class_type {
|
|
|
|
Spectator = 0,
|
|
|
|
Astra = 1,
|
|
|
|
BlackArch = 2,
|
|
|
|
Kali = 3,
|
|
|
|
Debian = 4,
|
|
|
|
Arch = 5,
|
|
|
|
Windows11 = -1,
|
|
|
|
WindowsServer = -2,
|
|
|
|
MacOS = -3,
|
|
|
|
WindowsXP = -4,
|
|
|
|
Windows10 = -5
|
|
|
|
}
|
|
|
|
|
2024-02-18 01:35:54 +03:00
|
|
|
var Weapons = GameData.Weapons
|
|
|
|
|
2024-03-07 14:46:59 +03:00
|
|
|
var properties
|
2024-02-08 21:16:31 +03:00
|
|
|
|
2024-02-21 04:37:40 +03:00
|
|
|
var speed = 12
|
|
|
|
var walk = 12
|
|
|
|
var run = 24
|
|
|
|
var jump = 16
|
|
|
|
var gravity = 9.8
|
2024-02-28 09:23:20 +03:00
|
|
|
var acceleration = 2.5
|
|
|
|
var inertia = 20
|
2024-03-02 03:46:17 +03:00
|
|
|
var climbing = false
|
2024-02-21 04:37:40 +03:00
|
|
|
|
2024-02-12 00:11:50 +03:00
|
|
|
var game_settings
|
|
|
|
var client_settings
|
2024-02-18 02:42:31 +03:00
|
|
|
var can_shoot = true
|
|
|
|
var time_since_last_shot = 0
|
2024-02-29 23:13:30 +03:00
|
|
|
|
2024-03-05 18:58:11 +03:00
|
|
|
var round_status = {
|
|
|
|
"cs_round_score" = 0,
|
|
|
|
"os_round_score" = 0,
|
|
|
|
"os_game_score" = 0,
|
|
|
|
"cs_game_score" = 0,
|
|
|
|
"round_number" = 0,
|
|
|
|
}
|
|
|
|
|
2024-02-07 23:25:08 +03:00
|
|
|
@onready var head = $Head
|
2024-02-26 13:32:26 +03:00
|
|
|
@onready var camera: Camera3D = $Head/Camera
|
2024-02-07 23:25:08 +03:00
|
|
|
@onready var playerCharacterBody = $"."
|
2024-03-05 22:45:27 +03:00
|
|
|
@onready var collision_shapes = find_children("collision*","",false)
|
2024-03-07 14:46:59 +03:00
|
|
|
|
2024-03-05 18:58:11 +03:00
|
|
|
var HUD
|
2024-02-29 23:13:30 +03:00
|
|
|
var healthLabel
|
|
|
|
var armorLabel
|
2024-02-18 17:36:39 +03:00
|
|
|
var ammoLabel
|
|
|
|
var magazineLabel
|
2024-02-21 03:22:33 +03:00
|
|
|
var statusLabel
|
2024-03-05 18:58:11 +03:00
|
|
|
var csScoreRoundLabel
|
|
|
|
var csScoreGameLabel
|
|
|
|
var osScoreRoundLabel
|
|
|
|
var osScoreGameLabel
|
|
|
|
var roundNumberLabel
|
|
|
|
var timeLabel
|
|
|
|
var winnerLabel
|
2024-03-05 22:45:27 +03:00
|
|
|
var killLogList
|
2024-02-24 20:11:41 +03:00
|
|
|
|
2024-02-18 01:35:54 +03:00
|
|
|
func set_properties(props):
|
2024-03-07 14:46:59 +03:00
|
|
|
print("Got props from server: " + str(props))
|
2024-02-18 01:35:54 +03:00
|
|
|
properties = props
|
2024-02-24 20:11:41 +03:00
|
|
|
$"Head/Nickname".text = properties["nickname"]
|
2024-02-29 15:21:37 +03:00
|
|
|
name = "player" + str(properties["internal_id"])
|
2024-02-26 13:32:26 +03:00
|
|
|
position = properties["position"]
|
2024-02-21 02:23:02 +03:00
|
|
|
if (game_settings != null):
|
|
|
|
change_weapon(properties["current_weapon"]["number"])
|
2024-02-26 13:32:26 +03:00
|
|
|
|
|
|
|
func set_property(key, value):
|
|
|
|
properties[key] = value
|
|
|
|
update_state()
|
|
|
|
|
2024-03-05 18:58:11 +03:00
|
|
|
func init_hud():
|
|
|
|
HUD = $HUD
|
|
|
|
|
|
|
|
healthLabel = $"HUD/health_and_ammo_display/healthdisplay/text"
|
|
|
|
armorLabel = $"HUD/health_and_ammo_display/armordisplay/text"
|
|
|
|
ammoLabel = $"HUD/health_and_ammo_display/ammodisplay/text"
|
|
|
|
magazineLabel = $"HUD/health_and_ammo_display/magazinedisplay/text"
|
|
|
|
statusLabel = $"HUD/Status"
|
|
|
|
|
|
|
|
csScoreRoundLabel = $"HUD/round_status/cs_score_round"
|
|
|
|
csScoreGameLabel = $"HUD/round_status/cs_score_game"
|
|
|
|
osScoreRoundLabel = $"HUD/round_status/os_score_round"
|
|
|
|
osScoreGameLabel = $"HUD/round_status/os_score_game"
|
|
|
|
|
|
|
|
roundNumberLabel = $"HUD/round_status/round_number"
|
|
|
|
timeLabel = $"HUD/round_status/time"
|
|
|
|
winnerLabel = $"HUD/round_status/winner"
|
2024-03-05 22:45:27 +03:00
|
|
|
|
|
|
|
killLogList = $"HUD/kill_log"
|
2024-03-05 18:58:11 +03:00
|
|
|
|
2024-02-18 17:36:39 +03:00
|
|
|
func update_hud():
|
2024-02-29 23:13:30 +03:00
|
|
|
healthLabel.text = str(properties["HP"])
|
|
|
|
armorLabel.text = str(properties["AP"])
|
|
|
|
ammoLabel.text = str(properties["current_weapon"]["ammo"])
|
|
|
|
magazineLabel.text = str(properties["current_weapon"]["magazine"])
|
2024-02-21 03:22:33 +03:00
|
|
|
if (properties["reloading"]):
|
|
|
|
statusLabel.text = "Reloading..."
|
|
|
|
else:
|
|
|
|
statusLabel.text = "Reloaded"
|
2024-02-18 17:36:39 +03:00
|
|
|
|
2024-03-05 18:58:11 +03:00
|
|
|
csScoreRoundLabel.text = str(round_status["cs_round_score"])
|
|
|
|
csScoreGameLabel.text = str(round_status["cs_game_score"])
|
|
|
|
|
|
|
|
osScoreRoundLabel.text = str(round_status["os_round_score"])
|
|
|
|
osScoreGameLabel.text = str(round_status["os_game_score"])
|
|
|
|
|
|
|
|
roundNumberLabel.text = "Round " + str(round_status["round_number"])
|
2024-03-10 01:01:27 +03:00
|
|
|
|
|
|
|
func find_weapon_name_by_number(number):
|
|
|
|
var name = ""
|
|
|
|
for weapon in game_settings["weapons"].keys():
|
|
|
|
if (game_settings["weapons"][weapon].number == number):
|
|
|
|
name = weapon
|
|
|
|
return name
|
|
|
|
|
|
|
|
@rpc("authority", "call_local", "reliable")
|
2024-02-18 17:36:39 +03:00
|
|
|
func change_weapon(new_weapon_number):
|
2024-02-18 01:35:54 +03:00
|
|
|
var weapons = $"Head/Camera/Hand".get_children()
|
|
|
|
for weapon in weapons:
|
|
|
|
weapon.visible = false
|
2024-02-18 17:36:39 +03:00
|
|
|
weapons[new_weapon_number].visible = true
|
2024-03-10 01:01:27 +03:00
|
|
|
print("Changing weapon: " + str(new_weapon_number))
|
|
|
|
#if (properties["is_playable"]):
|
|
|
|
#properties["current_weapon"] = properties["weapons"][find_weapon_name_by_number(new_weapon_number)]
|
|
|
|
#properties["reloading"] = false
|
|
|
|
|
|
|
|
func find_weapon_in_inventory(number):
|
|
|
|
var found_weapon
|
|
|
|
for weapon in properties["weapons"].values():
|
|
|
|
if weapon["number"] == number:
|
|
|
|
found_weapon = weapon
|
|
|
|
break
|
|
|
|
return found_weapon
|
2024-02-18 17:36:39 +03:00
|
|
|
|
|
|
|
func find_weapon_by_number(number):
|
|
|
|
var found_weapon
|
|
|
|
for weapon in game_settings["weapons"].keys():
|
|
|
|
if (game_settings["weapons"][weapon]["number"] == number):
|
|
|
|
found_weapon = game_settings["weapons"][weapon].duplicate()
|
|
|
|
break
|
|
|
|
return found_weapon
|
2024-02-07 23:25:08 +03:00
|
|
|
|
2024-02-21 03:22:33 +03:00
|
|
|
func find_current_weapon_by_number(number):
|
|
|
|
var found_weapon
|
|
|
|
for weapon in Weapons.keys():
|
|
|
|
if (Weapons[weapon]["number"] == number):
|
|
|
|
found_weapon = Weapons[weapon]
|
|
|
|
break
|
|
|
|
return found_weapon
|
|
|
|
|
2024-02-26 13:32:26 +03:00
|
|
|
func update_state():
|
|
|
|
camera.set_current(false)
|
2024-02-15 15:14:21 +03:00
|
|
|
$"Head/Nickname".text = properties["nickname"]
|
2024-03-05 18:58:11 +03:00
|
|
|
|
2024-02-08 21:16:31 +03:00
|
|
|
if (!properties["is_playable"]): return
|
2024-02-26 13:32:26 +03:00
|
|
|
camera.set_current(true)
|
|
|
|
if (HUD == null):
|
|
|
|
var hud = load("res://scenes/HUD/hud.tscn").instantiate()
|
|
|
|
add_child(hud)
|
2024-03-05 18:58:11 +03:00
|
|
|
init_hud()
|
|
|
|
update_hud()
|
2024-02-18 17:36:39 +03:00
|
|
|
|
2024-02-07 23:25:08 +03:00
|
|
|
playerCharacterBody.up_direction = Vector3.UP;
|
|
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
2024-02-15 15:14:21 +03:00
|
|
|
|
2024-02-26 13:32:26 +03:00
|
|
|
func _ready():
|
|
|
|
update_state()
|
|
|
|
|
2024-02-24 20:11:41 +03:00
|
|
|
func update_weapon_raycast():
|
|
|
|
var current_weapon_name = Weapons.find_key(properties["current_weapon"])
|
|
|
|
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")
|
|
|
|
|
|
|
|
weapon_raycast.target_position = weapon_raycast.to_local(raycast.to_global(raycast.target_position) - weapon_raycast.position)
|
2024-02-07 23:25:08 +03:00
|
|
|
|
2024-02-18 02:42:31 +03:00
|
|
|
func try_shoot():
|
2024-03-10 01:01:27 +03:00
|
|
|
print(str(properties["current_weapon"]))
|
|
|
|
#var current_weapon = game_settings["weapons"].find_key(find_weapon_by_number(properties["current_weapon"]["number"]))
|
|
|
|
var current_weapon = find_weapon_name_by_number(properties["current_weapon"]["number"])#game_settings["weapons"].find_key(find_weapon_by_number(properties["current_weapon"]["number"]))
|
2024-03-27 20:07:26 +03:00
|
|
|
print("currect weapon: " + current_weapon)
|
2024-02-18 02:42:31 +03:00
|
|
|
var current_weapon_settings = game_settings["weapons"][current_weapon]
|
2024-02-26 13:32:26 +03:00
|
|
|
properties["reloading"] = false
|
|
|
|
|
2024-02-18 17:36:39 +03:00
|
|
|
if (properties["current_weapon"]["magazine"] == 0):
|
|
|
|
return
|
2024-02-18 02:42:31 +03:00
|
|
|
if Input.is_action_pressed("shoot") and current_weapon_settings["fireRate"] >= 0.5 and not Input.is_action_just_pressed("shoot"):
|
|
|
|
return
|
2024-03-07 14:46:59 +03:00
|
|
|
time_since_last_shot = (Time.get_ticks_msec() - properties["last_shot"]) / 1000.
|
2024-02-18 02:42:31 +03:00
|
|
|
|
|
|
|
if (time_since_last_shot > current_weapon_settings["fireRate"]):
|
2024-03-07 14:46:59 +03:00
|
|
|
Networking.shot.rpc_id(1, multiplayer.get_unique_id())
|
|
|
|
properties["current_weapon"]["magazine"] -= 1
|
2024-02-18 02:42:31 +03:00
|
|
|
properties["last_shot"] = Time.get_ticks_msec()
|
2024-03-27 20:07:26 +03:00
|
|
|
|
|
|
|
var raycast:RayCast3D = get_node("Head/Camera/viewRaycast")
|
|
|
|
var weapon_raycast:RayCast3D = get_node("Head/Camera/Hand/" + str(current_weapon) + "/raycast")
|
|
|
|
raycast.target_position.z = -current_weapon_settings["range"]
|
|
|
|
raycast.force_raycast_update()
|
|
|
|
raycast.force_update_transform()
|
|
|
|
var target_point = raycast.get_collision_point()
|
|
|
|
|
|
|
|
weapon_raycast.target_position = weapon_raycast.to_local(target_point) * 1.1
|
2024-03-27 20:47:54 +03:00
|
|
|
weapon_raycast.force_raycast_update()
|
|
|
|
weapon_raycast.force_update_transform()
|
2024-03-27 20:07:26 +03:00
|
|
|
weapon_raycast.rotation.y = atan((weapon_raycast.position.x - position.x) / ((-current_weapon_settings["range"]) - (abs(weapon_raycast.position.z - 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)
|
|
|
|
|
|
|
|
weapon_raycast.force_raycast_update()
|
|
|
|
weapon_raycast.force_update_transform()
|
|
|
|
|
|
|
|
var trace = preload("res://scenes/models/bullet_trace.tscn").instantiate()
|
|
|
|
get_node("..").add_child(trace)
|
|
|
|
trace.init((weapon_raycast.global_position), (weapon_raycast.get_collision_point()))
|
2024-02-21 03:22:33 +03:00
|
|
|
|
|
|
|
func reload():
|
|
|
|
var current_weapon_instance = properties["current_weapon"]
|
|
|
|
var current_weapon = game_settings["weapons"].find_key(find_weapon_by_number(current_weapon_instance["number"]))
|
|
|
|
var current_weapon_settings = game_settings["weapons"][current_weapon]
|
|
|
|
var to_reload = current_weapon_settings["magazine"] - current_weapon_instance["magazine"]
|
|
|
|
if (properties["reloading"]):
|
|
|
|
if (to_reload <= current_weapon_instance["ammo"]):
|
|
|
|
current_weapon_instance["magazine"] += to_reload
|
|
|
|
current_weapon_instance["ammo"] -= to_reload
|
|
|
|
else:
|
|
|
|
current_weapon_instance["magazine"] += current_weapon_instance["ammo"]
|
|
|
|
current_weapon_instance["ammo"] = 0
|
|
|
|
properties["reloading"] = false
|
2024-03-05 18:58:11 +03:00
|
|
|
if (HUD != null):
|
|
|
|
update_hud()
|
2024-02-18 02:42:31 +03:00
|
|
|
|
2024-02-07 23:25:08 +03:00
|
|
|
func _unhandled_input(event):
|
2024-02-08 21:16:31 +03:00
|
|
|
if (!properties["is_playable"]): return
|
2024-02-18 01:35:54 +03:00
|
|
|
|
2024-03-10 01:01:27 +03:00
|
|
|
var weapon_change = 0
|
2024-02-18 01:35:54 +03:00
|
|
|
if Input.is_action_pressed("MWU"):
|
2024-03-10 01:01:27 +03:00
|
|
|
weapon_change = 1
|
2024-02-18 01:35:54 +03:00
|
|
|
if Input.is_action_pressed("MWD"):
|
2024-03-10 01:01:27 +03:00
|
|
|
weapon_change = -1
|
|
|
|
if (weapon_change != 0):
|
|
|
|
var new_weapon_number = wrap(properties["current_weapon"]["number"] + weapon_change, 0, game_settings["weapons"].size())
|
|
|
|
properties["current_weapon"] = find_weapon_in_inventory(new_weapon_number)
|
|
|
|
|
|
|
|
print(str(properties["current_weapon"]))
|
|
|
|
Networking.change_weapon.rpc_id(1, multiplayer.get_unique_id(), properties["current_weapon"]["number"])
|
2024-02-17 01:57:08 +03:00
|
|
|
|
2024-02-07 23:25:08 +03:00
|
|
|
if event is InputEventMouseMotion:
|
2024-03-05 22:45:27 +03:00
|
|
|
rotate_y(-event.relative.x * SENSETIVITY)
|
2024-02-07 23:25:08 +03:00
|
|
|
camera.rotate_x(-event.relative.y * SENSETIVITY)
|
|
|
|
camera.rotation.x = clamp(camera.rotation.x, deg_to_rad(-50), deg_to_rad(60))
|
2024-02-14 22:18:05 +03:00
|
|
|
|
2024-02-07 23:25:08 +03:00
|
|
|
func _physics_process(delta):
|
2024-02-12 00:11:50 +03:00
|
|
|
if (!properties["is_playable"]): return
|
|
|
|
if (game_settings == null): return
|
2024-02-14 22:18:05 +03:00
|
|
|
if (multiplayer.multiplayer_peer == null):
|
|
|
|
properties["is_playable"] = false
|
2024-02-17 01:57:08 +03:00
|
|
|
|
2024-02-18 02:42:31 +03:00
|
|
|
if Input.is_action_pressed("shoot"):
|
|
|
|
try_shoot()
|
2024-02-18 17:36:39 +03:00
|
|
|
|
2024-03-05 18:58:11 +03:00
|
|
|
if (HUD != null):
|
|
|
|
update_hud()
|
|
|
|
|
2024-02-24 20:11:41 +03:00
|
|
|
update_weapon_raycast()
|
2024-02-18 17:36:39 +03:00
|
|
|
|
|
|
|
if Input.is_action_just_pressed("reload"):
|
|
|
|
var current_weapon = game_settings["weapons"].find_key(find_weapon_by_number(properties["current_weapon"]["number"]))
|
2024-03-10 01:01:27 +03:00
|
|
|
Networking.client_reloading.rpc_id(1, multiplayer.get_unique_id())
|
2024-02-21 03:22:33 +03:00
|
|
|
properties["reloading"] = true
|
|
|
|
get_tree().create_timer(game_settings["weapons"][current_weapon]["reload"]).connect("timeout", reload)
|
|
|
|
|
2024-02-07 23:25:08 +03:00
|
|
|
var input_dir = Input.get_vector("left", "right", "forward", "backward")
|
2024-03-05 22:45:27 +03:00
|
|
|
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
2024-02-07 23:25:08 +03:00
|
|
|
|
2024-02-26 23:06:15 +03:00
|
|
|
if direction:
|
2024-02-28 09:23:20 +03:00
|
|
|
velocity.x = lerp(velocity.x, direction.x * speed, delta * acceleration)
|
|
|
|
velocity.z = lerp(velocity.z, direction.z * speed, delta * acceleration)
|
2024-03-02 03:46:17 +03:00
|
|
|
if (climbing):
|
|
|
|
print(str(input_dir))
|
|
|
|
velocity.y = -input_dir.y * jump / 2 if input_dir.x == 0 else abs(input_dir.x) * jump / 2
|
2024-02-26 23:06:15 +03:00
|
|
|
else:
|
|
|
|
if is_on_floor():
|
2024-02-28 09:23:20 +03:00
|
|
|
velocity.x = lerp(velocity.x, direction.x * speed * 0.5, delta * inertia)
|
|
|
|
velocity.z = lerp(velocity.z, direction.z * speed * 0.5, delta * inertia)
|
2024-03-02 03:46:17 +03:00
|
|
|
elif not is_on_floor() and not climbing:
|
2024-02-26 23:06:15 +03:00
|
|
|
velocity.x = lerp(velocity.x, direction.x * speed * 0.5, delta)
|
|
|
|
velocity.z = lerp(velocity.z, direction.z * speed * 0.5, delta)
|
2024-02-07 23:25:08 +03:00
|
|
|
if is_on_floor():
|
|
|
|
if Input.is_action_just_pressed("jump"):
|
2024-02-12 00:11:50 +03:00
|
|
|
velocity.y = jump
|
2024-02-07 23:25:08 +03:00
|
|
|
if Input.is_action_pressed("run"):
|
2024-02-12 00:11:50 +03:00
|
|
|
speed = run
|
2024-02-07 23:25:08 +03:00
|
|
|
else:
|
2024-02-12 00:11:50 +03:00
|
|
|
speed = walk
|
2024-02-07 23:25:08 +03:00
|
|
|
else:
|
2024-02-26 23:06:15 +03:00
|
|
|
velocity.y -= 4 * gravity * delta
|
2024-02-07 23:25:08 +03:00
|
|
|
velocity.x = lerp(velocity.x, direction.x * speed, delta)
|
|
|
|
velocity.z = lerp(velocity.z, direction.z * speed, delta)
|
|
|
|
move_and_slide()
|
2024-03-02 03:46:17 +03:00
|
|
|
for index in get_slide_collision_count():
|
|
|
|
var collision := get_slide_collision(index)
|
|
|
|
var body := collision.get_collider()
|
|
|
|
if ("ladder" in body.name):
|
|
|
|
climbing = true
|
|
|
|
else:
|
|
|
|
climbing = false
|
|
|
|
#print("Collided with: " + body.name)
|
2024-02-07 23:25:08 +03:00
|
|
|
if (!multiplayer.is_server()):
|
2024-03-05 22:45:27 +03:00
|
|
|
Networking.sync_client.rpc_id(1, multiplayer.get_unique_id(), $".".position, {"y": rotation.y, "x": camera.rotation.x})
|
2024-02-08 21:20:49 +03:00
|
|
|
#print("I am " + $"..".name +", belonging of " + str(multiplayer.get_unique_id()) + ", with internal ID: " + str(properties["internal_id"]))
|
2024-02-07 23:25:08 +03:00
|
|
|
|
2024-02-08 21:20:49 +03:00
|
|
|
@rpc ("authority", "call_remote", "unreliable")
|
2024-02-15 13:10:01 +03:00
|
|
|
func sync_puppet(i_id, p, rot):
|
2024-02-15 18:12:48 +03:00
|
|
|
if(!properties["ready"]): return
|
|
|
|
if(properties["is_playable"]): return
|
2024-02-17 20:23:18 +03:00
|
|
|
if (int(i_id) == properties["internal_id"]):
|
2024-02-07 23:25:08 +03:00
|
|
|
playerCharacterBody.position = p
|
2024-03-05 22:45:27 +03:00
|
|
|
rotation.y = rot.y
|
2024-02-15 13:10:01 +03:00
|
|
|
camera.rotation.x = rot.x
|
2024-02-12 00:11:50 +03:00
|
|
|
|
2024-02-17 01:57:08 +03:00
|
|
|
@rpc ("authority", "call_remote", "reliable")
|
|
|
|
func set_hp(hp):
|
|
|
|
if (!properties["is_playable"]): return
|
|
|
|
properties["HP"] = hp
|
|
|
|
|
2024-02-12 00:11:50 +03:00
|
|
|
@rpc ("authority", "call_remote", "reliable")
|
|
|
|
func set_game_settings(s):
|
|
|
|
game_settings = s
|
|
|
|
gravity = game_settings["moving"]["gravity"]
|
|
|
|
walk = game_settings["moving"]["walk"]
|
|
|
|
run = game_settings["moving"]["run"]
|
|
|
|
jump = game_settings["moving"]["jump"]
|
2024-02-28 09:23:20 +03:00
|
|
|
acceleration = game_settings["moving"]["acceleration"]
|
|
|
|
inertia = game_settings["moving"]["inertia"]
|
2024-02-18 17:36:39 +03:00
|
|
|
change_weapon(properties["current_weapon"]["number"])
|
2024-03-27 20:07:26 +03:00
|
|
|
GameData.apply_weapon_settings(game_settings["weapons"])
|
|
|
|
Weapons = GameData.Weapons
|
2024-02-18 17:36:39 +03:00
|
|
|
|
2024-02-17 01:57:08 +03:00
|
|
|
@rpc ("authority", "call_remote", "reliable")
|
|
|
|
func teleport(pos):
|
2024-03-02 03:46:17 +03:00
|
|
|
position = pos
|
2024-02-18 01:35:54 +03:00
|
|
|
|
|
|
|
@rpc ("authority", "call_remote", "reliable")
|
2024-02-18 17:36:39 +03:00
|
|
|
func change_weapon_puppet(i_id, new_weapon_number):
|
2024-02-18 01:35:54 +03:00
|
|
|
if (int(i_id) == properties["internal_id"]):
|
2024-02-18 17:36:39 +03:00
|
|
|
change_weapon(new_weapon_number)
|
2024-03-05 02:46:07 +03:00
|
|
|
|
2024-03-05 18:58:11 +03:00
|
|
|
@rpc("authority", "call_remote", "reliable")
|
|
|
|
func update_round_status(s):
|
|
|
|
print("Updated round status: " + str(s))
|
|
|
|
round_status = s
|
|
|
|
if(HUD != null):
|
|
|
|
update_hud()
|
|
|
|
|
2024-03-05 02:46:07 +03:00
|
|
|
@rpc("authority", "call_remote", "reliable")
|
|
|
|
func end_round(result):
|
|
|
|
print("Result: %s" % str(result))
|
2024-03-05 18:58:11 +03:00
|
|
|
winnerLabel.visible = true
|
|
|
|
if (result > 0):
|
|
|
|
winnerLabel.text = "OS WON"
|
|
|
|
elif (result < 0 ):
|
|
|
|
winnerLabel.text = "CS WON"
|
|
|
|
await get_tree().create_timer(1).timeout
|
|
|
|
winnerLabel.visible = false
|
|
|
|
winnerLabel.text = ""
|
|
|
|
|
2024-03-05 22:45:27 +03:00
|
|
|
@rpc("authority", "call_remote", "reliable")
|
|
|
|
func kill_notification(killer, victim):
|
|
|
|
var entry = load("res://scenes/models/kill_log_entry.tscn").instantiate()
|
2024-03-07 02:00:22 +03:00
|
|
|
entry.get_node("killer").text = str(killer)
|
|
|
|
entry.get_node("victim").text = str(victim)
|
2024-03-05 22:45:27 +03:00
|
|
|
killLogList.add_child(entry)
|