Death animation

This commit is contained in:
2025-11-30 21:37:31 -08:00
parent c491ea5050
commit 8f8cc217dc
11 changed files with 338 additions and 146 deletions

View File

@@ -0,0 +1,54 @@
shader_type spatial;
render_mode unshaded, fog_disabled;
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap;
uniform vec3 colorCount = vec3(32); //Max HSV Count
uniform vec3 colorShift = vec3(1.0); //Shift HSV colors
uniform bool doShiftFirst = false; // do shifting colors first or flooring colors
uniform bool includeAlpha = true; // Include alpha objects. if certain objects that have alpha aren`t rendering disabling might help
vec3 hsv_to_rgb(vec3 color) {
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
vec3 p = abs(fract(color.xxx + K.xyz) * 6.0 - K.www);
return color.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), color.y);
}
vec3 rgb_to_hsv(vec3 color) {
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
vec4 p = mix(vec4(color.bg, K.wz), vec4(color.gb, K.xy), step(color.b, color.g));
vec4 q = mix(vec4(p.xyw, color.r), vec4(color.r, p.yzx), step(p.x, color.r));
float d = q.x - min(q.w, q.y);
float e = 1.0e-10;
return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
}
void vertex()
{
POSITION = vec4(VERTEX.xy, 1.0, 1.0);
}
void fragment() {
vec4 tex = texture(SCREEN_TEXTURE, vec2(UV.x, -UV.y));
vec3 hvs = rgb_to_hsv(tex.xyz);
if (doShiftFirst){
hvs.xyz = (hvs * colorShift);
}
hvs.x = floor(hvs.x * colorCount.x) / colorCount.x;
hvs.y = floor(hvs.y * colorCount.y) / colorCount.y;
hvs.z = floor(hvs.z * colorCount.z) / colorCount.z;
if (!doShiftFirst){
hvs.xyz = (hvs * colorShift);
}
ALBEDO = hsv_to_rgb(hvs.xyz);
if (!includeAlpha){
ALPHA = tex.w;
}
}

View File

@@ -0,0 +1 @@
uid://dfk3eps71yyyl

View File

