hide hud on pause and dead camera

This commit is contained in:
derek
2024-10-31 15:20:49 -05:00
parent 1b55bb993d
commit ec63e57c62
8 changed files with 104 additions and 55 deletions

View File

@@ -645,21 +645,6 @@ size = Vector3(11.605, 4.25, 0.61)
[sub_resource type="BoxShape3D" id="BoxShape3D_uer68"]
size = Vector3(9.26855, 4.28711, 0.640869)
[sub_resource type="Animation" id="Animation_d2bci"]
resource_name = "open"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0, 28.5934, 14.0814), Vector3(0, 32.6882, 14.0814)]
}
[sub_resource type="Animation" id="Animation_0aerp"]
length = 0.001
tracks/0/type = "value"
@@ -690,6 +675,21 @@ tracks/0/keys = {
"values": [Vector3(0, 32.6882, 14.0814), Vector3(0, 28.5934, 14.0814)]
}
[sub_resource type="Animation" id="Animation_d2bci"]
resource_name = "open"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0, 28.5934, 14.0814), Vector3(0, 32.6882, 14.0814)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_m24x1"]
_data = {
"RESET": SubResource("Animation_0aerp"),
@@ -1745,4 +1745,7 @@ libraries = {
}
autoplay = "movingswitch"
[node name="rocketlauncher1_pickup2" parent="." instance=ExtResource("11_6de2k")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 29.7453, -2.8486, 37.7796)
[connection signal="switch_hit" from="Switch 1/switch/StaticBody3D" to="Switch 1/switch" method="_on_static_body_3d_switch_hit"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=25 format=3 uid="uid://drwae3loscbw7"]
[gd_scene load_steps=27 format=3 uid="uid://drwae3loscbw7"]
[ext_resource type="Script" path="res://scripts/player.gd" id="1_x7wms"]
[ext_resource type="PackedScene" uid="uid://dcmno6wafk5hg" path="res://assets/dead_player.tscn" id="2_4hoys"]
@@ -17,6 +17,7 @@
[ext_resource type="AudioStream" uid="uid://cwre1dq8gsvbg" path="res://assets/Audio/Foley Sports/Boxing/Gloves Block Intense.wav" id="12_qhd01"]
[ext_resource type="PackedScene" uid="uid://cfbwx2fsdp0b3" path="res://pause_menu.tscn" id="13_xrfwr"]
[ext_resource type="AudioStream" uid="uid://t50i483xmj3a" path="res://assets/Audio/Weapons/toy-click-spin-SBA-300071143.wav" id="14_pnsbm"]
[ext_resource type="Shader" path="res://assets/crtTest.gdshader" id="14_v5svg"]
[ext_resource type="AudioStream" uid="uid://c1e6vr2hndho7" path="res://assets/Audio/Weapons/Misc (Ammo Boxes, Holsters, Etc)/Kydex Unholster 002.wav" id="17_1fyjm"]
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_l5ga0"]
@@ -34,6 +35,30 @@ font_size = 115
shadow_size = 16
shadow_color = Color(0, 0, 0, 1)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ubnx7"]
shader = ExtResource("14_v5svg")
shader_parameter/overlay = true
shader_parameter/scanlines_opacity = 0.025
shader_parameter/scanlines_width = 0.315
shader_parameter/grille_opacity = 0.1
shader_parameter/resolution = Vector2(640, 480)
shader_parameter/pixelate = false
shader_parameter/roll = false
shader_parameter/roll_speed = 1.165
shader_parameter/roll_size = 38.883
shader_parameter/roll_variation = 1.8
shader_parameter/distort_intensity = 0.0
shader_parameter/noise_opacity = 0.0
shader_parameter/noise_speed = 5.0
shader_parameter/static_noise_intensity = 0.035
shader_parameter/aberration = 0.00500005
shader_parameter/brightness = 1.4
shader_parameter/discolor = true
shader_parameter/warp_amount = 0.0
shader_parameter/clip_warp = true
shader_parameter/vignette_intensity = 0.4
shader_parameter/vignette_opacity = 0.235
[sub_resource type="BoxShape3D" id="BoxShape3D_nfpjw"]
size = Vector3(3, 3.58057, 3)
@@ -95,7 +120,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.437954, -1)
stream = ExtResource("14_pnsbm")
volume_db = 2.0
[node name="AmmoCounter" type="Label" parent="Head/Recoil/Camera3D"]
[node name="AmmoCounter" type="Label" parent="Head/Recoil/Camera3D" groups=["hud"]]
offset_right = 3840.0
offset_bottom = 2160.0
size_flags_horizontal = 3
@@ -107,7 +132,7 @@ vertical_alignment = 2
script = ExtResource("4_8cy44")
padding_amount = 0.025
[node name="StaminaCounter" type="Label" parent="Head/Recoil/Camera3D"]
[node name="StaminaCounter" type="Label" parent="Head/Recoil/Camera3D" groups=["hud"]]
offset_right = 3440.0
offset_bottom = 1440.0
size_flags_horizontal = 3
@@ -126,7 +151,7 @@ hit_back_faces = false
[node name="AudioListener3D" type="AudioListener3D" parent="Head/Recoil/Camera3D"]
transform = Transform3D(1, 0, 0, 0, 0.992332, 0.123601, 0, -0.123601, 0.992332, 0, -0.921646, -0.000722691)
[node name="Crosshair" type="TextureRect" parent="Head/Recoil/Camera3D"]
[node name="Crosshair" type="TextureRect" parent="Head/Recoil/Camera3D" groups=["hud"]]
offset_right = 40.0
offset_bottom = 40.0
texture = ExtResource("6_5m60e")
@@ -162,6 +187,12 @@ visible = false
offset_right = 0.0
offset_bottom = 0.0
[node name="crtFilter" type="ColorRect" parent="Head/Recoil/Camera3D"]
visible = false
material = SubResource("ShaderMaterial_ubnx7")
offset_right = 3840.0
offset_bottom = 2160.0
[node name="pick_up_detection" type="Area3D" parent="."]
collision_layer = 0
collision_mask = 16

