Added corruption shader

This commit is contained in:
2026-06-29 18:00:52 +03:00
parent fd76d2e0c2
commit 05b31471aa
7 changed files with 64 additions and 5 deletions
+1
View File
@@ -34,6 +34,7 @@ var _last_wall_normal: = 0.0
@onready var attack_left_sprite : AnimatedSprite2D = $AttackLeftSprite @onready var attack_left_sprite : AnimatedSprite2D = $AttackLeftSprite
@onready var attack_right_sprite : AnimatedSprite2D = $AttackRightSprite @onready var attack_right_sprite : AnimatedSprite2D = $AttackRightSprite
@onready var camera : Camera2D = $Camera2D
@onready var state_machine : StateMachine = $StateMachine @onready var state_machine : StateMachine = $StateMachine
@onready var jump_buffer_timer : Timer = $JumpBufferTimer @onready var jump_buffer_timer : Timer = $JumpBufferTimer
+3
View File
@@ -569,6 +569,9 @@ sprite_frames = SubResource("SpriteFrames_i4f54")
animation = &"attack" animation = &"attack"
[node name="Camera2D" type="Camera2D" parent="." unique_id=1654451713] [node name="Camera2D" type="Camera2D" parent="." unique_id=1654451713]
limit_bottom = 0
drag_horizontal_enabled = true
drag_vertical_enabled = true
[node name="StateMachine" parent="." unique_id=560273456 node_paths=PackedStringArray("initial_state") instance=ExtResource("2_x4rrl")] [node name="StateMachine" parent="." unique_id=560273456 node_paths=PackedStringArray("initial_state") instance=ExtResource("2_x4rrl")]
initial_state = NodePath("IdleState") initial_state = NodePath("IdleState")
+18 -1
View File
@@ -2,17 +2,34 @@ class_name AbstractLevel
extends Node2D extends Node2D
@export var initial_corruption_x := 0.0
@export var corruption_speed := 0.0
var _corruption_x: float
@onready var player : Player = $Player @onready var player : Player = $Player
@onready var pause_menu : PauseMenu = $%PauseMenu @onready var pause_menu : PauseMenu = $%PauseMenu
@onready var level_material : ShaderMaterial = $%LevelColorRect.material
func _ready() -> void: func _ready() -> void:
$Menus.show() _corruption_x = initial_corruption_x
pause_menu.hide() pause_menu.hide()
#TODO Add gameplay music #TODO Add gameplay music
func _process(delta: float) -> void:
_corruption_x += corruption_speed * delta
var screen_to_world := player.camera.get_canvas_transform().affine_inverse()
level_material.set_shader_parameter("screen_to_world", screen_to_world)
level_material.set_shader_parameter("corruption_x", _corruption_x)
func _input(event: InputEvent) -> void: func _input(event: InputEvent) -> void:
if event.is_action_pressed("pause"): if event.is_action_pressed("pause"):
SoundManager.play_ui_stream(SoundManager.ui_stream_accept) SoundManager.play_ui_stream(SoundManager.ui_stream_accept)
+15 -2
View File
@@ -3,6 +3,7 @@
[ext_resource type="Script" uid="uid://wm4pbk5w5ats" path="res://game/levels/abstract_level.gd" id="1_o2mui"] [ext_resource type="Script" uid="uid://wm4pbk5w5ats" path="res://game/levels/abstract_level.gd" id="1_o2mui"]
[ext_resource type="PackedScene" uid="uid://ts4dy8xmtot8" path="res://game/entities/player/player.tscn" id="2_r0ht6"] [ext_resource type="PackedScene" uid="uid://ts4dy8xmtot8" path="res://game/entities/player/player.tscn" id="2_r0ht6"]
[ext_resource type="PackedScene" uid="uid://0e3xvmn36j5b" path="res://game/menu/pause_menu.tscn" id="3_fnnmn"] [ext_resource type="PackedScene" uid="uid://0e3xvmn36j5b" path="res://game/menu/pause_menu.tscn" id="3_fnnmn"]
[ext_resource type="Shader" uid="uid://brudtlwas6x66" path="res://game/shaders/glitch.gdshader" id="4_6b8cu"]
[ext_resource type="Texture2D" uid="uid://b8rm1kxgci4l1" path="res://images/level/beams.png" id="4_pi5fd"] [ext_resource type="Texture2D" uid="uid://b8rm1kxgci4l1" path="res://images/level/beams.png" id="4_pi5fd"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_6b8cu"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_6b8cu"]
@@ -1169,6 +1170,12 @@ terrain_set_0/terrain_0/name = "Beams"
terrain_set_0/terrain_0/color = Color(0.64282656, 0, 0.1545574, 1) terrain_set_0/terrain_0/color = Color(0.64282656, 0, 0.1545574, 1)
sources/0 = SubResource("TileSetAtlasSource_6b8cu") sources/0 = SubResource("TileSetAtlasSource_6b8cu")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_yeikn"]
shader = ExtResource("4_6b8cu")
shader_parameter/corruption_x = 0.0
shader_parameter/edge_width = 50.0
shader_parameter/screen_to_world = Projection(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
[node name="AbstractLevel" type="Node2D" unique_id=1001045799] [node name="AbstractLevel" type="Node2D" unique_id=1001045799]
script = ExtResource("1_o2mui") script = ExtResource("1_o2mui")
@@ -1177,8 +1184,14 @@ script = ExtResource("1_o2mui")
[node name="TileMapLayer" type="TileMapLayer" parent="." unique_id=502099522] [node name="TileMapLayer" type="TileMapLayer" parent="." unique_id=502099522]
tile_set = SubResource("TileSet_71ysb") tile_set = SubResource("TileSet_71ysb")
[node name="Menus" type="CanvasLayer" parent="." unique_id=1125559156] [node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1125559156]
[node name="PauseMenu" parent="Menus" unique_id=1815975678 instance=ExtResource("3_fnnmn")] [node name="LevelColorRect" type="ColorRect" parent="CanvasLayer" unique_id=739757562]
unique_name_in_owner = true
material = SubResource("ShaderMaterial_yeikn")
offset_right = 640.0
offset_bottom = 360.0
[node name="PauseMenu" parent="CanvasLayer" unique_id=1815975678 instance=ExtResource("3_fnnmn")]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 2 process_mode = 2
+4 -2
View File
@@ -3,9 +3,11 @@
[ext_resource type="PackedScene" uid="uid://hdnty666fw1h" path="res://game/levels/abstract_level.tscn" id="1_46m3m"] [ext_resource type="PackedScene" uid="uid://hdnty666fw1h" path="res://game/levels/abstract_level.tscn" id="1_46m3m"]
[node name="TestLevel" unique_id=1001045799 instance=ExtResource("1_46m3m")] [node name="TestLevel" unique_id=1001045799 instance=ExtResource("1_46m3m")]
initial_corruption_x = -500.0
corruption_speed = 10.0
[node name="Player" parent="." index="0" unique_id=763780926] [node name="Player" parent="." index="0" unique_id=763780926]
position = Vector2(0, -30) position = Vector2(0, -38)
[node name="TileMapLayer" parent="." index="1" unique_id=502099522] [node name="TileMapLayer" parent="." index="1" unique_id=502099522]
tile_map_data = PackedByteArray("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") tile_map_data = PackedByteArray("AAAMAP//AAAFAAoAAAAMAP7/AAALAAYAAAAMAP3/AAAIAAYAAAAMAPz/AAAKAAYAAAAMAPv/AAADAAYAAAAMAPr/AAAGAAYAAAAMAPn/AAABAAYAAAAMAPj/AAAIAAYAAAAMAPf/AAAFAAYAAAAMAPb/AAAIAAYAAAAMAPX/AAALAAYAAAAMAPT/AAALAAYAAAAMAPP/AAADAAYAAAAMAPL/AAACAAYAAAAMAPH/AAAFAAYAAAAMAPD/AAABAAYAAAAAAPn/AAADAAQAAAAAAPj/AAAKAAYAAAAAAPf/AAACAAYAAAAAAPb/AAADAAYAAAAAAPX/AAAJAAYAAAAAAPT/AAADAAYAAAAAAPP/AAAIAAYAAAAAAPL/AAAKAAYAAAAAAPH/AAAGAAYAAAAAAPD/AAAJAAYAAAAAAO//AAAJAAYAAAD0////AAAGAAcAAAD0//7/AAAGAAYAAAD0//3/AAABAAYAAAD0//z/AAAGAAYAAAD0//v/AAAFAAYAAAD0//r/AAAHAAYAAAD0//n/AAAHAAYAAAD0//j/AAACAAYAAAD0//f/AAAEAAYAAAD0//b/AAABAAYAAAD0//X/AAABAAYAAAD0//T/AAAIAAYAAAD0//P/AAALAAYAAAD0//L/AAAFAAYAAAD0//H/AAAGAAYAAAD0//D/AAAKAAYAAAD0/+//AAAGAAYAAAD0/+7/AAAKAAYAAAD0/+3/AAAJAAYAAAD0/+z/AAALAAYAAAD0/+v/AAAAAAYAAAD0/+r/AAAIAAYAAAD0/+n/AAAFAAYAAAD0/+j/AAAIAAYAAAD0/+b/AAAEAAYAAAD0/+f/AAADAAYAAAAMAO//AAAIAAYAAAAMAO7/AAACAAYAAAAMAO3/AAAHAAYAAAAMAOz/AAAJAAYAAAAMAOv/AAAFAAYAAAAMAOr/AAALAAYAAAAMAOn/AAADAAYAAAAMAOj/AAAGAAYAAAAMAOf/AAAFAAYAAAAAAO7/AAABAAYAAAAAAO3/AAALAAYAAAAAAOz/AAAKAAYAAAAAAOv/AAAIAAYAAAAAAOr/AAADAAYAAAAAAOn/AAAEAAYAAAAAAOj/AAACAAYAAAAAAOf/AAAAAAYAAAAAAOb/AAAEAAYAAAAMAOb/AAAFAAYAAAAMAOX/AAAJAAgAAAANAOX/AAAIAAUAAAAOAOX/AAAAAAUAAAAPAOX/AAACAAUAAAAQAOX/AAAAAAUAAAARAOX/AAAHAAUAAAASAOX/AAAHAAUAAAATAOX/AAACAAUAAAAUAOX/AAAKAAUAAAAVAOX/AAAKAAUAAAAWAOX/AAAGAAUAAAAXAOX/AAALAAUAAAAYAOX/AAAKAAUAAAAZAOX/AAAAAAUAAAAaAOX/AAADAAUAAAAbAOX/AAAAAAIAAAD0/+X/AAAKAAkAAADz/+X/AAAFAAUAAADy/+X/AAAGAAUAAADx/+X/AAAJAAUAAADw/+X/AAAHAAUAAADv/+X/AAABAAUAAADu/+X/AAAIAAUAAADt/+X/AAAKAAUAAADs/+X/AAAHAAUAAADr/+X/AAAHAAUAAADq/+X/AAABAAUAAADp/+X/AAAKAAUAAADo/+X/AAAIAAUAAADn/+X/AAABAAUAAADm/+X/AAALAAUAAADl/+X/AAAGAAEAAAAAAOX/AAAAAAYAAAAAAOT/AAALAAYAAAAAAOP/AAACAAYAAAAAAOL/AAAEAAYAAAAAAOH/AAAHAAYAAAAAAOD/AAADAAYAAAAAAN//AAAGAAYAAAAAAN7/AAAEAAYAAAAAAN3/AAABAAYAAAAAANz/AAAKAAYAAAAAANv/AAADAAYAAAAAANr/AAACAAMAAAALAP//AAAHAAUAAAAKAP//AAAFAAUAAAAJAP//AAACAAUAAAAIAP//AAAIAAUAAAAHAP//AAAAAAUAAAAGAP//AAABAAUAAAAFAP//AAAJAAUAAAAEAP//AAALAAUAAAADAP//AAAEAAUAAAACAP//AAADAAUAAAABAP//AAAJAAUAAAAAAP//AAAJAAUAAAD/////AAAJAAUAAAD+////AAACAAUAAAD9////AAADAAUAAAD8////AAAGAAUAAAD7////AAACAAUAAAD6////AAAIAAUAAAD5////AAACAAUAAAD4////AAAHAAUAAAD3////AAACAAUAAAD2////AAAKAAUAAAD1////AAAEAAUAAAA=")
+22
View File
@@ -0,0 +1,22 @@
shader_type canvas_item;
uniform float corruption_x = 0.0;
uniform float edge_width = 50.0;
uniform mat4 screen_to_world;
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_nearest_mipmap;
void fragment() {
vec4 screen_color = texture(SCREEN_TEXTURE, SCREEN_UV);
float gray = dot(screen_color.rgb, vec3(0.299, 0.587, 0.114));
vec3 bw = vec3(gray);
vec4 world_pos = screen_to_world * vec4(FRAGCOORD.xy, 0.0, 1.0);
float dist = world_pos.x - corruption_x;
float t = smoothstep(-edge_width, edge_width, dist);
COLOR.rgb = mix(bw, screen_color.rgb, t);
COLOR.a = screen_color.a;
}
+1
View File
@@ -0,0 +1 @@
uid://brudtlwas6x66