diff --git a/game/project.godot b/game/project.godot index c555d6b5..e3772887 100644 --- a/game/project.godot +++ b/game/project.godot @@ -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": "", diff --git a/game/texture_tools/LayeredTextureMaker.gd b/game/texture_tools/LayeredTextureMaker.gd new file mode 100644 index 00000000..6b77a1d1 --- /dev/null +++ b/game/texture_tools/LayeredTextureMaker.gd @@ -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() diff --git a/game/texture_tools/test/ToolTest.tscn b/game/texture_tools/test/ToolTest.tscn new file mode 100644 index 00000000..b45d49c0 --- /dev/null +++ b/game/texture_tools/test/ToolTest.tscn @@ -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