Added a new tool (LayeredTextureMaker). I'm hoping to simplify icon creation with it.

This commit is contained in:
Relintai 2020-02-17 17:55:34 +01:00
parent e826266b7a
commit 7d66723e19
3 changed files with 118 additions and 0 deletions

View File

@ -44,6 +44,11 @@ _global_script_classes=[ {
"language": "GDScript",
"path": "res://scripts/items/ItemTemplateGD.gd"
}, {
"base": "Node2D",
"class": "LayeredTextureMaker",
"language": "GDScript",
"path": "res://texture_tools/LayeredTextureMaker.gd"
}, {
"base": "Node",
"class": "Main",
"language": "GDScript",
@ -152,6 +157,7 @@ _global_script_class_icons={
"EntityDataGD": "",
"GDCubicVoxelMesher": "",
"ItemTemplateGD": "",
"LayeredTextureMaker": "",
"Main": "",
"MainDungeonGenerator": "",
"MainPlanetGenerator": "",

View File

@ -0,0 +1,102 @@
tool
extends Node2D
class_name LayeredTextureMaker
export(Vector2) var texture_size = Vector2(16, 16) setget set_tex_size
export(String) var texture_name = ""
export(float) var refresh_rate : float = 2.0
export(bool) var save : bool = false setget save_set
var preview_node : Sprite = null
var viewport : Viewport = null
var last_refresh : float = 0
func _enter_tree():
set_meta("_edit_lock_", true)
emit_signal("item_lock_status_changed")
create_preview()
func create_preview():
for c in get_children():
if c.name == "Preview":
preview_node = c
for ch in preview_node.get_children():
if ch is Viewport:
viewport = ch as Viewport
break
break
if viewport != null:
viewport.queue_free()
if preview_node != null:
preview_node.queue_free()
preview_node = Sprite.new() as Sprite
preview_node.name = "Preview"
preview_node.centered = false
add_child(preview_node)
#don't, so it won't show up in the inspector
#if Engine.editor_hint:
# preview_node.owner = get_tree().edited_scene_root
viewport = Viewport.new()
preview_node.add_child(viewport)
#don't, so it won't show up in the inspector
#if Engine.editor_hint:
# viewport.owner = get_tree().edited_scene_root
viewport.set_vflip(true)
viewport.set_size(texture_size)
preview_node.set_texture(null)
preview_node.set_texture(viewport.get_texture())
set_process(true)
func _process(delta):
#not the best solution, but works for now
last_refresh += delta
if (last_refresh > refresh_rate):
last_refresh -= refresh_rate
for ch in viewport.get_children():
ch.queue_free()
for ch in get_children():
viewport.add_child(ch.duplicate())
if get_children().has(preview_node) and get_child(get_child_count() - 1) != preview_node:
move_child(preview_node, get_child_count() - 1)
func save() -> void:
if texture_name == "":
print("Set a name for your texture!")
return
func preview_refresh() -> void:
for ch in viewport.get_children():
ch.queue_free()
for ch in get_children():
if ch.name == "Preview":
continue
viewport.add_child(ch.duplicate())
func set_tex_size(size : Vector2) -> void:
texture_size = size
create_preview()
func save_set(val):
if val:
save()

View File

@ -0,0 +1,10 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://texture_tools/LayeredTextureMaker.gd" type="Script" id=1]
[node name="LayeredTextureMaker" type="Node2D"]
script = ExtResource( 1 )
__meta__ = {
"_edit_lock_": true
}
refresh_rate = 3.0