mirror of
https://github.com/Relintai/broken_seals.git
synced 2024-12-18 01:06:47 +01:00
Initial slot api for MMGraphNode. Already supports images. Also implemented the image generation helper methods for MMMaterial and MMNode.
This commit is contained in:
parent
537d44bc63
commit
4b334a6ad6
@ -30,7 +30,7 @@ func recreate() -> void:
|
||||
|
||||
for n in _material.nodes:
|
||||
var gn : GraphNode = MMGraphNode.new()
|
||||
gn.set_node(n)
|
||||
gn.set_node(_material, n)
|
||||
_graph_edit.add_child(gn)
|
||||
|
||||
#connect them
|
||||
@ -56,8 +56,9 @@ func _on_AddPopup_ok_pressed(script_path : String):
|
||||
print("_on_AddPopup_ok_pressed: Error !nnode! script: " + script_path)
|
||||
return
|
||||
|
||||
_material.nodes.append(nnode)
|
||||
_material.add_node(nnode)
|
||||
|
||||
var gn : GraphNode = MMGraphNode.new()
|
||||
gn.set_node(nnode)
|
||||
gn.set_node(_material, nnode)
|
||||
_graph_edit.add_child(gn)
|
||||
|
||||
|
@ -1,7 +1,90 @@
|
||||
tool
|
||||
extends GraphNode
|
||||
|
||||
var _node : MMNode = null
|
||||
export(PoolColorArray) var slot_colors : PoolColorArray
|
||||
|
||||
func set_node(node : MMNode) -> void:
|
||||
var _material : MMMateial = null
|
||||
var _node : MMNode = null
|
||||
var properties : Array = Array()
|
||||
|
||||
func _init():
|
||||
show_close = true
|
||||
connect("offset_changed", self, "on_offset_changed")
|
||||
|
||||
func add_slot_texture(input_type : int, output_type : int, getter : String, setter : String) -> void:
|
||||
var t : TextureRect = TextureRect.new()
|
||||
|
||||
var slot_idx : int = add_slot(input_type, output_type, getter, setter, t)
|
||||
|
||||
t.texture = _node.call(getter, _material, slot_idx)
|
||||
properties[slot_idx].append(t.texture)
|
||||
|
||||
func add_slot_label(input_type : int, output_type : int, getter : String, setter : String, slot_name : String) -> void:
|
||||
var l : Label = Label.new()
|
||||
|
||||
l.text = slot_name
|
||||
|
||||
add_slot(input_type, output_type, getter, setter, l)
|
||||
|
||||
func add_slot(input_type : int, output_type : int, getter : String, setter : String, control : Control) -> int:
|
||||
add_child(control)
|
||||
var slot_idx : int = get_child_count() - 1
|
||||
|
||||
var arr : Array = Array()
|
||||
|
||||
arr.append(slot_idx)
|
||||
arr.append(input_type)
|
||||
arr.append(output_type)
|
||||
arr.append(getter)
|
||||
arr.append(setter)
|
||||
arr.append(control)
|
||||
|
||||
properties.append(arr)
|
||||
|
||||
set_slot_enabled_left(slot_idx, input_type != -1)
|
||||
set_slot_enabled_right(slot_idx, output_type != -1)
|
||||
|
||||
if input_type != -1:
|
||||
set_slot_type_left(slot_idx, input_type)
|
||||
|
||||
if output_type != -1:
|
||||
set_slot_type_left(slot_idx, output_type)
|
||||
|
||||
if slot_colors.size() > input_type:
|
||||
set_slot_color_left(slot_idx, slot_colors[input_type])
|
||||
|
||||
if slot_colors.size() > output_type:
|
||||
set_slot_color_left(slot_idx, slot_colors[output_type])
|
||||
|
||||
return slot_idx
|
||||
|
||||
func set_node(material : MMMateial, node : MMNode) -> void:
|
||||
_node = node
|
||||
_material = material
|
||||
|
||||
if !_node:
|
||||
return
|
||||
|
||||
title = _node.get_class()
|
||||
|
||||
if _node.get_script():
|
||||
title = _node.get_script().resource_path.get_file().get_basename()
|
||||
|
||||
_node.register_methods(self)
|
||||
|
||||
offset = _node.get_graph_position()
|
||||
|
||||
_node.connect("changed", self, "on_node_changed")
|
||||
|
||||
func propagate_node_change() -> void:
|
||||
pass
|
||||
|
||||
func on_offset_changed():
|
||||
if _node:
|
||||
_node.set_graph_position(offset)
|
||||
|
||||
func on_node_changed():
|
||||
#get all properties again
|
||||
#_node.recalculate_image(_material)
|
||||
|
||||
propagate_node_change()
|
||||
|
@ -4,4 +4,9 @@ extends Resource
|
||||
|
||||
var MMMNode = preload("res://addons/mat_maker_gd/nodes/mm_node.gd")
|
||||
|
||||
export(Vector2) var image_size : Vector2 = Vector2(128, 128)
|
||||
export(Array) var nodes : Array
|
||||
|
||||
func add_node(node : MMNode) -> void:
|
||||
nodes.append(node)
|
||||
emit_changed()
|
||||
|
@ -2,6 +2,45 @@ tool
|
||||
class_name MMNode
|
||||
extends Resource
|
||||
|
||||
export(Vector2) var graph_position : Vector2 = Vector2()
|
||||
|
||||
var texture : ImageTexture
|
||||
func recalculate_image(material, slot_idx : int) -> ImageTexture:
|
||||
var image : Image = Image.new()
|
||||
image.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
|
||||
|
||||
var tex : ImageTexture = ImageTexture.new()
|
||||
|
||||
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)
|
||||
|
||||
image.set_pixel(x, y, col)
|
||||
|
||||
image.unlock()
|
||||
|
||||
tex.create_from_image(image)
|
||||
|
||||
return tex
|
||||
|
||||
func get_value_for(uv : Vector2) -> Color:
|
||||
return Color()
|
||||
|
||||
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()
|
||||
|
@ -9,62 +9,16 @@ var tex : ImageTexture
|
||||
export(Vector2) var bmin : Vector2 = Vector2(0.1, 0.1)
|
||||
export(Vector2) var bmax : Vector2 = Vector2(1, 1)
|
||||
|
||||
export(bool) var refresh setget reff,reffg
|
||||
|
||||
func _ready():
|
||||
if !Engine.editor_hint:
|
||||
gen()
|
||||
|
||||
func gen() -> void:
|
||||
if !image:
|
||||
image = Image.new()
|
||||
image.create(300, 300, false, Image.FORMAT_RGBA8)
|
||||
|
||||
if !tex:
|
||||
tex = ImageTexture.new()
|
||||
|
||||
# var bmin : Vector2 = Vector2(0.1, 0.1)
|
||||
# var bmax : Vector2 = Vector2(1, 1)
|
||||
|
||||
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 f : float = pattern(v, 4, 4, CombinerType.MULTIPLY, CombinerAxisType.SINE, CombinerAxisType.SINE)
|
||||
|
||||
var col : Color = perlin(v)
|
||||
# var col : Color = beehive_2_col(v)
|
||||
# var col : Color = beehive_3_col(v)
|
||||
|
||||
image.set_pixel(x, y, col)
|
||||
|
||||
|
||||
image.unlock()
|
||||
|
||||
tex.create_from_image(image)
|
||||
texture = tex
|
||||
|
||||
var seed_o12297 = -26656;
|
||||
var p_o12297_scale_x = 4.000000000;
|
||||
var p_o12297_scale_y = 4.000000000;
|
||||
var p_o12297_iterations = 3.000000000;
|
||||
var p_o12297_persistence = 0.500000000;
|
||||
|
||||
func perlin(uv : Vector2) -> Color:
|
||||
func get_value_for(uv : Vector2) -> Color:
|
||||
var a = NoisePerlin.perlinc(uv, Vector2(p_o12297_scale_x, p_o12297_scale_y), int(p_o12297_iterations), p_o12297_persistence, seed_o12297)
|
||||
return a
|
||||
|
||||
func reffg():
|
||||
return false
|
||||
|
||||
func reff(bb):
|
||||
if bb:
|
||||
gen()
|
||||
func register_methods(mm_graph_node) -> void:
|
||||
mm_graph_node.add_slot_texture(0, 0, "recalculate_image", "")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user