mirror of
https://github.com/Relintai/broken_seals.git
synced 2024-11-13 20:47:19 +01:00
121 lines
2.5 KiB
GDScript
121 lines
2.5 KiB
GDScript
tool
|
|
class_name MMNode
|
|
extends Resource
|
|
|
|
export(Vector2) var graph_position : Vector2 = Vector2()
|
|
|
|
var input_properties : Array
|
|
var output_properties : Array
|
|
|
|
var properties_initialized : bool = false
|
|
|
|
var dirty : bool = true
|
|
|
|
#MMMateial
|
|
func render(material) -> bool:
|
|
if !dirty:
|
|
return false
|
|
|
|
for p in input_properties:
|
|
if p.input_property && p.input_property.owner.dirty:
|
|
return false
|
|
|
|
_render(material)
|
|
|
|
dirty = false
|
|
|
|
return true
|
|
|
|
#MMMateial
|
|
func _render(material) -> void:
|
|
pass
|
|
|
|
func render_image(material) -> Image:
|
|
var image : Image = Image.new()
|
|
image.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
|
|
|
|
image.lock()
|
|
|
|
var w : float = image.get_width()
|
|
var h : float = image.get_width()
|
|
|
|
var pseed : float = randf() + randi()
|
|
|
|
for x in range(image.get_width()):
|
|
for y in range(image.get_height()):
|
|
var v : Vector2 = Vector2(x / w, y / h)
|
|
|
|
var col : Color = get_value_for(v, pseed)
|
|
|
|
image.set_pixel(x, y, col)
|
|
|
|
image.unlock()
|
|
|
|
return image
|
|
|
|
func get_value_for(uv : Vector2, pseed : int) -> Color:
|
|
return Color()
|
|
|
|
func init_properties() -> void:
|
|
if !properties_initialized:
|
|
properties_initialized = true
|
|
|
|
_init_properties()
|
|
|
|
func _init_properties() -> void:
|
|
pass
|
|
|
|
func register_methods(mm_graph_node) -> void:
|
|
init_properties()
|
|
_register_methods(mm_graph_node)
|
|
|
|
func _register_methods(mm_graph_node) -> void:
|
|
pass
|
|
|
|
func get_graph_position() -> Vector2:
|
|
return graph_position
|
|
|
|
func set_graph_position(pos : Vector2) -> void:
|
|
graph_position = pos
|
|
|
|
emit_changed()
|
|
|
|
func register_input_property(prop : MMNodeUniversalProperty) -> void:
|
|
prop.owner = self
|
|
|
|
if !prop.is_connected("changed", self, "on_input_property_changed"):
|
|
prop.connect("changed", self, "on_input_property_changed")
|
|
|
|
input_properties.append(prop)
|
|
|
|
func unregister_input_property(prop : MMNodeUniversalProperty) -> void:
|
|
if prop.owner == self:
|
|
prop.owner = null
|
|
|
|
if prop.is_connected("changed", self, "on_input_property_changed"):
|
|
prop.disconnect("changed", self, "on_input_property_changed")
|
|
|
|
input_properties.erase(prop)
|
|
|
|
func register_output_property(prop : MMNodeUniversalProperty) -> void:
|
|
prop.owner = self
|
|
|
|
output_properties.append(prop)
|
|
|
|
func unregister_output_property(prop : MMNodeUniversalProperty) -> void:
|
|
if prop.owner == self:
|
|
prop.owner = null
|
|
|
|
output_properties.erase(prop)
|
|
|
|
func set_dirty(val : bool) -> void:
|
|
var changed : bool = val != dirty
|
|
|
|
dirty = val
|
|
|
|
if changed:
|
|
emit_changed()
|
|
|
|
func on_input_property_changed() -> void:
|
|
set_dirty(true)
|