52 lines
1.1 KiB
GDScript3
52 lines
1.1 KiB
GDScript3
|
|
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())
|
||
|
|
)
|