Add resolution-independent pixelation
This commit is contained in:
parent
46175ee405
commit
6f51f91324
10 changed files with 220 additions and 33 deletions
51
main/world_pixelation_postprocess.gd
Normal file
51
main/world_pixelation_postprocess.gd
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
class_name WorldPixelationPostprocess
|
||||
extends CanvasLayer
|
||||
|
||||
@onready var _screen_grid: ColorRect = %ScreenGrid
|
||||
|
||||
var _pixel_size: int = PlayerSettings.DEFAULT_WORLD_PIXEL_SIZE
|
||||
var _gameplay_active: bool = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
get_viewport().size_changed.connect(_refresh_grid)
|
||||
_refresh_grid()
|
||||
|
||||
|
||||
func set_pixel_size(pixel_size: int) -> void:
|
||||
_pixel_size = clampi(
|
||||
pixel_size,
|
||||
PlayerSettings.MIN_WORLD_PIXEL_SIZE,
|
||||
PlayerSettings.MAX_WORLD_PIXEL_SIZE
|
||||
)
|
||||
_refresh_grid()
|
||||
|
||||
|
||||
func set_gameplay_active(active: bool) -> void:
|
||||
_gameplay_active = active
|
||||
_refresh_grid()
|
||||
|
||||
|
||||
func get_grid_size() -> Vector2i:
|
||||
return PlayerSettings.get_world_grid_size(
|
||||
_pixel_size,
|
||||
get_window().size
|
||||
)
|
||||
|
||||
|
||||
func _refresh_grid() -> void:
|
||||
if not is_node_ready():
|
||||
return
|
||||
var effect_enabled: bool = (
|
||||
_gameplay_active
|
||||
and _pixel_size != PlayerSettings.MIN_WORLD_PIXEL_SIZE
|
||||
)
|
||||
_screen_grid.visible = effect_enabled
|
||||
if not effect_enabled:
|
||||
return
|
||||
var shader_material := _screen_grid.material as ShaderMaterial
|
||||
if shader_material != null:
|
||||
shader_material.set_shader_parameter(
|
||||
"logical_grid_size",
|
||||
Vector2(get_grid_size())
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue