merge in 0.2 changes
This commit is contained in:
parent
d9a41c15c6
commit
5bb84956ff
20 changed files with 331 additions and 16 deletions
14
Scripts/GL_Bool.gd
Normal file
14
Scripts/GL_Bool.gd
Normal file
|
@ -0,0 +1,14 @@
|
|||
extends GL_Node
|
||||
|
||||
func _ready():
|
||||
super._ready()
|
||||
_set_title("Bool")
|
||||
_create_row("Output",null,false,true,false,0)
|
||||
_update_visuals()
|
||||
|
||||
func _process(delta):
|
||||
super._process(delta)
|
||||
apply_pick_values()
|
||||
for key in rows:
|
||||
rows[key]["output"] = rows[key]["input"]
|
||||
_send_input("Output")
|
1
Scripts/GL_Bool.gd.uid
Normal file
1
Scripts/GL_Bool.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://3rg2qunautt5
|
14
Scripts/GL_Color.gd
Normal file
14
Scripts/GL_Color.gd
Normal file
|
@ -0,0 +1,14 @@
|
|||
extends GL_Node
|
||||
|
||||
func _ready():
|
||||
super._ready()
|
||||
_set_title("Color")
|
||||
_create_row("Output",null,Color.WHITE,true,Color.WHITE,0)
|
||||
_update_visuals()
|
||||
|
||||
func _process(delta):
|
||||
super._process(delta)
|
||||
apply_pick_values()
|
||||
for key in rows:
|
||||
rows[key]["output"] = rows[key]["input"]
|
||||
_send_input("Output")
|
1
Scripts/GL_Color.gd.uid
Normal file
1
Scripts/GL_Color.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://bi27y3jflhagl
|
|
@ -8,5 +8,7 @@ func _ready():
|
|||
|
||||
func _process(delta):
|
||||
super._process(delta)
|
||||
rows["Output"]["output"] = rows["Output"]["pickValue"]
|
||||
apply_pick_values()
|
||||
for key in rows:
|
||||
rows[key]["output"] = rows[key]["input"]
|
||||
_send_input("Output")
|
||||
|
|
21
Scripts/GL_Invert.gd
Normal file
21
Scripts/GL_Invert.gd
Normal file
|
@ -0,0 +1,21 @@
|
|||
extends GL_Node
|
||||
|
||||
|
||||
func _ready():
|
||||
super._ready()
|
||||
_set_title("Invert")
|
||||
_create_row("Value",0.0,0.0,false,0,0)
|
||||
_create_row("On",true,null,true,true,0)
|
||||
_update_visuals()
|
||||
|
||||
func _process(delta):
|
||||
super._process(delta)
|
||||
for key in rows:
|
||||
rows[key]["output"] = rows[key]["input"]
|
||||
apply_pick_values()
|
||||
|
||||
if rows["On"]["output"] == true:
|
||||
rows["Value"]["output"] = 1 - rows["Value"]["input"]
|
||||
else:
|
||||
rows["Value"]["output"] = rows["Value"]["input"]
|
||||
_send_input("Value")
|
1
Scripts/GL_Invert.gd.uid
Normal file
1
Scripts/GL_Invert.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://8acchs5jv70x
|
|
@ -10,6 +10,7 @@ var special_condition : String
|
|||
|
||||
func _ready():
|
||||
loadNodeRow = preload("res://Scenes/Nodes/Node Row.tscn")
|
||||
(get_node("Margins").get_node("Holder").get_node("Title").get_node("Exit Button") as Button).connect("button_down",self.delete_whole_node)
|
||||
|
||||
func _process(delta):
|
||||
if dragging:
|
||||
|
@ -104,7 +105,7 @@ func _set_inout_type(label:Button, value):
|
|||
label.visible = false
|
||||
|
||||
func _set_title(name:String):
|
||||
(get_node("Margins").get_node("Holder").get_node("Title") as Label).text = name
|
||||
(get_node("Margins").get_node("Holder").get_node("Title").get_node("Title Label") as Label).text = name
|
||||
|
||||
func _create_row(name:String,input,output,picker:bool,pickDefault,pickFloatMaximum:float):
|
||||
if rows.has(name):
|
||||
|
@ -191,3 +192,10 @@ func apply_pick_values():
|
|||
for key in rows:
|
||||
if rows[key]["picker"] == true && rows[key]["backConnected"] == false:
|
||||
rows[key]["input"] = rows[key]["pickValue"]
|
||||
|
||||
func delete_whole_node():
|
||||
for node in get_tree().get_nodes_in_group("Outputs"):
|
||||
if node is GL_Node_Point:
|
||||
for key in rows:
|
||||
node.mainNode.destroy_connection(self,key)
|
||||
queue_free()
|
||||
|
|
|
@ -1,15 +1,67 @@
|
|||
extends Control
|
||||
|
||||
var holder: Control
|
||||
var is_panning: bool = false
|
||||
var last_mouse_pos: Vector2
|
||||
var is_hovered: bool = false
|
||||
|
||||
func _ready():
|
||||
visible = false
|
||||
holder = get_node("Holder")
|
||||
|
||||
connect("mouse_entered", _on_mouse_entered)
|
||||
connect("mouse_exited", _on_mouse_exited)
|
||||
|
||||
func _on_mouse_entered():
|
||||
is_hovered = true
|
||||
|
||||
func _on_mouse_exited():
|
||||
is_hovered = false
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event is InputEventKey and event.pressed:
|
||||
match(event.keycode):
|
||||
match event.keycode:
|
||||
KEY_ESCAPE:
|
||||
visible = not visible
|
||||
|
||||
if visible:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
else:
|
||||
|
||||
if not visible:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
return
|
||||
else:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
|
||||
if not is_hovered:
|
||||
return
|
||||
|
||||
if event is InputEventMouseButton:
|
||||
if event.button_index == MOUSE_BUTTON_MIDDLE:
|
||||
is_panning = event.pressed
|
||||
if is_panning:
|
||||
last_mouse_pos = event.position
|
||||
|
||||
if event.pressed and (event.button_index == MOUSE_BUTTON_WHEEL_UP or event.button_index == MOUSE_BUTTON_WHEEL_DOWN):
|
||||
var mouse_pos = event.position
|
||||
var global_xform = holder.get_global_transform()
|
||||
var local_mouse_pos = global_xform.affine_inverse().basis_xform(mouse_pos)
|
||||
|
||||
var zoom_factor := 1.0
|
||||
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
|
||||
zoom_factor = 1.1
|
||||
elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
|
||||
zoom_factor = 0.9
|
||||
|
||||
# Apply scale
|
||||
holder.scale *= zoom_factor
|
||||
|
||||
# Recalculate the new local position of the mouse after scaling
|
||||
var new_global_xform = holder.get_global_transform()
|
||||
var new_local_mouse_pos = new_global_xform.affine_inverse().basis_xform(mouse_pos)
|
||||
|
||||
# Calculate offset to shift so the mouse stays “anchored”
|
||||
var delta = (new_local_mouse_pos - local_mouse_pos)
|
||||
holder.position += delta * holder.scale
|
||||
|
||||
if event is InputEventMouseMotion and is_panning:
|
||||
var delta = event.position - last_mouse_pos
|
||||
holder.position += delta
|
||||
last_mouse_pos = event.position
|
||||
|
|
|
@ -81,6 +81,11 @@ func _start_drag():
|
|||
dragging = true
|
||||
lastToDrag = true
|
||||
|
||||
func _detatch():
|
||||
for node in get_tree().get_nodes_in_group("Outputs"):
|
||||
if node is GL_Node_Point:
|
||||
node._node_disconnect(mainNode,valueName)
|
||||
|
||||
func mouse_enter():
|
||||
mouseInside = true
|
||||
|
||||
|
@ -101,3 +106,6 @@ func _node_connect(node:GL_Node,inputValue:String):
|
|||
return
|
||||
mainNode._create_connection(node,inputValue,valueName)
|
||||
update_lines()
|
||||
|
||||
func _node_disconnect(node: GL_Node, outputValue: String):
|
||||
mainNode.destroy_connection(node,outputValue)
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
extends GL_Node
|
||||
|
||||
var timer:float
|
||||
const sampleRate = 0.05
|
||||
var recording:Dictionary
|
||||
var oldTime:float = 0.000030042452 #sorta random number
|
||||
var time:float = 0
|
||||
var rng:RandomNumberGenerator
|
||||
var oldRecording:bool
|
||||
var defaultValues:Dictionary
|
||||
|
||||
func _ready():
|
||||
super._ready()
|
||||
|
@ -9,12 +15,130 @@ func _ready():
|
|||
_create_row("Recording",false,null,true,false,0)
|
||||
_create_row("Current Time",0.0,0.0,false,0,0)
|
||||
_update_visuals()
|
||||
rng = RandomNumberGenerator.new()
|
||||
rng.seed = Time.get_ticks_msec()
|
||||
pass
|
||||
|
||||
func _process(delta):
|
||||
super._process(delta)
|
||||
for key in rows:
|
||||
rows[key]["output"] = rows[key]["input"]
|
||||
apply_pick_values()
|
||||
for key in rows:
|
||||
rows[key]["output"] = rows[key]["input"]
|
||||
time = float(rows["Current Time"]["output"])
|
||||
_traverse()
|
||||
var recordBool = rows["Recording"]["input"]
|
||||
if recordBool == true:
|
||||
if recordBool != oldRecording || time == 0:
|
||||
for key in rows:
|
||||
defaultValues[key] = rows[key]["output"]
|
||||
if timer <= 0:
|
||||
timer = sampleRate
|
||||
_record()
|
||||
timer -= delta
|
||||
oldTime = time
|
||||
oldRecording = recordBool
|
||||
for key in rows:
|
||||
_send_input(key)
|
||||
|
||||
func _traverse():
|
||||
if time == oldTime:
|
||||
return
|
||||
for key in recording:
|
||||
if key == "Recording" || key == "Current Time":
|
||||
continue
|
||||
if recording[key]["start"] == null || recording[key]["end"] == null:
|
||||
continue
|
||||
if recording[key]["current"] == null:
|
||||
recording[key]["current"] = recording[key]["start"]
|
||||
if time < oldTime: #rewind
|
||||
continue #fix pls
|
||||
else: #forward
|
||||
var current = recording[key]["current"]
|
||||
var newCurrent = recursive_traverse_forward(key,current)
|
||||
if current != newCurrent:
|
||||
recording[key]["lastUsed"] = current
|
||||
recording[key]["current"] = newCurrent
|
||||
if recording[key]["lastUsed"] != null && recording[key]["current"] != recording[key]["end"]:
|
||||
rows[key]["output"] = lerp(recording[key]["list"][recording[key]["lastUsed"]]["value"],recording[key]["list"][recording[key]["current"]]["value"],remap_time(time,recording[key]["list"][recording[key]["lastUsed"]]["time"],recording[key]["list"][recording[key]["current"]]["time"]))
|
||||
func remap_time(value: float, start: float, end: float) -> float:
|
||||
if start == end:
|
||||
return 0.0
|
||||
return (value - start) / (end - start)
|
||||
|
||||
|
||||
func recursive_traverse_forward(key:String,current:String) -> String:
|
||||
var dict = recording[key]["list"][current]
|
||||
if dict["time"] > time:
|
||||
if dict["back"] != null:
|
||||
return recursive_traverse_forward(key,dict["back"])
|
||||
if dict["time"] <= time:
|
||||
if dict["forward"] != null && recording[key]["list"][dict["forward"]]["time"] <= time:
|
||||
return recursive_traverse_forward(key,dict["forward"])
|
||||
return current
|
||||
|
||||
func _record():
|
||||
for key in recording:
|
||||
if key == "Recording" || key == "Current Time":
|
||||
continue
|
||||
if defaultValues[key] == rows[key]["input"]:
|
||||
continue
|
||||
elif defaultValues[key] != null:
|
||||
defaultValues[key] == null #is this gonna bite me back if I allow null values to pass
|
||||
var currentSave = recording[key]["current"]
|
||||
if currentSave == null:
|
||||
var id = "ID_" + str(rng.randi())
|
||||
recording[key]["list"][id] = {
|
||||
"value":rows[key]["input"],
|
||||
"time":time,
|
||||
"back":null,
|
||||
"forward":null
|
||||
}
|
||||
recording[key]["current"] = id
|
||||
recording[key]["start"] = id
|
||||
recording[key]["end"] = id
|
||||
rows[key]["output"] = recording[key]["list"][id]["value"]
|
||||
continue
|
||||
else:
|
||||
if time < oldTime: #rewind
|
||||
continue #fix pls
|
||||
else: #forward
|
||||
if recording[key]["list"][currentSave]["time"] == time: #paused recording
|
||||
recording[key]["list"][currentSave]["value"] = rows[key]["input"]
|
||||
rows[key]["output"] = rows[key]["input"]
|
||||
elif recording[key]["list"][currentSave]["time"] < time:
|
||||
var id = "ID_" + str(rng.randi())
|
||||
if recording[key]["list"][currentSave]["forward"] == null:
|
||||
recording[key]["list"][id] = {
|
||||
"value":rows[key]["input"],
|
||||
"time":time,
|
||||
"back":currentSave,
|
||||
"forward":null
|
||||
}
|
||||
recording[key]["list"][currentSave]["forward"] = id
|
||||
recording[key]["current"] = id
|
||||
recording[key]["end"] = id
|
||||
else:
|
||||
var forward = recording[key]["list"][currentSave]["forward"]
|
||||
recording[key]["list"][id] = {
|
||||
"value":rows[key]["input"],
|
||||
"time":time,
|
||||
"back":currentSave,
|
||||
"forward":forward
|
||||
}
|
||||
recording[key]["list"][forward]["back"] = id
|
||||
recording[key]["list"][currentSave]["forward"] = id
|
||||
recording[key]["current"] = id
|
||||
rows[key]["output"] = recording[key]["list"][id]["value"]
|
||||
#else: Somethings messed up and you need to re-traverse
|
||||
|
||||
continue
|
||||
pass
|
||||
|
||||
|
||||
func _create_row(name:String,input,output,picker:bool,pickDefault,pickFloatMaximum:float):
|
||||
super._create_row(name,input,output,picker,pickDefault,pickFloatMaximum)
|
||||
if name == "Recording" || name == "Current Time":
|
||||
return
|
||||
for key in rows:
|
||||
if !recording.has(key):
|
||||
recording[key] = {"start":null,"end":null,"current":null,"list":{},"lastUsed":null}
|
||||
|
|
|
@ -3,7 +3,10 @@ extends Control
|
|||
var rows : Dictionary = {
|
||||
"CyberChuck":1,
|
||||
"CyberHelen":1,
|
||||
"Bool":1,
|
||||
"Color":1,
|
||||
"Float":1,
|
||||
"Invert":1,
|
||||
"Keystrokes":1,
|
||||
"Keystroke Ramp":1,
|
||||
"Lerp":1,
|
||||
|
@ -52,7 +55,7 @@ func _set_rows():
|
|||
|
||||
func _create_node(name:String):
|
||||
var node = load("res://Scenes/Node Types/" + name + ".tscn").instantiate()
|
||||
get_parent().add_child(node)
|
||||
get_parent().get_node("Holder").add_child(node)
|
||||
node = (node as Control).get_child(0) as GL_Node
|
||||
node.position = lastMousePos
|
||||
node._create_uuid()
|
||||
|
|
|
@ -10,7 +10,7 @@ func _ready():
|
|||
func _sent_signals(signal_ID:String,the_signal):
|
||||
match(signal_ID):
|
||||
"intensity":
|
||||
light.light_energy = the_signal * energyMultiplier
|
||||
light.light_energy = max(the_signal,0) * energyMultiplier
|
||||
"color":
|
||||
if canChangeColor:
|
||||
light.light_color = the_signal
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue