53 lines
1.2 KiB
GDScript3
53 lines
1.2 KiB
GDScript3
|
extends Node
|
||
|
|
||
|
export(float) var frames_per_second = 5.0
|
||
|
|
||
|
var is_active:bool = false
|
||
|
var is_saving:bool = false
|
||
|
|
||
|
var _frametick = 1.0/frames_per_second
|
||
|
var _thread:Thread
|
||
|
|
||
|
var images = []
|
||
|
|
||
|
|
||
|
func _ready():
|
||
|
_thread = Thread.new()
|
||
|
|
||
|
|
||
|
func _process(delta):
|
||
|
if Input.is_action_just_pressed("controls_capture") && not is_saving:
|
||
|
is_active = not is_active
|
||
|
find_node("recording").set_visible(is_active)
|
||
|
if not is_active:
|
||
|
is_saving = true
|
||
|
find_node("saving").set_visible(true)
|
||
|
_thread.start(self, "save_images")
|
||
|
if is_active:
|
||
|
_frametick += delta
|
||
|
if (_frametick > 1.0/frames_per_second):
|
||
|
get_viewport().set_clear_mode(Viewport.CLEAR_MODE_ONLY_NEXT_FRAME)
|
||
|
var img = get_viewport().get_texture().get_data()
|
||
|
img.flip_y()
|
||
|
images.append(img)
|
||
|
|
||
|
|
||
|
func save_images(userdata):
|
||
|
var dir = Directory.new()
|
||
|
var timestamp = OS.get_unix_time()
|
||
|
if dir.open("user://capture/") != OK:
|
||
|
dir.open("user://")
|
||
|
dir.make_dir("capture")
|
||
|
|
||
|
dir.open("user://capture/")
|
||
|
dir.make_dir(str(timestamp))
|
||
|
|
||
|
for img in images:
|
||
|
img.save_png("user://capture/" + str(timestamp) + "/" + str(img) + ".png")
|
||
|
|
||
|
images = []
|
||
|
is_saving = false
|
||
|
find_node("saving").set_visible(false)
|
||
|
|
||
|
if(_thread.is_active()):
|
||
|
_thread.wait_to_finish()
|