Added corruption shader
This commit is contained in:
@@ -34,6 +34,7 @@ var _last_wall_normal: = 0.0
|
||||
@onready var attack_left_sprite : AnimatedSprite2D = $AttackLeftSprite
|
||||
@onready var attack_right_sprite : AnimatedSprite2D = $AttackRightSprite
|
||||
|
||||
@onready var camera : Camera2D = $Camera2D
|
||||
@onready var state_machine : StateMachine = $StateMachine
|
||||
|
||||
@onready var jump_buffer_timer : Timer = $JumpBufferTimer
|
||||
|
||||
@@ -569,6 +569,9 @@ sprite_frames = SubResource("SpriteFrames_i4f54")
|
||||
animation = &"attack"
|
||||
|
||||
[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")]
|
||||
initial_state = NodePath("IdleState")
|
||||
|
||||
@@ -2,17 +2,34 @@ class_name AbstractLevel
|
||||
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 pause_menu : PauseMenu = $%PauseMenu
|
||||
|
||||
@onready var level_material : ShaderMaterial = $%LevelColorRect.material
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
$Menus.show()
|
||||
_corruption_x = initial_corruption_x
|
||||
pause_menu.hide()
|
||||
|
||||
#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:
|
||||
if event.is_action_pressed("pause"):
|
||||
SoundManager.play_ui_stream(SoundManager.ui_stream_accept)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
[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://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"]
|
||||
|
||||
[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)
|
||||
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]
|
||||
script = ExtResource("1_o2mui")
|
||||
|
||||
@@ -1177,8 +1184,14 @@ script = ExtResource("1_o2mui")
|
||||
[node name="TileMapLayer" type="TileMapLayer" parent="." unique_id=502099522]
|
||||
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
|
||||
process_mode = 2
|
||||
|
||||
@@ -3,9 +3,11 @@
|
||||
[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")]
|
||||
initial_corruption_x = -500.0
|
||||
corruption_speed = 10.0
|
||||
|
||||
[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]
|
||||
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=")
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://brudtlwas6x66
|
||||
Reference in New Issue
Block a user