Fragmented/src/Filesystem.gd

76 lines
2.1 KiB
GDScript3
Raw Normal View History

2024-12-21 18:25:11 +01:00
extends Node
@onready var template_shader: Shader = load("res://src/shader/template.gdshader")
@onready var shader_code: String = template_shader.code
2024-12-21 18:25:11 +01:00
var original_image: ImageTexture
var additional_images: Dictionary
2024-12-21 18:25:11 +01:00
var result: Image
var cwd = "."
var last_image_savepath = ""
var last_shader_savepath = ""
var last_original_image_path = ""
func reset():
self.shader_code = self.template_shader.code
self.last_image_savepath = ""
self.last_shader_savepath = ""
self.last_original_image_path = ""
self.original_image = null
self.result = null
2024-12-21 18:25:11 +01:00
func get_absolute_path(p: String) -> String:
# this only works on Linux!
if !p.begins_with("/"):
return self.cwd + "/" + p.lstrip("./")
return p
func load_original_image(path: String) -> String: # returns an error message
2024-12-21 18:25:11 +01:00
var img = Image.new()
var err = img.load(path)
if err == OK:
original_image = ImageTexture.create_from_image(img)
if path != self.last_original_image_path:
self.last_original_image_path = path
if self.last_image_savepath == "":
self.last_image_savepath = path
return ""
return error_string(err) + " " + path
2024-12-21 18:25:11 +01:00
func clear_additional_images():
additional_images.clear()
func load_additional_image(key: String, path: String) -> String: # returns Error Message String
var img = Image.new()
var err = img.load(path)
if err == OK:
additional_images[key] = ImageTexture.create_from_image(img)
return ""
else:
return error_string(err) + " " + path
2024-12-21 18:25:11 +01:00
func save_result(path: String):
print("Export ", path)
var err = self.result.save_png(path)
if err != OK:
print("An error occured!")
else:
self.last_image_savepath = path
func load_shader(path: String):
print("Load ", path)
var file = FileAccess.open(path, FileAccess.READ)
self.shader_code = file.get_as_text()
2024-12-21 18:25:11 +01:00
if "/" in path: # update current working directory
self.cwd = path.substr(0, path.rfind("/"))
self.last_shader_savepath = path
func save_shader(path: String):
2024-12-21 18:25:11 +01:00
print("Save ", path)
var file = FileAccess.open(path, FileAccess.WRITE)
file.store_string(self.shader_code)
2024-12-21 18:25:11 +01:00
if "/" in path: # update current working directory
self.cwd = path.substr(0, path.rfind("/"))
self.last_shader_savepath = path