generated from krampus/template-godot4
43 lines
781 B
GDScript
43 lines
781 B
GDScript
class_name DrawController extends Control
|
|
|
|
var _draw_queue: Array[Callable] = []
|
|
|
|
var _dirty := false
|
|
var _clear := true
|
|
var _show_texture := true
|
|
|
|
@onready var mask_clear: ColorRect = %MaskClear
|
|
@onready var mask_texture: TextureRect = %MaskTexture
|
|
|
|
|
|
func clear(color: Color) -> void:
|
|
mask_clear.color = color
|
|
_clear = true
|
|
|
|
|
|
func queue_draw(op: Callable) -> void:
|
|
_draw_queue.push_back(op)
|
|
_dirty = true
|
|
|
|
|
|
func _draw() -> void:
|
|
while _draw_queue:
|
|
var op: Callable = _draw_queue.pop_front()
|
|
op.call()
|
|
|
|
|
|
func _process(_delta: float) -> void:
|
|
if _dirty:
|
|
queue_redraw()
|
|
_dirty = false
|
|
|
|
# show clear rect for one frame
|
|
mask_clear.visible = _clear
|
|
_clear = false
|
|
mask_texture.visible = _show_texture
|
|
_show_texture = false
|
|
|
|
|
|
func _set_dirty() -> void:
|
|
_dirty = true
|