diff --git a/Game/Assets/Characters/Player.gd b/Game/Assets/Characters/Player.gd index 164b3c3..b2498ca 100644 --- a/Game/Assets/Characters/Player.gd +++ b/Game/Assets/Characters/Player.gd @@ -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 diff --git a/Game/Assets/Characters/Player.tscn b/Game/Assets/Characters/Player.tscn index a2e7667..3d17bbf 100644 --- a/Game/Assets/Characters/Player.tscn +++ b/Game/Assets/Characters/Player.tscn @@ -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 diff --git a/Game/Assets/Effects/Gibs.gd b/Game/Assets/Effects/Gibs.gd index 7d6119f..aef82a6 100644 --- a/Game/Assets/Effects/Gibs.gd +++ b/Game/Assets/Effects/Gibs.gd @@ -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 diff --git a/Game/Assets/Effects/Gibs.tscn b/Game/Assets/Effects/Gibs.tscn index c03b258..bfce8d9 100644 --- a/Game/Assets/Effects/Gibs.tscn +++ b/Game/Assets/Effects/Gibs.tscn @@ -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 diff --git a/Game/Assets/HUD/HUD.gd b/Game/Assets/HUD/HUD.gd index fb3e913..f012dad 100644 --- a/Game/Assets/HUD/HUD.gd +++ b/Game/Assets/HUD/HUD.gd @@ -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 = ''