material-maker/addons/material_maker/engine/gen_text.gd

51 lines
1.6 KiB
GDScript

tool
extends MMGenTexture
class_name MMGenText
"""
Texture generator from text
"""
var updating : bool = false
var update_again : bool = false
func _ready() -> void:
update_buffer()
func get_type() -> String:
return "text"
func get_type_name() -> String:
return "Text"
func get_parameter_defs() -> Array:
return [ { name="text", type="string", default="Hello World" },
{ name="font", type="file", filters=[ "*.otf,*.ttf,*.fnt;Font file" ], default="" },
{ name="font_size", type="float", min=0, max=128, step=1, default=32 },
{ name="center", type="boolean", default=false },
{ name="x", type="float", min=-0.5, max=0.5, step=0.001, default=0.1, control="P1.x" },
{ name="y", type="float", min=-0.5, max=0.5, step=0.001, default=0.1, control="P1.y" } ]
func set_parameter(n : String, v) -> void:
.set_parameter(n, v)
if is_inside_tree():
update_buffer()
func update_buffer() -> void:
update_again = true
if !updating:
updating = true
while update_again:
update_again = false
var renderer = mm_renderer.request(self)
while renderer is GDScriptFunctionState:
renderer = yield(renderer, "completed")
renderer = renderer.render_text(self, get_parameter("text"), get_parameter("font"), get_parameter("font_size"), get_parameter("x"), get_parameter("y"), get_parameter("center"))
while renderer is GDScriptFunctionState:
renderer = yield(renderer, "completed")
if !update_again:
renderer.copy_to_texture(texture)
renderer.release(self)
updating = false
get_tree().call_group("preview", "on_texture_changed", "o%s_tex" % str(get_instance_id()))