@@ -74,6 +74,8 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
#region Node Dependencies
[Node] private IAnimationPlayer AnimationPlayer { get; set; } = default!;
[Node] private IAnimationPlayer PlayerFXAnimations { get; set; } = default!;
[Node] private Area3D Hitbox { get; set; } = default!;
[Node] private Area3D CollisionDetector { get; set; } = default!;
@@ -83,6 +85,8 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
[Node] private RigidBody3D WallCheck { get; set; } = default!;
[Node] private AudioStreamPlayer3D WalkSFX { get; set; } = default!;
[Node] private CollisionShape3D MainCollision { get; set; } = default!;
#endregion
@@ -164,6 +168,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
public void Activate()
{
MainCollision.Disabled = false;
SetProcessInput(true);
SetPhysicsProcess(true);
SetHealthTimerStatus(HealthTimerIsActive);
@@ -171,6 +176,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
public void Deactivate()
{
MainCollision.Disabled = true;
SetProcessInput(false);
SetPhysicsProcess(false);
SetHealthTimerStatus(false);
@@ -213,6 +219,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
public void Die()
{
PlayerFXAnimations.Play("death");
HealthTimer.WaitTime = _healthTimerWaitTime;
HealthTimer.Timeout -= OnHealthTimerTimeout;
SetProcessInput(false);

View File

@@ -1,8 +1,9 @@
[gd_scene load_steps=55 format=3 uid="uid://cfecvvav8kkp6"]
[gd_scene load_steps=59 format=3 uid="uid://cfecvvav8kkp6"]
[ext_resource type="Script" uid="uid://yxmiqy7i0t7r" path="res://src/player/Player.cs" id="1_xcol5"]
[ext_resource type="AudioStream" uid="uid://cth2xgoqhdf0m" path="res://src/audio/sfx/player_hit_wall.ogg" id="3_565yv"]
[ext_resource type="Texture2D" uid="uid://c4ps26w7h3vpq" path="res://src/minimap/textures/player_map_icon.png" id="4_3ojaj"]
[ext_resource type="Shader" uid="uid://dfk3eps71yyyl" path="res://src/player/InvertColors.gdshader" id="4_v5qoq"]
[ext_resource type="Texture2D" uid="uid://2ig1arptr1e8" path="res://src/vfx/Items Etc/slash_2.png" id="4_v7rlw"]
[ext_resource type="Texture2D" uid="uid://qhxl3nejqlk1" path="res://src/vfx/World/DUST_1.png" id="5_v5qoq"]
[ext_resource type="AudioStream" uid="uid://bsprdc3ka6am0" path="res://src/audio/sfx/player_steps_concrete.ogg" id="6_v7rlw"]
@@ -11,6 +12,13 @@
radius = 1.0
height = 3.07596
[sub_resource type="ShaderMaterial" id="ShaderMaterial_jtmj1"]
[sub_resource type="QuadMesh" id="QuadMesh_v7rlw"]
material = SubResource("ShaderMaterial_jtmj1")
flip_faces = true
size = Vector2(2, 2)
[sub_resource type="Animation" id="Animation_3ojaj"]
resource_name = "IconAnimation"
length = 2.5
@@ -154,6 +162,66 @@ tracks/1/keys = {
"update": 1,
"values": [0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../Camera/Camera3D:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0.003, 1.2, -0.01)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../Camera/Camera3D/MeshInstance3D:mesh:material:shader")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [null]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../Camera/Camera3D/MeshInstance3D:mesh:material:shader_parameter/colorCount")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(32, 32, 32)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../Camera/Camera3D/MeshInstance3D:mesh:material:shader_parameter/includeAlpha")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../Camera/Camera3D/MeshInstance3D:mesh:material:shader_parameter/colorShift")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_ebyyx"]
resource_name = "hit_wall"
@@ -213,9 +281,74 @@ tracks/1/keys = {
"values": [0, 30]
}
[sub_resource type="Animation" id="Animation_es4xk"]
resource_name = "death"
length = 2.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../Camera/Camera3D:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0.003, 1.2, -0.01), Vector3(0.003, 0, -1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../Camera/Camera3D/MeshInstance3D:mesh:material:shader")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(3.35872e-05),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("4_v5qoq")]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../Camera/Camera3D/MeshInstance3D:mesh:material:shader_parameter/colorCount")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(-0.266666, 0, 0.0333338),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(640.06, 1, 640), Vector3(640, 640, 640), Vector3(640.06, 1, 640)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../Camera/Camera3D/MeshInstance3D:mesh:material:shader_parameter/includeAlpha")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../Camera/Camera3D/MeshInstance3D:mesh:material:shader_parameter/colorShift")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 2.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(1, 1, 1), Vector3(1, 1, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ebyyx"]
_data = {
&"RESET": SubResource("Animation_jtmj1"),
&"death": SubResource("Animation_es4xk"),
&"hit_wall": SubResource("Animation_ebyyx"),
&"normal_attack": SubResource("Animation_v5qoq")
}
@@ -492,7 +625,8 @@ collision_layer = 802
collision_mask = 775
script = ExtResource("1_xcol5")
[node name="PlayerGeometryCollision" type="CollisionShape3D" parent="."]
[node name="MainCollision" type="CollisionShape3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(-0.0242399, 0.00507889, 0.999693, 0.000123113, 0.999987, -0.00507739, -0.999706, 0, -0.0242402, 0, 1.06447, 0.00162865)
shape = SubResource("CapsuleShape3D_dw45s")
@@ -511,6 +645,10 @@ fov = 52.0
near = 0.01
far = 9000.0
[node name="MeshInstance3D" type="MeshInstance3D" parent="Camera/Camera3D"]
extra_cull_margin = 16384.0
mesh = SubResource("QuadMesh_v7rlw")
[node name="player_model" type="Node3D" parent="Camera"]
transform = Transform3D(-0.015, 0, -2.26494e-09, 0, 0.015, 0, 2.26494e-09, 0, -0.015, 0, -0.268445, -0.00941753)