Got rid of get/set on Player's dead var. Fixed regrets on kill.
parent
f3fd5de171
commit
321e2fcbcc
|
@ -1,5 +1,13 @@
|
|||
extends CharacterBody3D
|
||||
|
||||
var max_health = 100
|
||||
var health = max_health:
|
||||
set(value):
|
||||
main.player_list.players[self.get_multiplayer_authority()].health = value
|
||||
main.push_local_player_info()
|
||||
get:
|
||||
return main.player_list.players[self.get_multiplayer_authority()].health
|
||||
|
||||
@export var mouse_sensitivity := 0.15
|
||||
|
||||
@onready var main = get_tree().root.get_node("Main")
|
||||
|
@ -98,29 +106,29 @@ var previously_on_floor := false
|
|||
|
||||
var lagging_movement_velocity = Vector3.ZERO
|
||||
|
||||
var dead = false: # used to workaround Godot crash when destroying player_nodes
|
||||
set(value):
|
||||
match value:
|
||||
true:
|
||||
#input_active = false
|
||||
self.hide()
|
||||
$Body.disabled = true
|
||||
hud.pain = 3
|
||||
crosshair.hide()
|
||||
#$Head/Camera.transform.origin.y
|
||||
#set_physics_process(false)
|
||||
false:
|
||||
#input_active = true
|
||||
self.show()
|
||||
$Body.disabled = false
|
||||
$SpawnSFX.play()
|
||||
$SpawnVFX.emitting = true
|
||||
hud.pain = 0
|
||||
crosshair.show()
|
||||
#$Head/Camera.transform.origin = Vector3(0,0,0)
|
||||
#set_physics_process(true)
|
||||
dead = value
|
||||
|
||||
var dead = false#: # used to workaround Godot crash when destroying player_nodes
|
||||
# set(value):
|
||||
# match value:
|
||||
# true:
|
||||
# #input_active = false
|
||||
# self.hide()
|
||||
# $Body.disabled = true
|
||||
# hud.pain = 3
|
||||
# crosshair.hide()
|
||||
# #$Head/Camera.transform.origin.y
|
||||
# #set_physics_process(false)
|
||||
# false:
|
||||
# #input_active = true
|
||||
# self.show()
|
||||
# $Body.disabled = false
|
||||
# $SpawnSFX.play()
|
||||
# $SpawnVFX.emitting = true
|
||||
# hud.pain = 0
|
||||
# crosshair.show()
|
||||
# #$Head/Camera.transform.origin = Vector3(0,0,0)
|
||||
# #set_physics_process(true)
|
||||
# dead = value
|
||||
#
|
||||
var focus_banner_alpha = 0
|
||||
var focus_banner_inc = 5
|
||||
var focus_banner_dec = 1
|
||||
|
@ -148,13 +156,13 @@ func view_banner(show:bool):
|
|||
jetpack_active = jetpack
|
||||
motion_velocity = lin_velocity
|
||||
|
||||
@rpc(any_peer, call_local, reliable) func set_dead(is_dead: bool):
|
||||
#@rpc(any_peer, call_local, reliable) func set_dead(is_dead: bool):
|
||||
#print("Recieved RPC call for set_dead ", is_dead)
|
||||
|
||||
if not is_dead:
|
||||
spawn()
|
||||
# if not is_dead:
|
||||
# spawn()
|
||||
|
||||
self.dead = is_dead
|
||||
# self.dead = is_dead
|
||||
|
||||
# if is_multiplayer_authority():
|
||||
# print("Rebroadcasting RPC call for set_dead ", dead)
|
||||
|
@ -267,15 +275,6 @@ func _input(event) -> void:
|
|||
weapon.trigger(1, false)
|
||||
|
||||
func _process(delta):
|
||||
if dead:
|
||||
# $Head/Camera.position.y = -1 # lower the head to the ground, let the player see their gibs
|
||||
# $Head/Camera.rotation.x = 0 # reset the tilt so the camera looks forward
|
||||
# $Head/Camera.rotation.z = -20
|
||||
return
|
||||
|
||||
# $Head/Camera.position.y = 0
|
||||
# $Head/Camera.rotation.z = 0
|
||||
|
||||
$Jetpack/GPUParticles3D.emitting = jetpack_active
|
||||
|
||||
if jetpack_active:
|
||||
|
@ -338,10 +337,9 @@ func _process(delta):
|
|||
if is_multiplayer_authority():
|
||||
print("Taken damage: ", damage, " by: ", attacker, " from: ", source_position)
|
||||
hud.damage(damage)
|
||||
main.player_list.players[self.get_multiplayer_authority()].health -= damage # reduce health
|
||||
main.push_local_player_info()
|
||||
health -= damage # reduce health
|
||||
|
||||
if main.player_list.players[self.get_multiplayer_authority()].health <= 0: # are we dead?
|
||||
if health <= 0: # are we dead?
|
||||
print("Died")
|
||||
rpc(&'die', attacker)
|
||||
|
||||
|
@ -354,13 +352,28 @@ func _process(delta):
|
|||
if not dead:
|
||||
rpc(&'moan') # all puppets must scream!
|
||||
|
||||
@rpc(any_peer, call_local, reliable) func spawn():
|
||||
@rpc(any_peer, call_local, reliable) func spawn(spawn_transform: Transform3D):
|
||||
dead = false
|
||||
|
||||
self.global_transform = spawn_transform
|
||||
|
||||
health = max_health
|
||||
$Head/Camera.position.y = 0
|
||||
$Head/Camera.rotation.z = 0
|
||||
jetpack_fuel = jetpack_tank
|
||||
|
||||
self.show()
|
||||
$Body.disabled = false
|
||||
$SpawnSFX.play()
|
||||
$SpawnVFX.emitting = true
|
||||
|
||||
if is_multiplayer_authority(): # don't touch these on puppets
|
||||
hud.pain = 0
|
||||
crosshair.show()
|
||||
|
||||
@rpc(any_peer, call_local, reliable) func die(killer_pid: int):
|
||||
dead = true
|
||||
|
||||
var gibs = gibs_vfx.instantiate()
|
||||
get_tree().root.add_child(gibs)
|
||||
gibs.global_transform = self.global_transform
|
||||
|
@ -374,7 +387,14 @@ func _process(delta):
|
|||
# return
|
||||
#main.rpc(&'destroy_player', self.get_multiplayer_authority())
|
||||
main.destroy_player(self.get_multiplayer_authority())
|
||||
set_dead(true)
|
||||
|
||||
self.hide()
|
||||
$Body.disabled = true
|
||||
|
||||
if is_multiplayer_authority(): # don't touch these on puppets
|
||||
hud.pain = 3
|
||||
crosshair.hide()
|
||||
|
||||
#main.chat.rpc(&'chat_notification', "Player [/i][b][color=" + main.player_list.players[self.get_multiplayer_authority()].color.to_html() + "]" + main.player_list.players[self.get_multiplayer_authority()].name + "[/color][/b][i] was killed by " + main.player_list.players[killer_pid].name )
|
||||
main.chat.chat_notification("Player [/i][b][color=" + main.player_list.players[self.get_multiplayer_authority()].color.to_html() + "]" + main.player_list.players[self.get_multiplayer_authority()].name + "[/color][/b][i] was killed by " + main.player_list.players[killer_pid].name )
|
||||
|
||||
|
|
|
@ -12,6 +12,15 @@ script = ExtResource( "2" )
|
|||
|
||||
[node name="Handgun" parent="." instance=ExtResource( "1" )]
|
||||
|
||||
[node name="Static" parent="Handgun/Handgun_Armature/Skeleton3D" index="0"]
|
||||
layers = 2
|
||||
|
||||
[node name="Hand" parent="Handgun/HandArmature/Skeleton3D2" index="0"]
|
||||
layers = 2
|
||||
|
||||
[node name="AnimationPlayer" parent="Handgun" index="4"]
|
||||
blend_times = []
|
||||
|
||||
[node name="SFX" type="Node3D" parent="."]
|
||||
script = null
|
||||
|
||||
|
@ -48,6 +57,7 @@ unit_db = 4.0
|
|||
unit_size = 16.0
|
||||
max_db = 4.0
|
||||
|
||||
[editable path="Handgun"]
|
||||
[editable path="SFX/Shoot A"]
|
||||
[editable path="SFX/Shoot B"]
|
||||
[editable path="SFX/Shoot C"]
|
||||
|
|
18
Game/Main.gd
18
Game/Main.gd
|
@ -288,8 +288,9 @@ func push_local_player_info(): #
|
|||
# alternative finale to this function that is a workaround to avoid Godot crashing due to an engine bug
|
||||
# https://github.com/godotengine/godot/issues/52853
|
||||
if destroy_free_player_crash_workaround:
|
||||
print("Setting player ", pid, " as DEAD")
|
||||
player_node.set_dead(true)
|
||||
pass
|
||||
#print("Setting player ", pid, " as DEAD")
|
||||
#player_node.set_dead(true)
|
||||
else: # regular method follows
|
||||
player_node.name = str(player_node.name) + "_dead" # avoids name collision when instancing another player scene
|
||||
|
||||
|
@ -308,14 +309,15 @@ func create_player(pid: int, is_local:= false, respawn:= false) -> void:
|
|||
if $Players.has_node(str(pid)): # if this is a respawn
|
||||
player_node = $Players.get_node(str(pid))
|
||||
#print("Setting player ", pid, " as ALIVE")
|
||||
player_node.set_dead(false)
|
||||
|
||||
#player_node.set_dead(false)
|
||||
var spawnpoint = $Map/SpawnPoints.get_children()[randi() % len($Map/SpawnPoints.get_children())]
|
||||
player_node.global_transform = spawnpoint.global_transform
|
||||
player_list.players[pid].health = 100
|
||||
player_node.spawn(spawnpoint.global_transform)
|
||||
|
||||
if local_player:
|
||||
push_local_player_info()
|
||||
# player_node.global_transform = spawnpoint.global_transform
|
||||
# player_list.players[pid].health = 100
|
||||
|
||||
# if local_player:
|
||||
# push_local_player_info()
|
||||
|
||||
#focus = GameFocus.GAME # make sure the player has no menu displayed when they respawn
|
||||
return # avoid running the rest of this function
|
||||
|
|
Reference in New Issue