fixed wrong weapon range change

This commit is contained in:
leca 2024-02-21 02:23:02 +03:00
parent 8237ec509a
commit 71f9cdec66
2 changed files with 35 additions and 11 deletions

View File

@ -149,6 +149,9 @@ func shot(client_id):
var raycast:RayCast3D = find_cb3d_by_internal_id(internal_id).get_node("Head/Camera/RayCast3D")
raycast.target_position.z = -current_weapon_settings["range"]
raycast.force_raycast_update()
raycast.force_update_transform()
var target = raycast.get_collider()
if (not target is CharacterBody3D): return
var target_internal_id = int(target.get_node("..").name.get_slice("player", 1))
@ -178,10 +181,11 @@ func shot(client_id):
@rpc("reliable", "call_remote", "any_peer")
func change_weapon(client_id, new_weapon_number):
var client = clients[client_id]
client["reloading"] = false
var internal_id = str(client["internal_id"])
for weapon in Weapons.keys():
if (Weapons[weapon]["number"] == new_weapon_number):
client["current_weapon"] = Weapons[weapon]
if (settings["game"]["weapons"][weapon]["number"] == new_weapon_number):
client["current_weapon"] = settings["game"]["weapons"][weapon].duplicate()
break
var client_cb3d = find_cb3d_by_internal_id(internal_id)
client_cb3d.change_weapon(new_weapon_number)
@ -190,15 +194,31 @@ func change_weapon(client_id, new_weapon_number):
@rpc("any_peer", "call_remote", "reliable")
func client_reloading(client_id):
var client = clients[client_id]
var current_weapon = settings["game"]["weapons"].find_key(find_weapon_by_number(client["current_weapon"]["number"]))
var current_weapon_settings = settings["game"]["weapons"][current_weapon]
var to_reload = current_weapon_settings["magazine"] - client["current_weapon"]["magazine"]
if (to_reload <= client["current_weapon"]["ammo"]):
client["current_weapon"]["magazine"] += to_reload
client["current_weapon"]["ammo"] -= to_reload
var weapons_list = settings["game"]["weapons"]
var current_client_weapon = client["current_weapon"]
var current_weapon_example = weapons_list.find_key(find_weapon_by_number(current_client_weapon["number"]))
var current_weapon_settings = weapons_list[current_weapon_example]
var reload_time = current_weapon_settings["reload"]
client["reloading"] = true
reloading_complete(client_id, reload_time)
func reloading_complete(client_id, reloading_time):
await get_tree().create_timer(reloading_time).timeout
var client = clients[client_id]
if (!client["reloading"]): # if a client has interrupted the reloading
return
var weapons_list = settings["game"]["weapons"]
var current_client_weapon = client["current_weapon"]
var current_weapon_example = weapons_list.find_key(find_weapon_by_number(current_client_weapon["number"]))
var current_weapon_settings = weapons_list[current_weapon_example]
var to_reload = current_weapon_settings["magazine"] - current_client_weapon["magazine"]
if (to_reload <= current_client_weapon["ammo"]):
current_client_weapon["magazine"] += to_reload
current_client_weapon["ammo"] -= to_reload
else:
client["current_weapon"]["magazine"] += client["current_weapon"]["ammo"]
client["current_weapon"]["ammo"] = 0
current_client_weapon["magazine"] += current_client_weapon["ammo"]
current_client_weapon["ammo"] = 0
##########################################CLIENT#######################
var player

View File

@ -29,7 +29,8 @@ var properties = {
ready = false,
current_weapon = null, #game_settings["weapons"]["knife"].duplicate(),
current_weapon_number = 0,
last_shot = 0
last_shot = 0,
reloading = false
}
var speed = 0
@ -52,6 +53,8 @@ var magazineLabel
func set_properties(props):
properties = props
$"..".name = "player" + str(properties["internal_id"])
if (game_settings != null):
change_weapon(properties["current_weapon"]["number"])
func update_hud():
healthBar.value = properties["HP"]
@ -59,6 +62,7 @@ func update_hud():
magazineLabel.text = "Magazine: " + str(properties["current_weapon"]["magazine"])
func change_weapon(new_weapon_number):
properties["reloading"] = false
var weapons = $"Head/Camera/Hand".get_children()
for weapon in weapons:
weapon.visible = false