View File

@@ -2,14 +2,14 @@
Shader from Godot Shaders - the free shader library.
godotshaders.com/shader/VHS-and-CRT-monitor-effect
This shader is under CC0 license. Feel free to use, improve and
change this shader according to your needs and consider sharing
This shader is under CC0 license. Feel free to use, improve and
change this shader according to your needs and consider sharing
the modified result to godotshaders.com.
*/
shader_type canvas_item;
//*** IMPORTANT! ***/
//*** IMPORTANT! ***/
// - If you are using this shader to affect the node it is applied to set 'overlay' to false (unchecked in the instepctor).
// - If you are using this shader as an overlay, and want the shader to affect the nodes below in the Scene hierarchy,
// set 'overlay' to true (checked in the inspector).
@@ -72,7 +72,7 @@ vec2 warp(vec2 uv){
float delta2 = dot(delta.xy, delta.xy);
float delta4 = delta2 * delta2;
float delta_offset = delta4 * warp_amount;
return uv + delta * delta_offset;
}
@@ -99,14 +99,14 @@ void fragment()
vec2 text_uv = uv;
vec2 roll_uv = vec2(0.0);
float time = roll ? TIME : 0.0;
// Pixelate the texture based on the given resolution.
if (pixelate)
{
text_uv = ceil(uv * resolution) / resolution;
}
// Create the rolling effect. We need roll_line a bit later to make the noise effect.
// That is why this runs if roll is true OR noise_opacity is over 0.
float roll_line = 0.0;
@@ -119,11 +119,11 @@ void fragment()
// Distort the UV where where the lines are
roll_uv = vec2(( roll_line * distort_intensity * (1.-UV.x)), 0.0);
}
vec4 text;
if (roll)
{
// If roll is true distort the texture with roll_uv. The texture is split up into RGB to
// If roll is true distort the texture with roll_uv. The texture is split up into RGB to
// make some chromatic aberration. We apply the aberration to the red and green channels accorging to the aberration parameter
// and intensify it a bit in the roll distortion.
text.r = texture(SCREEN_TEXTURE, text_uv + roll_uv * 0.8 + vec2(aberration, 0.0) * .1).r;
@@ -133,43 +133,43 @@ void fragment()
}
else
{
// If roll is false only apply the aberration without any distorion. The aberration values are very small so the .1 is only
// If roll is false only apply the aberration without any distorion. The aberration values are very small so the .1 is only
// to make the slider in the Inspector less sensitive.
text.r = texture(SCREEN_TEXTURE, text_uv + vec2(aberration, 0.0) * .1).r;
text.g = texture(SCREEN_TEXTURE, text_uv - vec2(aberration, 0.0) * .1).g;
text.b = texture(SCREEN_TEXTURE, text_uv).b;
text.a = 1.0;
}
float r = text.r;
float g = text.g;
float b = text.b;
uv = warp(UV);
// CRT monitors don't have pixels but groups of red, green and blue dots or lines, called grille. We isolate the texture's color channels
// CRT monitors don't have pixels but groups of red, green and blue dots or lines, called grille. We isolate the texture's color channels
// and divide it up in 3 offsetted lines to show the red, green and blue colors next to each other, with a small black gap between.
if (grille_opacity > 0.0){
float g_r = smoothstep(0.85, 0.95, abs(sin(uv.x * (resolution.x * 3.14159265))));
r = mix(r, r * g_r, grille_opacity);
float g_g = smoothstep(0.85, 0.95, abs(sin(1.05 + uv.x * (resolution.x * 3.14159265))));
g = mix(g, g * g_g, grille_opacity);
float b_b = smoothstep(0.85, 0.95, abs(sin(2.1 + uv.x * (resolution.x * 3.14159265))));
b = mix(b, b * b_b, grille_opacity);
}
// Apply the grille to the texture's color channels and apply Brightness. Since the grille and the scanlines (below) make the image very dark you
// can compensate by increasing the brightness.
text.r = clamp(r * brightness, 0.0, 1.0);
text.g = clamp(g * brightness, 0.0, 1.0);
text.b = clamp(b * brightness, 0.0, 1.0);
// Scanlines are the horizontal lines that make up the image on a CRT monitor.
// Here we are actual setting the black gap between each line, which I guess is not the right definition of the word, but you get the idea
// Scanlines are the horizontal lines that make up the image on a CRT monitor.
// Here we are actual setting the black gap between each line, which I guess is not the right definition of the word, but you get the idea
float scanlines = 0.5;
if (scanlines_opacity > 0.0)
{
@@ -177,29 +177,29 @@ void fragment()
scanlines = smoothstep(scanlines_width, scanlines_width + 0.5, abs(sin(uv.y * (resolution.y * 3.14159265))));
text.rgb = mix(text.rgb, text.rgb * vec3(scanlines), scanlines_opacity);
}
// Apply the banded noise.
if (noise_opacity > 0.0)
{
// Generate a noise pattern that is very stretched horizontally, and animate it with noise_speed
float noise = smoothstep(0.4, 0.5, noise(uv * vec2(2.0, 200.0) + vec2(10.0, (TIME * (noise_speed))) ) );
// We use roll_line (set above) to define how big the noise should be vertically (multiplying cuts off all black parts).
// We also add in some basic noise with random() to break up the noise pattern above. The noise is sized according to
// the resolution value set in the inspector. If you don't like this look you can
// We also add in some basic noise with random() to break up the noise pattern above. The noise is sized according to
// the resolution value set in the inspector. If you don't like this look you can
// change "ceil(uv * resolution) / resolution" to only "uv" to make it less pixelated. Or multiply resolution with som value
// greater than 1.0 to make them smaller.
roll_line *= noise * scanlines * clamp(random((ceil(uv * resolution) / resolution) + vec2(TIME * 0.8, 0.0)).x + 0.8, 0.0, 1.0);
// Add it to the texture based on noise_opacity
text.rgb = clamp(mix(text.rgb, text.rgb + roll_line, noise_opacity), vec3(0.0), vec3(1.0));
}
// Apply static noise by generating it over the whole screen in the same way as above
if (static_noise_intensity > 0.0)
{
text.rgb += clamp(random((ceil(uv * resolution) / resolution) + fract(TIME)).x, 0.0, 1.0) * static_noise_intensity;
}
// Apply a black border to hide imperfections caused by the warping.
// Also apply the vignette
text.rgb *= border(uv);
@@ -209,7 +209,7 @@ void fragment()
{
text.a = border(uv);
}
// Apply discoloration to get a VHS look (lower saturation and higher contrast)
// You can play with the values below or expose them in the Inspector.
float saturation = 0.5;
@@ -219,11 +219,11 @@ void fragment()
// Saturation
vec3 greyscale = vec3(text.r + text.g + text.b) / 3.;
text.rgb = mix(text.rgb, greyscale, saturation);
// Contrast
float midpoint = pow(0.5, 2.2);
text.rgb = (text.rgb - vec3(midpoint)) * contrast + midpoint;
}
COLOR = text;
}

