Got rid of get/set on Player's dead var. Fixed regrets on kill.

remotes/1705223993883213877/tmp_refs/heads/damage
unfa 2021-10-23 23:54:02 +02:00
parent f3fd5de171
commit 321e2fcbcc
3 changed files with 81 additions and 49 deletions

View File

@ -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 )

View File

@ -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"]

View File

@ -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