mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-01-18 17:19:50 +00:00
3a20b3e073
They're like File brushes, but each time you draw, expect to see something different! To make a random brush, just put the images you want in the same folder (under the main Brushes folder of course), and make sure their filename starts with "%". I also changed _process() to _input() in Canvas.gd, so there may be some unexpected behavior.
87 lines
2.8 KiB
GDScript
87 lines
2.8 KiB
GDScript
extends Node
|
|
|
|
func import_brushes(path : String) -> void:
|
|
var brushes_dir := Directory.new()
|
|
if !brushes_dir.dir_exists(path):
|
|
brushes_dir.make_dir(path)
|
|
|
|
var subdirectories := find_brushes(brushes_dir, path)
|
|
for subdir_str in subdirectories:
|
|
var subdir := Directory.new()
|
|
find_brushes(subdir, "%s/%s" % [path, subdir_str])
|
|
|
|
Global.brushes_from_files = Global.custom_brushes.size()
|
|
|
|
func find_brushes(brushes_dir : Directory, path : String) -> Array:
|
|
var subdirectories := []
|
|
var found_random_brush := 0
|
|
brushes_dir.open(path)
|
|
brushes_dir.list_dir_begin(true)
|
|
var file := brushes_dir.get_next()
|
|
while file != "":
|
|
if file.get_extension().to_upper() == "PNG":
|
|
var image := Image.new()
|
|
var err := image.load(path.plus_file(file))
|
|
if err == OK:
|
|
if "%" in file:
|
|
if found_random_brush == 0:
|
|
found_random_brush = Global.file_brush_container.get_child_count()
|
|
image.convert(Image.FORMAT_RGBA8)
|
|
Global.custom_brushes.append(image)
|
|
Global.create_brush_button(image, Global.BRUSH_TYPES.RANDOM_FILE, file.trim_suffix(".png"))
|
|
else:
|
|
var brush_button = Global.file_brush_container.get_child(found_random_brush)
|
|
brush_button.random_brushes.append(image)
|
|
else:
|
|
image.convert(Image.FORMAT_RGBA8)
|
|
Global.custom_brushes.append(image)
|
|
Global.create_brush_button(image, Global.BRUSH_TYPES.FILE, file.trim_suffix(".png"))
|
|
elif file.get_extension() == "": # Probably a directory
|
|
var subdir := "./%s" % [file]
|
|
if brushes_dir.dir_exists(subdir): # If it's an actual directory
|
|
subdirectories.append(subdir)
|
|
|
|
file = brushes_dir.get_next()
|
|
brushes_dir.list_dir_end()
|
|
return subdirectories
|
|
|
|
func import_gpl(path : String) -> Palette:
|
|
var result : Palette = null
|
|
var file = File.new()
|
|
if file.file_exists(path):
|
|
file.open(path, File.READ)
|
|
var text = file.get_as_text()
|
|
var lines = text.split('\n')
|
|
var line_number := 0
|
|
var comments := ""
|
|
for line in lines:
|
|
# Check if valid Gimp Palette Library file
|
|
if line_number == 0:
|
|
if line != "GIMP Palette":
|
|
break
|
|
else:
|
|
result = Palette.new()
|
|
var name_start = path.find_last('/') + 1
|
|
var name_end = path.find_last('.')
|
|
if name_end > name_start:
|
|
result.name = path.substr(name_start, name_end - name_start)
|
|
|
|
# Comments
|
|
if line.begins_with('#'):
|
|
comments += line.trim_prefix('#') + '\n'
|
|
pass
|
|
elif line_number > 0 && line.length() >= 12:
|
|
var red : float = line.substr(0, 4).to_float() / 255.0
|
|
var green : float = line.substr(4, 4).to_float() / 255.0
|
|
var blue : float = line.substr(8, 4).to_float() / 255.0
|
|
var name : String = line.substr(12, line.length() - 12)
|
|
var color = Color(red, green, blue)
|
|
result.add_color(color, name)
|
|
line_number += 1
|
|
|
|
if result:
|
|
result.comments = comments
|
|
file.close()
|
|
|
|
return result
|