View File

@@ -45,7 +45,7 @@ shader_parameter/noise_opacity = 0.4
shader_parameter/noise_speed = 5.0
shader_parameter/static_noise_intensity = 0.06
shader_parameter/aberration = 0.03
shader_parameter/brightness = 1.4
shader_parameter/brightness = 0.7
shader_parameter/discolor = true
shader_parameter/warp_amount = 0.0
shader_parameter/clip_warp = true

View File

@@ -41,6 +41,7 @@ scene_rigidbody=""
weight=""
switch_override=""
magnet=""
hud=""
[input]

View File

@@ -37,6 +37,7 @@ var last_hit : Node
var respawn_position
var respawn_cam_rotation
var respawn_rot
var engine_time_scale_cache : float = 1.0
# Called when the node enters the scene tree for the first time.
func _ready():
@@ -144,6 +145,8 @@ func die():
get_tree().get_root().add_child(instance_dead)
instance_dead.camera.current = true
player.dead = true
player.crt_filter.visible = true
player.toggle_hud()
player.gun.visible = false
player.crosshair.visible = false
@@ -157,14 +160,15 @@ func pickup_spawn():
func pause_menu():
if paused:
Engine.time_scale = 1
Engine.time_scale = engine_time_scale_cache
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
player.crosshair.visible = true
player.toggle_hud()
player.pause_menu.hide()
else:
engine_time_scale_cache = Engine.time_scale
Engine.time_scale = 0
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
player.crosshair.visible = false
player.toggle_hud()
player.pause_menu.show()
paused = !paused

