xiandie/scene/shading/shading_layer.gd

105 lines
3.7 KiB
GDScript

# @tool
extends CanvasLayer
@export_enum("vignette", "fog", "glitch", "palette", "chromatic_abberation")
var mode: Array[String] = ["vignette"] as Array[String]:
set(new_val):
mode = new_val
if not is_node_ready():
return
_setup_visibility()
@export_group("Vignette", "vignette_")
@export var vignette_rgb := Color8(0x3f, 0x26, 0x31):
set(new_val):
vignette_rgb = new_val
if not is_node_ready():
return
get_node("Vignette").material.set("shader_parameter/vignette_rgb", new_val)
@export_range(0, 5) var vignette_intensity := 0.3:
set(new_val):
vignette_intensity = new_val
if not is_node_ready():
return
get_node("Vignette").material.set("shader_parameter/vignette_intensity", new_val)
@export_group("Fog", "fog_")
@export var fog_offset := Vector2(0.0, 0.0):
set(new_val):
fog_offset = new_val
if not is_node_ready():
return
get_node("Fog").texture.noise.set("offset", new_val)
@export var fog_base_color := Color8(0xff, 0xff, 0xff, 0x3d):
set(new_val):
fog_base_color = new_val
if not is_node_ready():
return
get_node("Fog").material.set("shader_parameter/base_color", new_val)
@export_group("Glitch", "glitch_")
@export var glitch_power := 0.001:
set(new_val):
glitch_power = new_val
if not is_node_ready():
return
get_node("GlitchEffect").material.set("shader_parameter/shake_power", new_val)
# rate
@export var glitch_rate := 0.2:
set(new_val):
glitch_rate = new_val
if not is_node_ready():
return
get_node("GlitchEffect").material.set("shader_parameter/shake_rate", new_val)
# speed
@export var glitch_speed := 5.0:
set(new_val):
glitch_speed = new_val
if not is_node_ready():
return
get_node("GlitchEffect").material.set("shader_parameter/shake_speed", new_val)
# block_size
@export var glitch_block_size := 30.5:
set(new_val):
glitch_block_size = new_val
if not is_node_ready():
return
get_node("GlitchEffect").material.set("shader_parameter/shake_block_size", new_val)
# color rate
@export var glitch_color_rate := 0.01:
set(new_val):
glitch_color_rate = new_val
if not is_node_ready():
return
get_node("GlitchEffect").material.set("shader_parameter/shake_color_rate", new_val)
@export_group("Palette", "palette_")
@export var palette_texture := preload("res://asset/shader/palette/bloodmoon21-1x.png"):
set(new_val):
palette_texture = new_val
if not is_node_ready():
return
get_node("Palette").material.set("shader_parameter/palette", new_val)
func _ready() -> void:
$Sprite2D.visible = false
layer = GlobalConfig.CANVAS_LAYER_SHADING
# set up other properties
get_node("Vignette").material.set("shader_parameter/vignette_rgb", vignette_rgb)
get_node("Vignette").material.set("shader_parameter/vignette_intensity", vignette_intensity)
get_node("Fog").texture.noise.set("offset", fog_offset)
get_node("Fog").material.set("shader_parameter/base_color", fog_base_color)
get_node("GlitchEffect").material.set("shader_parameter/shake_power", glitch_power)
get_node("GlitchEffect").material.set("shader_parameter/shake_rate", glitch_rate)
get_node("GlitchEffect").material.set("shader_parameter/shake_speed", glitch_speed)
get_node("GlitchEffect").material.set("shader_parameter/shake_block_size", glitch_block_size)
get_node("GlitchEffect").material.set("shader_parameter/shake_color_rate", glitch_color_rate)
get_node("Palette").material.set("shader_parameter/palette", palette_texture)
# set up visibility
_setup_visibility()
func _setup_visibility():
get_node("Vignette").visible = mode.has("vignette")
get_node("Fog").visible = mode.has("fog")
get_node("GlitchEffect").visible = mode.has("glitch")
get_node("Palette").visible = mode.has("palette")
get_node("ChromaticAbberation").visible = mode.has("chromatic_abberation")