Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public void UpdateTexture()
return;
}

var noise = inputNoise.OutputConnection.GetValue<LibNoise.Generator.Perlin>();
var noise = inputNoise.Outputs[0].GetValue<LibNoise.Generator.Perlin>();

for (int x = 0; x < texPreview.width; ++x) {
for (int y = 0; y < texPreview.height; ++y) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ private bool isMouseOverInputStartConn()
{
Action<NodeInput> startConnFromInput = (NodeInput input) =>
{
window.state.selectedOutput = input.OutputConnection;
window.state.selectedOutput = input.Outputs[0];

// Detach this input if we are starting a connection action from the input.
if (window.state.selectedOutput != null) {
Expand Down
14 changes: 11 additions & 3 deletions UNEB_Project_Root/Assets/UNEB/Editor/Actions/CreateConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,16 @@ public override bool OnActionEnd()
// Make the connection.
if (_input != null && _output.CanConnectInput(_input)) {

cacheOldConnections();
disconnectOldConnections();
if (!_output.bCanHaveMultipleConnections)
{
_output.RemoveAll();
}

if (!_input.bCanHaveMultipleConnections) {
cacheOldConnections();
disconnectOldConnections();
}

return _output.Add(_input);
}

Expand All @@ -86,7 +94,7 @@ private void cacheOldConnections()
{
// Check if the receiving node was already connected.
if (_input != null && _input.HasOutputConnected()) {
_oldConnectedOutput = _input.OutputConnection;
_oldConnectedOutput = _input.Outputs[0];
}

// Check if the origin node already had inputs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public override void Do()
foreach (var input in _nodeRemoved.Inputs) {

if (input.HasOutputConnected()) {
_oldConnectedOutputs.Add(new InputToOutputPair(input, input.OutputConnection));
_oldConnectedOutputs.Add(new InputToOutputPair(input, input.Outputs[0]));
}
}

Expand Down Expand Up @@ -90,7 +90,8 @@ private void disconnectOldConnections()
foreach (var input in _nodeRemoved.Inputs) {

if (input.HasOutputConnected()) {
input.OutputConnection.Remove(input);
//input.Outputs.Remove(input);
input.Outputs.Clear();
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class RemoveConnection : UndoableAction
public override void Do()
{
_input = manager.window.state.selectedInput;
_output = _input.OutputConnection;
_output = _input.Outputs[0];

_output.Remove(_input);

Expand Down
8 changes: 4 additions & 4 deletions UNEB_Project_Root/Assets/UNEB/Node.cs
Original file line number Diff line number Diff line change
Expand Up @@ -160,18 +160,18 @@ protected virtual void onBodyGuiInternal()
EditorGUILayout.EndVertical();
}

public NodeInput AddInput(string name = "input")
public NodeInput AddInput(string name = "input", bool multipleConnections = false)
{
var input = NodeInput.Create(this);
var input = NodeInput.Create(this, multipleConnections);
input.name = name;
_inputs.Add(input);

return input;
}

public NodeOutput AddOutput(string name = "output")
public NodeOutput AddOutput(string name = "output", bool multipleConnections = false)
{
var output = NodeOutput.Create(this);
var output = NodeOutput.Create(this, multipleConnections);
output.name = name;
_outputs.Add(output);

Expand Down
66 changes: 32 additions & 34 deletions UNEB_Project_Root/Assets/UNEB/NodeInput.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@

using System.Collections.Generic;
using System.Linq;
using UnityEngine;

Expand All @@ -7,14 +8,18 @@ namespace UNEB
public class NodeInput : NodeConnection
{
[SerializeField]
private NodeOutput _connectedOutput;
private bool _bCanHaveMultipleConnections;

[SerializeField]
private List<NodeOutput> _outputs = new List<NodeOutput>();

private GUIStyle _style;

public override void Init(Node parent)
public virtual void Init(Node parent, bool multipleConnections = true)
{
base.Init(parent);
name = "input";
_bCanHaveMultipleConnections = multipleConnections;
}

/// <summary>
Expand All @@ -23,49 +28,37 @@ public override void Init(Node parent)
/// <param name="output"></param>
internal void Connect(NodeOutput output)
{
if (!HasOutputConnected()) {
_connectedOutput = output;
}

else {

const string msg =
"Connot Connect." +
"The Input has an output connected and should be disconnected first, " +
"before trying to connect to some output.";

Debug.LogWarning(msg);
}
if (!_outputs.Contains(output))
_outputs.Add(output);
}

/// <summary>
/// Should only be called by NodeOutput.
/// </summary>
internal void Disconnect()
internal void Disconnect(NodeOutput output)
{
if (_connectedOutput.Inputs.Contains(this)) {

const string msg =
"Cannot disconnect. " +
"The Output should remove this Input from its input list first, " +
"before calling Disconnect().";

Debug.LogWarning(msg);
}

else {
_connectedOutput = null;
}
if (_outputs.Contains(output))
_outputs.Remove(output);
}

public bool HasOutputConnected()
{
return _connectedOutput != null;
return _outputs.Count > 0;
}

public NodeOutput OutputConnection
public List<NodeOutput> Outputs
{
get { return _connectedOutput; }
get { return _outputs; }
}

public int OutputCount
{
get { return _outputs.Count; }
}

public NodeOutput GetOutput(int index)
{
return _outputs[index];
}

public override GUIStyle GetStyle()
Expand All @@ -92,10 +85,15 @@ public override float GetNodeAnchor()
return parentNode.bodyRect.xMin;
}

public static NodeInput Create(Node parent)
public bool bCanHaveMultipleConnections
{
get { return _bCanHaveMultipleConnections; }
}

public static NodeInput Create(Node parent, bool multipleConnections = false)
{
var input = ScriptableObject.CreateInstance<NodeInput>();
input.Init(parent);
input.Init(parent, multipleConnections);

NodeConnection.OnConnectionCreated(input);
return input;
Expand Down
10 changes: 5 additions & 5 deletions UNEB_Project_Root/Assets/UNEB/NodeOutput.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public virtual void Init(Node parent, bool multipleConnections = true)
_bCanHaveMultipleConnections = multipleConnections;
}

public IEnumerable<NodeInput> Inputs
public List<NodeInput> Inputs
{
get { return _inputs; }
}
Expand Down Expand Up @@ -51,7 +51,7 @@ public bool Add(NodeInput input)
// This test is not inside the CanConnectInput() because
// an action can remove the old connections automatically to make it
// easier for the user to change connections between nodes.
if (input.HasOutputConnected()) {
if (input.HasOutputConnected() && !input.bCanHaveMultipleConnections) {

// Changes to the inputs need to be properly handled by the Action system,
// so it works with undo.
Expand Down Expand Up @@ -86,7 +86,7 @@ public bool CanConnectInput(NodeInput input)
}

// Avoid connecting when it is already connected.
if (input.OutputConnection == this) {
if (input.Outputs.Contains(this)) {
Debug.LogWarning("Already Connected");
return false;
}
Expand All @@ -98,7 +98,7 @@ public void Remove(NodeInput input)
{
if (_inputs.Remove(input)) {
parentNode.OnInputConnectionRemoved(input);
input.Disconnect();
input.Disconnect(this);
}
}

Expand All @@ -112,7 +112,7 @@ public void RemoveAll()

foreach (NodeInput input in inputs) {
parentNode.OnInputConnectionRemoved(input);
input.Disconnect();
input.Disconnect(this);
}
}

Expand Down