View File

@@ -73,6 +73,7 @@ var gun_fire_pitch_starting
var current_weapon_index
var recoiling = false
var dead = false
var hud_visible : bool = true
# Slow Down Variables
var remaining_stamina = MAX_STAMINA
@@ -103,6 +104,7 @@ var pickupmsg
@onready var flashlight_audio: AudioStreamPlayer3D = $Head/Recoil/Camera3D/WeaponHolder/FlashlightButton
@onready var kick_audio: AudioStreamPlayer3D = $Head/Recoil/Camera3D/Audio/Kick
@onready var weapon_pickup_audio: AudioStreamPlayer = $Audio/WeaponPickup
@onready var crt_filter: ColorRect = $Head/Recoil/Camera3D/crtFilter
func _ready():
@@ -134,8 +136,8 @@ func _input(event) -> void:
mouse_input = event.relative
else:
if event is InputEventMouseMotion:
self.rotate_y(-event.relative.x * .00001)
head.rotate_x(-event.relative.y * .00001)
self.rotate_y(event.relative.x * .00001)
head.rotate_x(event.relative.y * .00001)
head.rotation.x = clamp(head.rotation.x, deg_to_rad(-90), deg_to_rad(85))
mouse_input = event.relative
@@ -398,3 +400,10 @@ func enemy_hit():
hitmarker.visible = true
await get_tree().create_timer(.1).timeout
hitmarker.visible = false
func toggle_hud():
crosshair.visible = !hud_visible
ammo_counter.visible = !hud_visible
stamina_counter.visible = !hud_visible
hud_visible = !hud_visible

View File

@@ -55,6 +55,7 @@ func explode():
body.linear_velocity += blast_velocity
if body.is_in_group("player"):
body.velocity += clamp(blast_velocity,Vector3(-7,-7,-7),Vector3(7,7,7))
body.recoil.add_recoil(Vector3(1,.1,.1),10,10)
if body.is_in_group("enemy"):
body.knocked = true
body.stunned = true