Made some HUD elements visible even in menu. Made player head fall to the ground on death. Tweaked Gibs. Implemented gun bob. Fixed Player Body not casting shadows.

remotes/1705223993883213877/tmp_refs/heads/damage
unfa 2021-10-16 02:07:19 +02:00
parent 953c859098
commit 1b2375b3d4
5 changed files with 77 additions and 10 deletions

View File

@ -14,11 +14,11 @@ extends CharacterBody3D
@onready var head = $Head
@onready var camera = $Head/Camera
@onready var tween = $Head/Camera/Tween
#@onready var tween = $Head/Camera/Tween
@onready var ground_check = $GroundCheck
@onready var climb_tween = $ClimbTween # undergoing redesign in Godot 4
@onready var climb_check = $ClimbCheck
#@onready var climb_tween = $ClimbTween # undergoing redesign in Godot 4
#@onready var climb_check = $ClimbCheck
@onready var body = $Body
@onready var mesh = $Mesh
@ -94,6 +94,10 @@ var jetpack_was_active = false
var velocity := Vector3.ZERO
var gravity_vec := Vector3.ZERO
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:
@ -101,8 +105,9 @@ var dead = false: # used to workaround Godot crash when destroying player_nodes
#input_active = false
self.hide()
$Body.disabled = true
hud.pain = 4
hud.pain = 3
crosshair.hide()
#$Head/Camera.transform.origin.y
#set_physics_process(false)
false:
#input_active = true
@ -112,8 +117,10 @@ var dead = false: # used to workaround Godot crash when destroying player_nodes
$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
@ -143,6 +150,10 @@ func view_banner(show: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()
self.dead = is_dead
# if is_multiplayer_authority():
@ -257,8 +268,14 @@ func _input(event) -> void:
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:
@ -337,7 +354,11 @@ func _process(delta):
if not dead:
rpc(&'moan') # all puppets must scream!
@rpc(any_peer, call_local, reliable) func spawn():
$Head/Camera.position.y = 0
$Head/Camera.rotation.z = 0
jetpack_fuel = jetpack_tank
@rpc(any_peer, call_local, reliable) func die(killer_pid: int):
var gibs = gibs_vfx.instantiate()
get_tree().root.add_child(gibs)
@ -358,6 +379,14 @@ func _process(delta):
revenge_pid = killer_pid
$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
jetpack_active = false
view_zoom_target = .0
view_zoom = 0
#queue_free()
func update_player(info) -> void:
@ -422,6 +451,25 @@ func _physics_process(delta):
if direction.length() > 0: # normalized() will return a null
direction = direction.normalized()
# weapon bob
if direction.length() > 0:
if is_on_floor():
$Head/Camera/Hand/Weapon.transform.origin.y = lerp($Head/Camera/Hand/Weapon.transform.origin.y, sin(main.uptime * 10) / 15, 4 * delta)
else:
$Head/Camera/Hand/Weapon.transform.origin.y *= 1 - delta * 8
$Head/Camera/Hand/Weapon.transform.origin.y += sin(main.uptime * 2) / 1000 * delta
$Head/Camera/Hand/Weapon.transform.origin.y -= motion_velocity.y * delta / 60
if Input.is_action_just_pressed("move_jump") and is_on_floor():
var tween = create_tween()
$Head/Camera/Hand/Weapon.transform.origin.y -= 0.025
#$Head/Camera/Hand/Weapon.transform.origin.y -= 0.05
if is_on_floor() and not previously_on_floor:
$Head/Camera/Hand/Weapon.transform.origin.y -= 1
# if
# $Head/Camera/Hand/Weapon.transform.origin.y -= 0.25
speed = speed_type[medium]
accel = accel_type[medium]
@ -435,6 +483,10 @@ func _physics_process(delta):
velocity.z = motion_velocity.z
gravity_vec.y = motion_velocity.y
previously_on_floor = is_on_floor()
lagging_movement_velocity.lerp(motion_velocity, delta)
rpc(&'update_movement', global_transform, head.get_rotation(), motion_velocity, jetpack_active)
# (stair) climbing

View File

@ -221,7 +221,6 @@ script = ExtResource( "1" )
[node name="Mesh" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.852763, 0)
layers = 2
cast_shadow = 0
mesh = SubResource( "1" )
surface_material_override/0 = null
script = null
@ -231,7 +230,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.45276, 0)
script = null
[node name="Camera" type="Camera3D" parent="Head"]
transform = Transform3D(1, 0, 2.38419e-07, 0, 1, 0, -2.38419e-07, 0, 1, 0, 0, 0)
fov = 90.0
script = null

View File

@ -10,7 +10,6 @@ extends Node3D
func _ready():
$Gibs.emitting = true
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
# pass

View File

@ -18,6 +18,14 @@ emission_sphere_radius = 0.5
spread = 180.0
initial_velocity_min = 1.0
initial_velocity_max = 8.0
angular_velocity_min = -15.0
angular_velocity_max = 15.0
damping_min = 0.1
damping_max = 0.2
angle_min = -180.0
angle_max = 180.0
scale_min = 0.5
scale_max = 3.0
color_ramp = SubResource( "GradientTexture_07eoi" )
sub_emitter_mode = 1
sub_emitter_frequency = 100.0
@ -25,6 +33,7 @@ sub_emitter_keep_velocity = true
collision_enabled = true
collision_friction = 0.31
collision_bounce = 0.58
collision_use_scale = true
[sub_resource type="OpenSimplexNoise" id="OpenSimplexNoise_tchuy"]
octaves = 2
@ -82,13 +91,14 @@ script = ExtResource( "1_o0guu" )
[node name="Gibs" type="GPUParticles3D" parent="."]
layers = 4
emitting = false
amount = 128
amount = 32
sub_emitter = NodePath("../Blood")
lifetime = 5.0
one_shot = true
explosiveness = 1.0
fixed_fps = 0
collision_base_size = 0.1
visibility_aabb = AABB(-4, -3.55666, -4, 8, 4.42876, 8)
process_material = SubResource( "ParticlesMaterial_jcugi" )
draw_pass_1 = SubResource( "SphereMesh_ctp33" )
script = null

View File

@ -22,7 +22,15 @@ func game_over(winner):
func damage(hp):
print("HUD damage ", hp)
pain += hp/20
func hide():
$Crosshair.hide()
$Chat.hide()
func show():
$Crosshair.show()
$Chat.show()
func update_scoretab():
$ScoreTable/VBoxContainer/ScoreTab.text = ''