summaryrefslogtreecommitdiff
path: root/Other/NodeEditorExamples/Assets/UNEB
diff options
context:
space:
mode:
Diffstat (limited to 'Other/NodeEditorExamples/Assets/UNEB')
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/3rdParty.meta9
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework.meta9
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/GUIScaleUtility.cs251
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/GUIScaleUtility.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/License.txt23
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/License.txt.meta8
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor.meta9
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions.meta9
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionBase.cs23
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionBase.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionManager.cs169
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionManager.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionTriggerSystem.cs456
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionTriggerSystem.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateConnection.cs106
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateConnection.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateNodeAction.cs55
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateNodeAction.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DeleteNodeAction.cs128
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DeleteNodeAction.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DragNode.cs42
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DragNode.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/MultiStageAction.cs18
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/MultiStageAction.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/RemoveConnection.cs32
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/RemoveConnection.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/UndoableAction.cs12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/UndoableAction.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditor.cs665
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditor.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditorWindow.cs320
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditorWindow.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/SaveManager.cs473
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Editor/SaveManager.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/FlowTraversal.cs12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/FlowTraversal.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Node.cs305
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Node.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/NodeConnection.cs91
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/NodeConnection.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/NodeEditorState.cs18
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/NodeEditorState.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/NodeGraph.cs57
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/NodeGraph.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/NodeInput.cs114
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/NodeInput.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/NodeOutput.cs157
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/NodeOutput.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Nodes.meta9
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Nodes/BasicNode.cs39
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Nodes/BasicNode.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/TempGraphsUNEB.meta9
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/TempGraphsUNEB/TempNodeGraphUNEB-18000.asset6515
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/TempGraphsUNEB/TempNodeGraphUNEB-18000.asset.meta9
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/UNEB Textures.meta9
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Circle.pngbin0 -> 612 bytes
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Circle.png.meta204
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Grid.pngbin0 -> 810 bytes
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Grid.png.meta76
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Square.pngbin0 -> 175 bytes
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Square.png.meta76
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility.meta9
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility/ColorExtensions.cs13
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility/ColorExtensions.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility/FiniteStack.cs78
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility/FiniteStack.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility/Pair.cs20
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility/Pair.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility/StateMachine.cs300
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility/StateMachine.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility/StringExtensions.cs29
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility/StringExtensions.cs.meta12
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility/TextureLib.cs191
-rw-r--r--Other/NodeEditorExamples/Assets/UNEB/Utility/TextureLib.cs.meta12
74 files changed, 11493 insertions, 0 deletions
diff --git a/Other/NodeEditorExamples/Assets/UNEB/3rdParty.meta b/Other/NodeEditorExamples/Assets/UNEB/3rdParty.meta
new file mode 100644
index 00000000..5a1ce4d5
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/3rdParty.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 2324764fc9139ac44a4bcb1c29af8964
+folderAsset: yes
+timeCreated: 1501783373
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework.meta b/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework.meta
new file mode 100644
index 00000000..66035e2c
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: adab484ec4e6ab246be215991707122b
+folderAsset: yes
+timeCreated: 1491889781
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/GUIScaleUtility.cs b/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/GUIScaleUtility.cs
new file mode 100644
index 00000000..a0e257b8
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/GUIScaleUtility.cs
@@ -0,0 +1,251 @@
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+using System;
+using System.Reflection;
+
+namespace NodeEditorFramework.Utilities
+{
+
+ public static class GUIScaleUtility
+ {
+ // General
+ private static bool compabilityMode;
+ private static bool initiated;
+
+ // Delegates to the reflected methods
+ private static Func<Rect> GetTopRectDelegate;
+ private static Func<Rect> topmostRectDelegate;
+
+ // Delegate accessors
+ public static Rect getTopRect { get { return (Rect)GetTopRectDelegate.Invoke(); } }
+
+ // Rect stack for manipulating groups
+ public static List<Rect> currentRectStack { get; private set; }
+ private static List<List<Rect>> rectStackGroups;
+
+ // Matrices stack
+ private static List<Matrix4x4> GUIMatrices;
+ private static List<bool> adjustedGUILayout;
+
+ #region Init
+
+ public static void CheckInit()
+ {
+ if (!initiated)
+ Init();
+ }
+
+ public static void Init()
+ {
+ // Fetch rect acessors using Reflection
+ Assembly UnityEngine = Assembly.GetAssembly(typeof(UnityEngine.GUI));
+ Type GUIClipType = UnityEngine.GetType("UnityEngine.GUIClip", true);
+
+ PropertyInfo topmostRect = GUIClipType.GetProperty("topmostRect", BindingFlags.Static | BindingFlags.Public);
+ MethodInfo GetTopRect = GUIClipType.GetMethod("GetTopRect", BindingFlags.Static | BindingFlags.NonPublic);
+ MethodInfo ClipRect = GUIClipType.GetMethod("Clip", BindingFlags.Static | BindingFlags.Public, Type.DefaultBinder, new Type[] { typeof(Rect) }, new ParameterModifier[] { });
+
+ if (GUIClipType == null || topmostRect == null || GetTopRect == null || ClipRect == null) {
+ Debug.LogWarning("GUIScaleUtility cannot run on this system! Compability mode enabled. For you that means you're not able to use the Node Editor inside more than one group:( Please PM me (Seneral @UnityForums) so I can figure out what causes this! Thanks!");
+ Debug.LogWarning((GUIClipType == null ? "GUIClipType is Null, " : "") + (topmostRect == null ? "topmostRect is Null, " : "") + (GetTopRect == null ? "GetTopRect is Null, " : "") + (ClipRect == null ? "ClipRect is Null, " : ""));
+ compabilityMode = true;
+ initiated = true;
+ return;
+ }
+
+ // Create simple acessor delegates
+ GetTopRectDelegate = (Func<Rect>)Delegate.CreateDelegate(typeof(Func<Rect>), GetTopRect);
+ topmostRectDelegate = (Func<Rect>)Delegate.CreateDelegate(typeof(Func<Rect>), topmostRect.GetGetMethod());
+
+ if (GetTopRectDelegate == null || topmostRectDelegate == null) {
+ Debug.LogWarning("GUIScaleUtility cannot run on this system! Compability mode enabled. For you that means you're not able to use the Node Editor inside more than one group:( Please PM me (Seneral @UnityForums) so I can figure out what causes this! Thanks!");
+ Debug.LogWarning((GUIClipType == null ? "GUIClipType is Null, " : "") + (topmostRect == null ? "topmostRect is Null, " : "") + (GetTopRect == null ? "GetTopRect is Null, " : "") + (ClipRect == null ? "ClipRect is Null, " : ""));
+ compabilityMode = true;
+ initiated = true;
+ return;
+ }
+
+ // As we can call Begin/Ends inside another, we need to save their states hierarchial in Lists (not Stack, as we need to iterate over them!):
+ currentRectStack = new List<Rect>();
+ rectStackGroups = new List<List<Rect>>();
+ GUIMatrices = new List<Matrix4x4>();
+ adjustedGUILayout = new List<bool>();
+
+ initiated = true;
+ }
+
+ #endregion
+
+ #region Scale Area
+
+ /// <summary>
+ /// Begins a scaled local area.
+ /// Returns vector to offset GUI controls with to account for zooming to the pivot.
+ /// Using adjustGUILayout does that automatically for GUILayout rects. Theoretically can be nested!
+ /// </summary>
+ public static Vector2 BeginScale(ref Rect rect, Vector2 zoomPivot, float zoom, bool adjustGUILayout)
+ {
+ Rect screenRect;
+ if (compabilityMode) {
+
+ // In compability mode, we will assume only one top group and do everything manually, not using reflected calls (-> practically blind)
+ GUI.EndGroup();
+ screenRect = rect;
+ }
+
+ else {
+
+ // If it's supported, we take the completely generic way using reflected calls
+ GUIScaleUtility.BeginNoClip();
+ screenRect = GUIScaleUtility.GUIToScaledSpace(rect);
+ }
+
+ rect = Scale(screenRect, screenRect.position + zoomPivot, new Vector2(zoom, zoom));
+
+ // Now continue drawing using the new clipping group
+ GUI.BeginGroup(rect);
+ rect.position = Vector2.zero; // Adjust because we entered the new group
+
+ // Because I currently found no way to actually scale to a custom pivot rather than (0, 0),
+ // we'll make use of a cheat and just offset it accordingly to let it appear as if it would scroll to the center
+ // Note, due to that, controls not adjusted are still scaled to (0, 0)
+ Vector2 zoomPosAdjust = rect.center - screenRect.size / 2 + zoomPivot;
+
+ // For GUILayout, we can make this adjustment here if desired
+ adjustedGUILayout.Add(adjustGUILayout);
+ if (adjustGUILayout) {
+ GUILayout.BeginHorizontal();
+ GUILayout.Space(rect.center.x - screenRect.size.x + zoomPivot.x);
+ GUILayout.BeginVertical();
+ GUILayout.Space(rect.center.y - screenRect.size.y + zoomPivot.y);
+ }
+
+ // Take a matrix backup to restore back later on
+ GUIMatrices.Add(GUI.matrix);
+
+ // Scale GUI.matrix. After that we have the correct clipping group again.
+ GUIUtility.ScaleAroundPivot(new Vector2(1 / zoom, 1 / zoom), zoomPosAdjust);
+
+ return zoomPosAdjust;
+ }
+
+ /// <summary>
+ /// Ends a scale region previously opened with BeginScale
+ /// </summary>
+ public static void EndScale()
+ {
+ // Set last matrix and clipping group
+ if (GUIMatrices.Count == 0 || adjustedGUILayout.Count == 0)
+ throw new UnityException("GUIScaleUtility: You are ending more scale regions than you are beginning!");
+
+ GUI.matrix = GUIMatrices[GUIMatrices.Count - 1];
+ GUIMatrices.RemoveAt(GUIMatrices.Count - 1);
+
+ // End GUILayout zoomPosAdjustment
+ if (adjustedGUILayout[adjustedGUILayout.Count - 1]) {
+
+ GUILayout.EndVertical();
+ GUILayout.EndHorizontal();
+ }
+ adjustedGUILayout.RemoveAt(adjustedGUILayout.Count - 1);
+
+ // End the scaled group
+ GUI.EndGroup();
+
+ if (compabilityMode) {
+
+ // In compability mode, we don't know the previous group rect, but as we cannot use top groups there either way, we restore the screen group
+ GUI.BeginClip(new Rect(0, 23, Screen.width, Screen.height - 23));
+ }
+
+ else {
+
+ // Else, restore the clips (groups)
+ GUIScaleUtility.RestoreClips();
+ }
+ }
+
+ #endregion
+
+ #region Clips Hierarchy
+
+ /// <summary>
+ /// Begins a field without groups. They should be restored using RestoreClips. Can be nested!
+ /// </summary>
+ public static void BeginNoClip()
+ {
+ // Record and close all clips one by one, from bottom to top, until we hit the 'origin'
+ List<Rect> rectStackGroup = new List<Rect>();
+ Rect topMostClip = getTopRect;
+ while (topMostClip != new Rect(-10000, -10000, 40000, 40000)) {
+ rectStackGroup.Add(topMostClip);
+ GUI.EndClip();
+ topMostClip = getTopRect;
+ }
+ // Store the clips appropriately
+ rectStackGroup.Reverse();
+ rectStackGroups.Add(rectStackGroup);
+ currentRectStack.AddRange(rectStackGroup);
+ }
+
+ /// <summary>
+ /// Restores the clips removed in BeginNoClip or MoveClipsUp
+ /// </summary>
+ public static void RestoreClips()
+ {
+ if (rectStackGroups.Count == 0) {
+ Debug.LogError("GUIClipHierarchy: BeginNoClip/MoveClipsUp - RestoreClips count not balanced!");
+ return;
+ }
+
+ // Read and restore clips one by one, from top to bottom
+ List<Rect> rectStackGroup = rectStackGroups[rectStackGroups.Count - 1];
+ for (int clipCnt = 0; clipCnt < rectStackGroup.Count; clipCnt++) {
+ GUI.BeginClip(rectStackGroup[clipCnt]);
+ currentRectStack.RemoveAt(currentRectStack.Count - 1);
+ }
+ rectStackGroups.RemoveAt(rectStackGroups.Count - 1);
+ }
+
+ #endregion
+
+ #region Space Transformations
+
+ /// <summary>
+ /// Scales the rect around the pivot with scale
+ /// </summary>
+ public static Rect Scale(Rect rect, Vector2 pivot, Vector2 scale)
+ {
+ rect.position = Vector2.Scale(rect.position - pivot, scale) + pivot;
+ rect.size = Vector2.Scale(rect.size, scale);
+ return rect;
+ }
+
+ public static Vector2 GUIToScaledSpace(Vector2 guiPosition)
+ {
+ if (rectStackGroups == null || rectStackGroups.Count == 0)
+ return guiPosition;
+ // Iterate through the clips and add positions ontop
+ List<Rect> rectStackGroup = rectStackGroups[rectStackGroups.Count - 1];
+ for (int clipCnt = 0; clipCnt < rectStackGroup.Count; clipCnt++)
+ guiPosition += rectStackGroup[clipCnt].position;
+ return guiPosition;
+ }
+
+ /// <summary>
+ /// Transforms the rect to the new space aquired with BeginNoClip or MoveClipsUp.
+ /// DOES NOT scale the rect, only offsets it!
+ /// It's way faster to call GUIToScreenSpace before modifying the space though!
+ /// </summary>
+ public static Rect GUIToScaledSpace(Rect guiRect)
+ {
+ if (rectStackGroups == null || rectStackGroups.Count == 0)
+ return guiRect;
+ guiRect.position = GUIToScaledSpace(guiRect.position);
+ return guiRect;
+ }
+
+ #endregion
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/GUIScaleUtility.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/GUIScaleUtility.cs.meta
new file mode 100644
index 00000000..239f91dd
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/GUIScaleUtility.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 1531560365f0bfb45881cc297952a854
+timeCreated: 1491887635
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/License.txt b/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/License.txt
new file mode 100644
index 00000000..6a3073a6
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/License.txt
@@ -0,0 +1,23 @@
+# Software license
+
+The MIT License (MIT)
+
+Copyright (c) 2015 Baste Nesse Buanes
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE. \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/License.txt.meta b/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/License.txt.meta
new file mode 100644
index 00000000..1379c6aa
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/3rdParty/NodeEditorFramework/License.txt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d3b89e570c0baf842b5ea1792547f91d
+timeCreated: 1491887832
+licenseType: Free
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor.meta
new file mode 100644
index 00000000..191b5f5a
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 8b9fa01c72d37c245b1a2eb96937972a
+folderAsset: yes
+timeCreated: 1501781446
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions.meta
new file mode 100644
index 00000000..f7f8ff4e
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 5357f731dedd7cc468c40f66bcd4487f
+folderAsset: yes
+timeCreated: 1501781574
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionBase.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionBase.cs
new file mode 100644
index 00000000..426c8a50
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionBase.cs
@@ -0,0 +1,23 @@
+
+namespace UNEB
+{
+ public abstract class ActionBase
+ {
+
+ public ActionManager manager;
+
+ /// <summary>
+ /// Can be used to check if the action is a valid state for furthur execution.
+ /// For example, we only want to run delete node if a node is selected for deletion.
+ /// </summary>
+ /// <returns></returns>
+ public virtual bool Init() { return true; }
+
+ public abstract void Do();
+
+ /// <summary>
+ /// Called when the action is removed from the undo/redo buffers.
+ /// </summary>
+ public virtual void OnDestroy() { }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionBase.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionBase.cs.meta
new file mode 100644
index 00000000..eb9d005c
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionBase.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5dfa0b77744c2bc4eb973c5114f5de79
+timeCreated: 1501781587
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionManager.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionManager.cs
new file mode 100644
index 00000000..b0450b46
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionManager.cs
@@ -0,0 +1,169 @@
+
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UNEB.Utility;
+
+namespace UNEB
+{
+ /// <summary>
+ /// Handles execution of actions, undo, and redo.
+ /// </summary>
+ public class ActionManager
+ {
+ private NodeEditorWindow _window;
+
+ private FiniteStack<UndoableAction> _undoStack;
+ private Stack<UndoableAction> _redoStack;
+
+ // Caches the current multi-stage action that is currently executing.
+ private MultiStageAction _activeMultiAction = null;
+
+ public event Action OnUndo;
+ public event Action OnRedo;
+
+ public ActionManager(NodeEditorWindow w)
+ {
+ _undoStack = new FiniteStack<UndoableAction>(100);
+ _redoStack = new Stack<UndoableAction>();
+
+ _window = w;
+
+ // Makes sure that the action cleans up after itself
+ // when it is removed from the undo buffer.
+ _undoStack.OnRemoveBottomItem += (action) =>
+ {
+ action.OnDestroy();
+ };
+ }
+
+ public void Update()
+ {
+ if (IsRunningAction) {
+ _activeMultiAction.Do();
+ }
+ }
+
+ public bool IsRunningAction
+ {
+ get { return _activeMultiAction != null; }
+ }
+
+ /// <summary>
+ /// Runs an action and stores it in the undo stack.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ public void RunUndoableAction<T>() where T : UndoableAction, new()
+ {
+ T action = new T();
+ action.manager = this;
+
+ if (action.Init()) {
+
+ clearRedoStack();
+ _undoStack.Push(action);
+ action.Do();
+ }
+ }
+
+ /// <summary>
+ /// Starts a multi stage action but does not record it in the undo stack.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ public void StartMultiStageAction<T>() where T : MultiStageAction, new()
+ {
+ // Only run 1 multi-action at a time.
+ if (_activeMultiAction != null) {
+ return;
+ }
+
+ T action = new T();
+ action.manager = this;
+
+ if (action.Init()) {
+ _activeMultiAction = action;
+ _activeMultiAction.OnActionStart();
+ }
+ }
+
+ /// <summary>
+ /// Records the multi-stage action in the undo stack.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="action"></param>
+ public void FinishMultiStageAction()
+ {
+ if (_activeMultiAction == null) {
+ return;
+ }
+
+ // We check if the action ended properly so it can be stored in undo.
+ if (_activeMultiAction.OnActionEnd()) {
+
+ clearRedoStack();
+ _undoStack.Push(_activeMultiAction);
+ }
+
+ // There is no longer an active multi-stage action.
+ _activeMultiAction = null;
+ }
+
+ public void UndoAction()
+ {
+ if (_undoStack.Count != 0) {
+
+ var action = _undoStack.Pop();
+ _redoStack.Push(action);
+
+ action.Undo();
+
+ if (OnUndo != null)
+ OnUndo();
+ }
+ }
+
+ public void RedoAction()
+ {
+ if (_redoStack.Count != 0) {
+
+ var action = _redoStack.Pop();
+ _undoStack.Push(action);
+
+ action.Redo();
+
+ if (OnRedo != null)
+ OnRedo();
+ }
+ }
+
+ public void Reset()
+ {
+ _activeMultiAction = null;
+ clearUndoStack();
+ clearRedoStack();
+ }
+
+ private void clearRedoStack()
+ {
+ foreach (var action in _redoStack) {
+ action.OnDestroy();
+ }
+
+ _redoStack.Clear();
+ }
+
+ private void clearUndoStack()
+ {
+ foreach (var action in _undoStack) {
+ action.OnDestroy();
+ }
+
+ _undoStack.Clear();
+ }
+
+ public NodeEditorWindow window
+ {
+ get { return _window; }
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionManager.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionManager.cs.meta
new file mode 100644
index 00000000..3cc64c36
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 62fe01f31afcc5a4ab446003a7360cb3
+timeCreated: 1501892528
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionTriggerSystem.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionTriggerSystem.cs
new file mode 100644
index 00000000..d5089754
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionTriggerSystem.cs
@@ -0,0 +1,456 @@
+
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+using UNEB.Utility;
+using System.Reflection;
+using System.Linq;
+
+namespace UNEB
+{
+ public class ActionTriggerSystem
+ {
+ public List<TriggerMapping> triggers;
+
+ /// <summary>
+ /// Passive triggers do not interrupt the next possible trigger.
+ /// </summary>
+ public List<TriggerMapping> passiveTriggers;
+
+ private ActionManager _manager;
+ private TriggerMapping _focus;
+
+ public ActionTriggerSystem(ActionManager m)
+ {
+ _manager = m;
+
+ triggers = new List<TriggerMapping>();
+ passiveTriggers = new List<TriggerMapping>();
+
+ setupStandardTriggers();
+ }
+
+ public void Update()
+ {
+ foreach (TriggerMapping tm in triggers) {
+ if (tm.AllTriggersSatisfied()) {
+ tm.action();
+ return;
+ }
+ }
+
+ foreach (TriggerMapping tm in passiveTriggers) {
+ if (tm.AllTriggersSatisfied()) {
+ tm.action();
+ }
+ }
+
+ // Block all key inputs from passing through the Unity Editor
+ if (Event.current.isKey)
+ Event.current.Use();
+ }
+
+ private void setupStandardTriggers()
+ {
+ setupImmediateTriggers();
+ setupContextTriggers();
+ setupMultiStageTriggers();
+ }
+
+ private void setupImmediateTriggers()
+ {
+ var panInput = Create<InputTrigger>().Mouse(EventType.MouseDrag, InputTrigger.Button.Wheel);
+ panInput.action = () =>
+ {
+ window.editor.Pan(Event.current.delta);
+ window.Repaint();
+ };
+
+ var zoomInput = Create<InputTrigger>().Key(EventType.ScrollWheel, KeyCode.None, false, false);
+ zoomInput.action = () =>
+ {
+ window.editor.Zoom(Event.current.delta.y);
+ window.Repaint();
+ };
+
+ var selectSingle = Create<InputTrigger>().Mouse(EventType.MouseDown, InputTrigger.Button.Left);
+ selectSingle.action = () =>
+ {
+ bool bResult = window.editor.OnMouseOverNode(onSingleSelected);
+
+ // If the canvas is clicked then remove focus of GUI elements.
+ if (!bResult) {
+ GUI.FocusControl(null);
+ window.Repaint();
+ }
+ };
+
+ var undoInput = Create<InputTrigger>().Key(EventType.KeyDown, KeyCode.Z, true, false);
+ undoInput.action = _manager.UndoAction;
+
+ var redoInput = Create<InputTrigger>().Key(EventType.KeyDown, KeyCode.Y, true, false);
+ redoInput.action = _manager.RedoAction;
+
+ var recordClick = Create<InputTrigger>().EventOnly(EventType.MouseDown);
+ recordClick.action = () => { window.state.lastClickedPosition = window.editor.MousePosition(); };
+
+ var homeView = Create<InputTrigger>().Key(EventType.KeyDown, KeyCode.F, false, false);
+ homeView.action = window.editor.HomeView;
+ }
+
+ private void setupContextTriggers()
+ {
+ setupNodeCreateMenu();
+
+ Pair<string, Action>[] nodeContext =
+ {
+ ContextItem("Copy Node", () => { Debug.Log("Not Implemented"); }),
+ ContextItem("Delete Node", _manager.RunUndoableAction<DeleteNodeAction>)
+ };
+
+ var nodeTrigger = Create<ContextTrigger>().Build(nodeContext).EventOnly(EventType.ContextClick);
+ nodeTrigger.triggers.Add(isMouseOverNode);
+ nodeTrigger.triggers.Add(isGraphValid);
+ }
+
+ private void setupNodeCreateMenu()
+ {
+ //Get all classes deriving from Node via reflection
+ Type derivedType = typeof(Node);
+ Assembly assembly = Assembly.GetAssembly(derivedType);
+
+ List<Type> nodeTypes = assembly
+ .GetTypes()
+ .Where(t =>
+ t != derivedType &&
+ derivedType.IsAssignableFrom(t)
+ ).ToList();
+
+ //Populate canvasContext with entries for all node types
+ var canvasContext = new Pair<string, Action>[nodeTypes.Count];
+
+ for (int i = 0; i < nodeTypes.Count; i++) {
+
+ Type nodeType = nodeTypes[i];
+ Action createNode = () =>
+ {
+ _manager.window.state.typeToCreate = nodeType;
+ _manager.RunUndoableAction<CreateNodeAction>();
+ };
+
+ string name = ObjectNames.NicifyVariableName(nodeType.Name);
+ canvasContext[i] = ContextItem(name, createNode);
+ }
+
+ var canvasTrigger = Create<ContextTrigger>().Build(canvasContext).EventOnly(EventType.ContextClick);
+ canvasTrigger.triggers.Add(isMouseOverCanvas);
+ canvasTrigger.triggers.Add(isGraphValid);
+ }
+
+ private void setupMultiStageTriggers()
+ {
+ setupNodeDrag();
+ setupNodeConnection();
+ }
+
+ private void setupNodeDrag()
+ {
+ var endDragInput = Create<InputTrigger>(false, true).Mouse(EventType.MouseUp, InputTrigger.Button.Left);
+ var runningDragInput = Create<InputTrigger>(false, true).EventOnly(EventType.MouseDrag);
+ var startDragInput = Create<InputTrigger>(false, true).Mouse(EventType.MouseDown, InputTrigger.Button.Left);
+
+ startDragInput.triggers.Add(isMouseOverNode);
+ startDragInput.action = _manager.StartMultiStageAction<DragNode>;
+
+ endDragInput.action = _manager.FinishMultiStageAction;
+
+ runningDragInput.action = _manager.Update;
+ runningDragInput.action += window.Repaint;
+
+ new MultiStageInputTrigger(startDragInput, endDragInput, runningDragInput);
+ }
+
+ private void setupNodeConnection()
+ {
+ var endConnInput = Create<InputTrigger>(false, true).Mouse(EventType.MouseUp, InputTrigger.Button.Left);
+ var runningConnInput = Create<InputTrigger>(false, true).EventOnly(EventType.MouseDrag);
+ var startConnInput = Create<InputTrigger>(false, true).Mouse(EventType.MouseDown, InputTrigger.Button.Left);
+
+ Func<bool> knobCondition = () => { return isMouseOverOutput() || isMouseOverInputStartConn(); };
+
+ startConnInput.triggers.Add(knobCondition);
+ startConnInput.triggers.Add(isOutputSelected);
+
+ startConnInput.action = _manager.StartMultiStageAction<CreateConnection>;
+
+ endConnInput.action = _manager.FinishMultiStageAction;
+ endConnInput.action += window.Repaint;
+
+ runningConnInput.action = _manager.Update;
+ runningConnInput.action += window.Repaint;
+
+ new MultiStageInputTrigger(startConnInput, endConnInput, runningConnInput);
+ }
+
+ /// <summary>
+ /// Create a trigger mapping and store it in the triggers list.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ public T Create<T>(bool isPassive = false, bool pushToFront = false) where T : TriggerMapping, new()
+ {
+ T mapping = new T();
+
+ if (isPassive) {
+
+ if (pushToFront && passiveTriggers.Count > 0) passiveTriggers.Insert(0, mapping);
+ else passiveTriggers.Add(mapping);
+ }
+
+ else {
+
+ if (pushToFront && triggers.Count > 0) triggers.Insert(0, mapping);
+ else triggers.Add(mapping);
+ }
+
+ return mapping;
+ }
+
+ private void onSingleSelected(Node node)
+ {
+ _manager.window.state.selectedNode = node;
+ _manager.window.graph.PushToEnd(node);
+
+ Selection.activeObject = node;
+ }
+
+ private void onOutputKnobSelected(NodeOutput output)
+ {
+ _manager.window.state.selectedOutput = output;
+ }
+
+ private bool isMouseOverNode()
+ {
+ return window.editor.OnMouseOverNode(onSingleSelected);
+ }
+
+ private bool isMouseOverCanvas()
+ {
+ return !isMouseOverNode();
+ }
+
+ private bool isMouseOverOutput()
+ {
+ return window.editor.OnMouseOverOutput(onOutputKnobSelected);
+ }
+
+ private bool isMouseOverInputStartConn()
+ {
+ Action<NodeInput> startConnFromInput = (NodeInput input) =>
+ {
+ window.state.selectedOutput = input.Outputs[0];
+
+ // Detach this input if we are starting a connection action from the input.
+ if (window.state.selectedOutput != null) {
+
+ window.state.selectedInput = input;
+ _manager.RunUndoableAction<RemoveConnection>();
+ }
+ };
+
+ return window.editor.OnMouseOverInput(startConnFromInput);
+ }
+
+ private bool isOutputSelected()
+ {
+ return window.state.selectedOutput != null;
+ }
+
+ private NodeEditorWindow window
+ {
+ get { return _manager.window; }
+ }
+
+ private bool isGraphValid()
+ {
+ return window.graph != null;
+ }
+
+ public Pair<string, Action> ContextItem(string label, Action a)
+ {
+ return new Pair<string, Action>(label, a);
+ }
+
+ /// <summary>
+ /// Maps a conditional trigger with an action.
+ /// </summary>
+ public class TriggerMapping
+ {
+ public List<Func<bool>> triggers = new List<Func<bool>>();
+ public Action action;
+
+ protected TriggerMapping() { }
+
+ public TriggerMapping(Func<bool> trigger, Action action)
+ {
+ ;
+ triggers.Add(trigger);
+ this.action = action;
+ }
+
+ public bool AllTriggersSatisfied()
+ {
+ foreach (var t in triggers) {
+ if (!t()) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ }
+
+ /// <summary>
+ /// Special trigger that uses input as a conditional.
+ /// </summary>
+ public class InputTrigger : TriggerMapping
+ {
+ public enum Button
+ {
+ Left = 0,
+ Right = 1,
+ Wheel = 2
+ }
+
+ private EventType t;
+ private KeyCode k;
+ private int button;
+ private bool bIsShift, bIsCtrl;
+
+ /// <summary>
+ /// Initialize the input mapping with a key trigger.
+ /// </summary>
+ /// <param name="type"></param>
+ /// <param name="key"></param>
+ /// <param name="bShift"></param>
+ /// <param name="bCtrl"></param>
+ /// <returns></returns>
+ public InputTrigger Key(EventType type, KeyCode key, bool bShift, bool bCtrl)
+ {
+ t = type;
+ k = key;
+
+ bIsShift = bShift;
+ bIsCtrl = bCtrl;
+
+ Func<bool> trigger = () =>
+ {
+ var e = Event.current;
+
+ return
+ e.type == t &&
+ e.keyCode == k &&
+ e.shift == bIsShift &&
+ e.control == bIsCtrl;
+ };
+
+ triggers.Add(trigger);
+ return this;
+ }
+
+ /// <summary>
+ /// Initialize the input mapping with a mouse button tirgger.
+ /// </summary>
+ /// <param name="type"></param>
+ /// <param name="mButton"></param>
+ /// <returns></returns>
+ public InputTrigger Mouse(EventType type, Button mButton)
+ {
+ t = type;
+ button = (int)mButton;
+
+ Func<bool> trigger = () =>
+ {
+ var e = Event.current;
+
+ return
+ e.type == t &&
+ e.button == button;
+ };
+
+ triggers.Add(trigger);
+ return this;
+ }
+
+ /// <summary>
+ /// Initializes the input mapping with the event.
+ /// </summary>
+ /// <param name="type"></param>
+ /// <returns></returns>
+ public InputTrigger EventOnly(EventType type)
+ {
+ t = type;
+ Func<bool> trigger = () => { return Event.current.type == t; };
+
+ triggers.Add(trigger);
+ return this;
+ }
+ }
+
+ /// <summary>
+ /// Special trigger that uses context menus to execute other actions.
+ /// </summary>
+ public class ContextTrigger : InputTrigger
+ {
+ private GenericMenu menu;
+
+ public ContextTrigger()
+ {
+ menu = new GenericMenu();
+ action = menu.ShowAsContext;
+ }
+
+ public ContextTrigger Build(params Pair<string, Action>[] contents)
+ {
+ foreach (var content in contents) {
+
+ string label = content.item1;
+ Action action = content.item2;
+
+ menu.AddItem(new GUIContent(label), false, () => { action(); });
+ }
+
+ return this;
+ }
+ }
+
+ public class MultiStageInputTrigger
+ {
+ private InputTrigger _startTrigger, _endTrigger, _runningTrigger;
+
+ private bool _bStarted = false;
+
+ public MultiStageInputTrigger(InputTrigger start, InputTrigger end, InputTrigger running)
+ {
+ start.action += () => { _bStarted = true; };
+ start.triggers.Add(hasNotStarted);
+
+ end.triggers.Add(HasStarted);
+ end.action += () => { _bStarted = false; };
+
+ running.triggers.Add(HasStarted);
+ }
+
+ public bool HasStarted()
+ {
+ return _bStarted;
+ }
+
+ private bool hasNotStarted()
+ {
+ return !_bStarted;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionTriggerSystem.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionTriggerSystem.cs.meta
new file mode 100644
index 00000000..6d66a0d4
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/ActionTriggerSystem.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2b8fd837eb8876e4fa8c9b94d8b977f0
+timeCreated: 1501897267
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateConnection.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateConnection.cs
new file mode 100644
index 00000000..09d3e521
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateConnection.cs
@@ -0,0 +1,106 @@
+
+using System.Linq;
+using System.Collections.Generic;
+
+using UnityEngine;
+using UnityEditor;
+
+namespace UNEB
+{
+ public class CreateConnection : MultiStageAction
+ {
+ private NodeInput _input;
+ private NodeOutput _output;
+
+ // The output of the old node it was connected to.
+ private NodeOutput _oldConnectedOutput;
+
+ // Old inputs of the node.
+ private List<NodeInput> _oldConnectedInputs;
+
+ public override void Do()
+ {
+ manager.window.state.selectedOutput = _output;
+ }
+
+ public override void Undo()
+ {
+ _output.Remove(_input);
+ reconnectOldConnections();
+ }
+
+ public override void Redo()
+ {
+ disconnectOldConnections();
+ _output.Add(_input);
+ }
+
+ private void reconnectOldConnections()
+ {
+ // Re-connect old connections
+ if (_oldConnectedOutput != null) {
+ _oldConnectedOutput.Add(_input);
+ }
+
+ if (_oldConnectedInputs != null) {
+ foreach (var input in _oldConnectedInputs) {
+ _output.Add(input);
+ }
+ }
+ }
+
+ private void disconnectOldConnections()
+ {
+ // Remove old connections
+ if (_oldConnectedOutput != null) {
+ _oldConnectedOutput.Remove(_input);
+ }
+
+ if (_oldConnectedInputs != null) {
+ _output.RemoveAll();
+ }
+ }
+
+ public override void OnActionStart()
+ {
+ _output = manager.window.state.selectedOutput;
+ }
+
+ public override bool OnActionEnd()
+ {
+ manager.window.state.selectedOutput = null;
+ manager.window.editor.OnMouseOverInput((input) => { _input = input; });
+
+ // Make the connection.
+ if (_input != null && _output.CanConnectInput(_input)) {
+
+ if (!_output.bCanHaveMultipleConnections)
+ {
+ _output.RemoveAll();
+ }
+
+ if (!_input.bCanHaveMultipleConnections) {
+ cacheOldConnections();
+ disconnectOldConnections();
+ }
+
+ return _output.Add(_input);
+ }
+
+ return false;
+ }
+
+ private void cacheOldConnections()
+ {
+ // Check if the receiving node was already connected.
+ if (_input != null && _input.HasOutputConnected()) {
+ _oldConnectedOutput = _input.Outputs[0];
+ }
+
+ // Check if the origin node already had inputs
+ if (!_output.bCanHaveMultipleConnections && _output.InputCount > 0) {
+ _oldConnectedInputs = _output.Inputs.ToList();
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateConnection.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateConnection.cs.meta
new file mode 100644
index 00000000..5f6468b1
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateConnection.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 89cf0324fa09d7d4b82a3308a2172117
+timeCreated: 1501807840
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateNodeAction.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateNodeAction.cs
new file mode 100644
index 00000000..522fa0cb
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateNodeAction.cs
@@ -0,0 +1,55 @@
+
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace UNEB
+{
+ public class CreateNodeAction : UndoableAction
+ {
+ private NodeGraph _graph;
+ private Node _nodeCreated;
+
+ // The node referenced can only be destroyed if the
+ // create action has been undone.
+ private bool _bCanDeleteNode = false;
+
+ public override bool Init()
+ {
+ System.Type t = manager.window.state.typeToCreate;
+ return t != null && typeof(Node).IsAssignableFrom(t);
+ }
+
+ public override void Do()
+ {
+ _graph = manager.window.graph;
+
+ var state = manager.window.state;
+
+ _nodeCreated = SaveManager.CreateNode(state.typeToCreate, _graph);
+ _nodeCreated.bodyRect.position = manager.window.state.lastClickedPosition;
+
+ // Done with this type creation.
+ state.typeToCreate = null;
+ }
+
+ public override void Undo()
+ {
+ _graph.Remove(_nodeCreated);
+ _bCanDeleteNode = true;
+ }
+
+ public override void Redo()
+ {
+ _graph.Add(_nodeCreated);
+ _bCanDeleteNode = false;
+ }
+
+ public override void OnDestroy()
+ {
+ if (_bCanDeleteNode && _nodeCreated) {
+ ScriptableObject.DestroyImmediate(_nodeCreated, true);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateNodeAction.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateNodeAction.cs.meta
new file mode 100644
index 00000000..06f04a85
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/CreateNodeAction.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f1c2e7f15404be3468c08ac729975c13
+timeCreated: 1501781600
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DeleteNodeAction.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DeleteNodeAction.cs
new file mode 100644
index 00000000..2e2e6672
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DeleteNodeAction.cs
@@ -0,0 +1,128 @@
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using UnityEngine;
+using UNEB.Utility;
+
+namespace UNEB
+{
+ // Each input can have many outputs
+ using InputToOutputPair = Pair<NodeInput, List<NodeOutput>>;
+
+ // Each output can have many inputs
+ using OutputToInputsPair = Pair<NodeOutput, List<NodeInput>>;
+
+ public class DeleteNodeAction : UndoableAction
+ {
+ private NodeGraph _graph;
+ private Node _nodeRemoved = null;
+
+ private List<InputToOutputPair> _oldConnectedOutputs;
+ private List<OutputToInputsPair> _oldConnectedInputs;
+
+ // The node referenced can only be destroyed if the
+ // delete action has been done or redone.
+ private bool _bCanDeleteNode = false;
+
+ public DeleteNodeAction()
+ {
+
+ _oldConnectedOutputs = new List<InputToOutputPair>();
+ _oldConnectedInputs = new List<OutputToInputsPair>();
+ }
+
+ public override bool Init()
+ {
+ return manager.window.state.selectedNode != null;
+ }
+
+ public override void Do()
+ {
+ _graph = manager.window.graph;
+ _nodeRemoved = manager.window.state.selectedNode;
+ _graph.Remove(_nodeRemoved);
+
+ // Remember all the old outputs the inputs were connected to.
+ foreach (var input in _nodeRemoved.Inputs) {
+
+ if (input.HasOutputConnected()) {
+ _oldConnectedOutputs.Add(new InputToOutputPair(input, input.Outputs.ToList()));
+ }
+ }
+
+ // Remember all the old input connections that the outputs were connected to.
+ foreach (var output in _nodeRemoved.Outputs) {
+
+ if (output.InputCount != 0) {
+ _oldConnectedInputs.Add(new OutputToInputsPair(output, output.Inputs.ToList()));
+ }
+ }
+
+ disconnectOldConnections();
+
+ _bCanDeleteNode = true;
+ }
+
+ public override void Undo()
+ {
+ _graph.Add(_nodeRemoved);
+ reconnectOldConnections();
+
+ _bCanDeleteNode = false;
+ }
+
+ public override void Redo()
+ {
+ _graph.Remove(_nodeRemoved);
+ disconnectOldConnections();
+
+ _bCanDeleteNode = true;
+ }
+
+ private void disconnectOldConnections()
+ {
+ // For all the outputs for this node, remove all the connected inputs.
+ foreach (var output in _nodeRemoved.Outputs) {
+ output.RemoveAll();
+ }
+
+ // For all the inputs for this node, remove all the connected outputs.
+ foreach (var input in _nodeRemoved.Inputs) {
+ input.RemoveAll();
+ }
+ }
+
+ private void reconnectOldConnections()
+ {
+ // For all the remembered inputs (of this node) to output pairs, reconnect.
+ foreach (InputToOutputPair inOutPair in _oldConnectedOutputs) {
+
+ NodeInput input = inOutPair.item1;
+ List<NodeOutput> outputs = inOutPair.item2;
+
+ foreach (var output in outputs) {
+ output.Add(input);
+ }
+ }
+
+ // For all the remembered outputs (of this node) to inputs, reconnect.
+ foreach (OutputToInputsPair outInsPair in _oldConnectedInputs) {
+
+ NodeOutput output = outInsPair.item1;
+ List<NodeInput> inputs = outInsPair.item2;
+
+ foreach (var input in inputs) {
+ output.Add(input);
+ }
+ }
+ }
+
+ public override void OnDestroy()
+ {
+ if (_bCanDeleteNode && _nodeRemoved) {
+ ScriptableObject.DestroyImmediate(_nodeRemoved, true);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DeleteNodeAction.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DeleteNodeAction.cs.meta
new file mode 100644
index 00000000..4a62ff87
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DeleteNodeAction.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5653c134c34e88b4a971e196d0f42586
+timeCreated: 1501781608
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DragNode.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DragNode.cs
new file mode 100644
index 00000000..9e4d89d0
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DragNode.cs
@@ -0,0 +1,42 @@
+
+using UnityEngine;
+
+namespace UNEB
+{
+ public class DragNode : MultiStageAction
+ {
+ private Node _draggingNode;
+
+ private Vector2 _startDragPos, _endDragPos;
+
+ public const float dragSpeed = 1f;
+
+ public override void Undo()
+ {
+ _draggingNode.bodyRect.position = _startDragPos;
+ }
+
+ public override void Redo()
+ {
+ _draggingNode.bodyRect.position = _endDragPos;
+ }
+
+ public override void Do()
+ {
+ NodeEditor editor = manager.window.editor;
+ _draggingNode.bodyRect.position += Event.current.delta * editor.ZoomScale * dragSpeed;
+ }
+
+ public override void OnActionStart()
+ {
+ _draggingNode = manager.window.state.selectedNode;
+ _startDragPos = _draggingNode.bodyRect.position;
+ }
+
+ public override bool OnActionEnd()
+ {
+ _endDragPos = _draggingNode.bodyRect.position;
+ return true;
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DragNode.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DragNode.cs.meta
new file mode 100644
index 00000000..efbc5101
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/DragNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2075b47cce2d17147a02ec2483f38698
+timeCreated: 1501792802
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/MultiStageAction.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/MultiStageAction.cs
new file mode 100644
index 00000000..b7fd41fb
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/MultiStageAction.cs
@@ -0,0 +1,18 @@
+
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace UNEB
+{
+ public abstract class MultiStageAction : UndoableAction
+ {
+
+ public abstract void OnActionStart();
+
+ /// <summary>
+ /// Returns true if the action completed succesfully.
+ /// </summary>
+ /// <returns></returns>
+ public abstract bool OnActionEnd();
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/MultiStageAction.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/MultiStageAction.cs.meta
new file mode 100644
index 00000000..bc4a1081
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/MultiStageAction.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 211fa78df12a1d440a6aa57ca343d5ab
+timeCreated: 1501892778
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/RemoveConnection.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/RemoveConnection.cs
new file mode 100644
index 00000000..341e9f63
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/RemoveConnection.cs
@@ -0,0 +1,32 @@
+
+using UnityEngine;
+
+namespace UNEB
+{
+ public class RemoveConnection : UndoableAction
+ {
+
+ private NodeOutput _output;
+ private NodeInput _input;
+
+ public override void Do()
+ {
+ _input = manager.window.state.selectedInput;
+ _output = _input.Outputs[0];
+
+ _output.Remove(_input);
+
+ manager.window.state.selectedInput = null;
+ }
+
+ public override void Undo()
+ {
+ _output.Add(_input);
+ }
+
+ public override void Redo()
+ {
+ _output.Remove(_input);
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/RemoveConnection.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/RemoveConnection.cs.meta
new file mode 100644
index 00000000..fec8868b
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/RemoveConnection.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d1b449f51ea4820498a2b38021e549d7
+timeCreated: 1501913312
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/UndoableAction.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/UndoableAction.cs
new file mode 100644
index 00000000..53857a9f
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/UndoableAction.cs
@@ -0,0 +1,12 @@
+
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace UNEB
+{
+ public abstract class UndoableAction : ActionBase
+ {
+ public abstract void Undo();
+ public abstract void Redo();
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/UndoableAction.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/UndoableAction.cs.meta
new file mode 100644
index 00000000..b6e7512b
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/Actions/UndoableAction.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 72c02675816f81d4c9d15134303127b4
+timeCreated: 1501892769
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditor.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditor.cs
new file mode 100644
index 00000000..a7b8db1d
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditor.cs
@@ -0,0 +1,665 @@
+
+using System;
+using System.Collections.Generic;
+
+using UnityEngine;
+using UnityEditor;
+
+using NodeEditorFramework.Utilities;
+using UNEB.Utility;
+
+namespace UNEB
+{
+ public class NodeEditor
+ {
+ /// <summary>
+ /// Callback for when a node is modified within the editor
+ /// </summary>
+ public static Action<NodeGraph, Node> onNodeGuiChange;
+
+ /// <summary>
+ /// The rect bounds defining the recticle at the grid center.
+ /// </summary>
+ public static readonly Rect kReticleRect = new Rect(0, 0, 8, 8);
+
+ public static float zoomDelta = 0.1f;
+ public static float minZoom = 1f;
+ public static float maxZoom = 4f;
+ public static float panSpeed = 1.2f;
+
+ /// <summary>
+ /// The associated graph to visualize and edit.
+ /// </summary>
+ public NodeGraph graph;
+ private NodeEditorWindow _window;
+
+ private Texture2D _gridTex;
+ private Texture2D _backTex;
+ private Texture2D _circleTex;
+ private Texture2D _knobTex;
+ private Texture2D _headerTex;
+
+ public Color backColor;
+ public Color knobColor;
+ public Color guideColor;
+
+ // To keep track of zooming.
+ private Vector2 _zoomAdjustment;
+ private Vector2 _zoom = Vector2.one;
+ public Vector2 panOffset = Vector2.zero;
+
+ /// <summary>
+ /// Enables and disables drawing the guide to the grid center.
+ /// </summary>
+ public bool bDrawGuide = false;
+
+ public NodeEditor(NodeEditorWindow w)
+ {
+ backColor = ColorExtensions.From255(59, 62, 74);
+ knobColor = ColorExtensions.From255(126, 186, 255);
+
+ guideColor = Color.gray;
+ guideColor.a = 0.3f;
+
+ _gridTex = TextureLib.GetTexture("Grid");
+ _backTex = TextureLib.GetTexture("Square");
+ _circleTex = TextureLib.GetTexture("Circle");
+
+ _window = w;
+ }
+
+ #region Drawing
+
+ public void Draw()
+ {
+ if (Event.current.type == EventType.Repaint) {
+ drawGrid();
+ updateTextures();
+ }
+
+ if (graph)
+ drawGraphContents();
+
+ drawMode();
+ }
+
+ private void drawGraphContents()
+ {
+ Rect graphRect = _window.Size;
+ var center = graphRect.size / 2f;
+
+ _zoomAdjustment = GUIScaleUtility.BeginScale(ref graphRect, center, ZoomScale, false);
+
+ drawGridOverlay();
+ drawConnectionPreview();
+ drawConnections();
+ drawNodes();
+
+ GUIScaleUtility.EndScale();
+ }
+
+ private void drawGrid()
+ {
+ var size = _window.Size.size;
+ var center = size / 2f;
+
+ float zoom = ZoomScale;
+
+ // Offset from origin in tile units
+ float xOffset = -(center.x * zoom + panOffset.x) / _gridTex.width;
+ float yOffset = ((center.y - size.y) * zoom + panOffset.y) / _gridTex.height;
+
+ Vector2 tileOffset = new Vector2(xOffset, yOffset);
+
+ // Amount of tiles
+ float tileAmountX = Mathf.Round(size.x * zoom) / _gridTex.width;
+ float tileAmountY = Mathf.Round(size.y * zoom) / _gridTex.height;
+
+ Vector2 tileAmount = new Vector2(tileAmountX, tileAmountY);
+
+ // Draw tiled background
+ GUI.DrawTextureWithTexCoords(_window.Size, _gridTex, new Rect(tileOffset, tileAmount));
+ }
+
+ // Handles drawing things over the grid such as axes.
+ private void drawGridOverlay()
+ {
+ drawAxes();
+ drawGridCenter();
+
+ if (bDrawGuide) {
+ drawGuide();
+ _window.Repaint();
+ }
+ }
+
+ private void drawGridCenter()
+ {
+ var rect = kReticleRect;
+
+ rect.size *= ZoomScale;
+ rect.center = Vector2.zero;
+ rect.position = GraphToScreenSpace(rect.position);
+
+ DrawTintTexture(rect, _circleTex, Color.gray);
+ }
+
+ private void drawAxes()
+ {
+ // Draw axes. Make sure to scale based on zoom.
+ Vector2 up = Vector2.up * _window.Size.height * ZoomScale;
+ Vector2 right = Vector2.right * _window.Size.width * ZoomScale;
+ Vector2 down = -up;
+ Vector2 left = -right;
+
+ // Make sure the axes follow the pan.
+ up.y -= panOffset.y;
+ down.y -= panOffset.y;
+ right.x -= panOffset.x;
+ left.x -= panOffset.x;
+
+ up = GraphToScreenSpace(up);
+ down = GraphToScreenSpace(down);
+ right = GraphToScreenSpace(right);
+ left = GraphToScreenSpace(left);
+
+ DrawLine(right, left, Color.gray);
+ DrawLine(up, down, Color.gray);
+ }
+
+ /// <summary>
+ /// Shows where the center of the grid is.
+ /// </summary>
+ private void drawGuide()
+ {
+ Vector2 gridCenter = GraphToScreenSpace(Vector2.zero);
+ DrawLine(gridCenter, Event.current.mousePosition, guideColor);
+ }
+
+ private void drawNodes()
+ {
+ // Calculate the viewing rect in graph space.
+ var view = _window.Size;
+ view.size *= ZoomScale;
+ view.center = -panOffset;
+
+ // Render nodes within the view space for performance.
+ foreach (Node node in graph.nodes) {
+
+ if (view.Overlaps(node.bodyRect)) {
+ drawNode(node);
+ drawKnobs(node);
+ }
+ }
+ }
+
+ private void drawKnobs(Node node)
+ {
+ foreach (var input in node.Inputs) {
+ drawKnob(input);
+ }
+
+ foreach (var output in node.Outputs) {
+ drawKnob(output);
+ }
+ }
+
+ private void drawKnob(NodeConnection knob)
+ {
+ // Convert the body rect from graph to screen space.
+ var screenRect = knob.bodyRect;
+ screenRect.position = GraphToScreenSpace(screenRect.position);
+
+ GUI.DrawTexture(screenRect, _knobTex);
+ }
+
+ private void drawConnections()
+ {
+ foreach (var node in graph.nodes) {
+ foreach (var output in node.Outputs) {
+ foreach (var input in output.Inputs) {
+
+ Vector2 start = GraphToScreenSpace(output.bodyRect.center);
+ Vector2 end = GraphToScreenSpace(input.bodyRect.center);
+
+ DrawBezier(start, end, knobColor);
+ }
+ }
+ }
+ }
+
+ private void drawConnectionPreview()
+ {
+ var output = _window.state.selectedOutput;
+
+ if (output != null) {
+ Vector2 start = GraphToScreenSpace(output.bodyRect.center);
+ DrawBezier(start, Event.current.mousePosition, Color.gray);
+ }
+ }
+
+ private void drawNode(Node node)
+ {
+ // Convert the node rect from graph to screen space.
+ Rect screenRect = node.bodyRect;
+ screenRect.position = GraphToScreenSpace(screenRect.position);
+
+ // The node contents are grouped together within the node body.
+ BeginGroup(screenRect, backgroundStyle, backColor);
+
+ // Make the body of node local to the group coordinate space.
+ Rect localRect = node.bodyRect;
+ localRect.position = Vector2.zero;
+
+ // Draw the contents inside the node body, automatically laidout.
+ GUILayout.BeginArea(localRect, GUIStyle.none);
+
+ node.HeaderStyle.normal.background = _headerTex;
+
+ EditorGUI.BeginChangeCheck();
+ node.OnNodeGUI();
+ if (EditorGUI.EndChangeCheck())
+ if (onNodeGuiChange != null) onNodeGuiChange(graph, node);
+
+ GUILayout.EndArea();
+ GUI.EndGroup();
+ }
+
+ /// <summary>
+ /// Draw the window mode in the background.
+ /// </summary>
+ public void drawMode()
+ {
+ if (!graph) {
+ GUI.Label(_modeStatusRect, new GUIContent("No Graph Set"), ModeStatusStyle);
+ }
+
+ else if (_window.GetMode() == NodeEditorWindow.Mode.Edit) {
+ GUI.Label(_modeStatusRect, new GUIContent("Edit"), ModeStatusStyle);
+ }
+
+ else {
+ GUI.Label(_modeStatusRect, new GUIContent("View"), ModeStatusStyle);
+ }
+ }
+
+ /// <summary>
+ /// Draws a bezier between the two end points in screen space.
+ /// </summary>
+ public static void DrawBezier(Vector2 start, Vector2 end, Color color)
+ {
+ Vector2 endToStart = (end - start);
+ float dirFactor = Mathf.Clamp(endToStart.magnitude, 20f, 80f);
+
+ endToStart.Normalize();
+ Vector2 project = Vector3.Project(endToStart, Vector3.right);
+
+ Vector2 startTan = start + project * dirFactor;
+ Vector2 endTan = end - project * dirFactor;
+
+ UnityEditor.Handles.DrawBezier(start, end, startTan, endTan, color, null, 3f);
+ }
+
+ /// <summary>
+ /// Draws a line between the two end points.
+ /// </summary>
+ /// <param name="start"></param>
+ /// <param name="end"></param>
+ public static void DrawLine(Vector2 start, Vector2 end, Color color)
+ {
+ var handleColor = Handles.color;
+ Handles.color = color;
+
+ Handles.DrawLine(start, end);
+ Handles.color = handleColor;
+ }
+
+ /// <summary>
+ /// Draws a GUI texture with a tint.
+ /// </summary>
+ /// <param name="r"></param>
+ /// <param name="t"></param>
+ /// <param name="c"></param>
+ public static void DrawTintTexture(Rect r, Texture t, Color c)
+ {
+ var guiColor = GUI.color;
+ GUI.color = c;
+
+ GUI.DrawTexture(r, t);
+ GUI.color = guiColor;
+ }
+
+ public static void BeginGroup(Rect r, GUIStyle style, Color color)
+ {
+ var old = GUI.color;
+
+ GUI.color = color;
+ GUI.BeginGroup(r, style);
+
+ GUI.color = old;
+ }
+
+ // TODO: Call after exiting playmode.
+ private void updateTextures()
+ {
+ _knobTex = TextureLib.GetTintTex("Circle", knobColor);
+ _headerTex = TextureLib.GetTintTex("Square", ColorExtensions.From255(79, 82, 94));
+ }
+
+ #endregion
+
+ #region View Operations
+
+ public void ToggleDrawGuide()
+ {
+ bDrawGuide = !bDrawGuide;
+ }
+
+ public void HomeView()
+ {
+ if (!graph || graph.nodes.Count == 0) {
+ panOffset = Vector2.zero;
+ return;
+ }
+
+ float xMin = float.MaxValue;
+ float xMax = float.MinValue;
+ float yMin = float.MaxValue;
+ float yMax = float.MinValue;
+
+ foreach (var node in graph.nodes) {
+
+ Rect r = node.bodyRect;
+
+ if (r.xMin < xMin) {
+ xMin = r.xMin;
+ }
+
+ if (r.xMax > xMax) {
+ xMax = r.xMax;
+ }
+
+ if (r.yMin < yMin) {
+ yMin = r.yMin;
+ }
+
+ if (r.yMax > yMax) {
+ yMax = r.yMax;
+ }
+ }
+
+ // Add some padding so nodes do not appear on the edge of the view.
+ xMin -= Node.kDefaultSize.x;
+ xMax += Node.kDefaultSize.x;
+ yMin -= Node.kDefaultSize.y;
+ yMax += Node.kDefaultSize.y;
+ var nodesArea = Rect.MinMaxRect(xMin, yMin, xMax, yMax);
+
+ // Center the pan in the bounding view.
+ panOffset = -nodesArea.center;
+
+ // Calculate the required zoom based on the ratio between the window view and node area rect.
+ var winSize = _window.Size;
+ float zoom = 1f;
+
+ // Use the view width to determine zoom to fit the entire node area width.
+ if (nodesArea.width > nodesArea.height) {
+
+ float widthRatio = nodesArea.width / winSize.width;
+ zoom = widthRatio;
+
+ if (widthRatio < 1f) {
+ zoom = 1 / widthRatio;
+ }
+ }
+
+ // Use the height to determine zoom.
+ else {
+
+ float heightRatio = nodesArea.height / winSize.height;
+ zoom = heightRatio;
+
+ if (heightRatio < 1f) {
+ zoom = 1 / heightRatio;
+ }
+ }
+
+ ZoomScale = zoom;
+ }
+
+ #endregion
+
+ #region Space Transformations and Mouse Utilities
+
+ public void Pan(Vector2 delta)
+ {
+ panOffset += delta * ZoomScale * panSpeed;
+ }
+
+ public void Zoom(float zoomDirection)
+ {
+ float scale = (zoomDirection < 0f) ? (1f - zoomDelta) : (1f + zoomDelta);
+
+ _zoom *= scale;
+
+ float cap = Mathf.Clamp(_zoom.x, minZoom, maxZoom);
+ _zoom.Set(cap, cap);
+ }
+
+ public float ZoomScale
+ {
+ get { return _zoom.x; }
+ set
+ {
+ float z = Mathf.Clamp(value, minZoom, maxZoom);
+ _zoom.Set(z, z);
+ }
+ }
+
+ /// <summary>
+ /// Convertes the screen position to graph space.
+ /// </summary>
+ public Vector2 ScreenToGraphSpace(Vector2 screenPos)
+ {
+ var graphRect = _window.Size;
+ var center = graphRect.size / 2f;
+ return (screenPos - center) * ZoomScale - panOffset;
+ }
+
+ /// <summary>
+ /// Returns the mouse position in graph space.
+ /// </summary>
+ /// <returns></returns>
+ public Vector2 MousePosition()
+ {
+ return ScreenToGraphSpace(Event.current.mousePosition);
+ }
+
+ /// <summary>
+ /// Tests if the rect is under the mouse.
+ /// </summary>
+ /// <param name="r"></param>
+ /// <returns></returns>
+ public bool IsUnderMouse(Rect r)
+ {
+ return r.Contains(MousePosition());
+ }
+
+ /// <summary>
+ /// Converts the graph position to screen space.
+ /// This only works for geometry inside the GUIScaleUtility.BeginScale()
+ /// </summary>
+ /// <param name="graphPos"></param>
+ /// <returns></returns>
+ public Vector2 GraphToScreenSpace(Vector2 graphPos)
+ {
+ return graphPos + _zoomAdjustment + panOffset;
+ }
+
+ /// <summary>
+ /// Converts the graph position to screen space.
+ /// This only works for geometry inside the GUIScaleUtility.BeginScale().
+ /// </summary>
+ /// <param name="graphPos"></param>
+ public void graphToScreenSpace(ref Vector2 graphPos)
+ {
+ graphPos += _zoomAdjustment + panOffset;
+ }
+
+ /// <summary>
+ /// Converts the graph position to screen space.
+ /// This works for geometry NOT inside the GUIScaleUtility.BeginScale().
+ /// </summary>
+ /// <param name="graphPos"></param>
+ public void graphToScreenSpaceZoomAdj(ref Vector2 graphPos)
+ {
+ graphPos = GraphToScreenSpace(graphPos) / ZoomScale;
+ }
+
+ /// <summary>
+ /// Executes the callback on the first node that is detected under the mouse.
+ /// </summary>
+ /// <param name="callback"></param>
+ public bool OnMouseOverNode(Action<Node> callback)
+ {
+ if (!graph) {
+ return false;
+ }
+
+ for (int i = graph.nodes.Count - 1; i >= 0; --i) {
+
+ Node node = graph.nodes[i];
+
+ if (IsUnderMouse(node.bodyRect)) {
+ callback(node);
+ return true;
+ }
+ }
+
+ // No node under mouse.
+ return false;
+ }
+
+ /// <summary>
+ /// Tests if the mouse is over an output.
+ /// </summary>
+ /// <param name="callback"></param>
+ /// <returns></returns>
+ public bool OnMouseOverOutput(Action<NodeOutput> callback)
+ {
+ if (!graph) {
+ return false;
+ }
+
+ foreach (var node in graph.nodes) {
+
+ foreach (var output in node.Outputs) {
+
+ if (IsUnderMouse(output.bodyRect)) {
+ callback(output);
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /// <summary>
+ /// Tests if the mouse is over an input.
+ /// </summary>
+ /// <param name="callback"></param>
+ /// <returns></returns>
+ public bool OnMouseOverInput(Action<NodeInput> callback)
+ {
+ if (!graph) {
+ return false;
+ }
+
+ foreach (var node in graph.nodes) {
+
+ foreach (var input in node.Inputs) {
+
+ if (IsUnderMouse(input.bodyRect)) {
+ callback(input);
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /// <summary>
+ /// Tests if the mouse is over the node or the input.
+ /// </summary>
+ /// <param name="callback"></param>
+ /// <returns></returns>
+ public bool OnMouseOverNode_OrInput(Action<Node> callback)
+ {
+ if (!graph) {
+ return false;
+ }
+
+ foreach (var node in graph.nodes) {
+
+ if (IsUnderMouse(node.bodyRect)) {
+ callback(node);
+ return true;
+ }
+
+ // Check inputs
+ else {
+
+ foreach (var input in node.Inputs) {
+ if (IsUnderMouse(input.bodyRect)) {
+ callback(node);
+ return true;
+ }
+ }
+ }
+ }
+
+ // No node under mouse.
+ return false;
+ }
+
+ #endregion
+
+ #region Styles
+
+ private GUIStyle _backgroundStyle;
+ private GUIStyle backgroundStyle
+ {
+ get
+ {
+ if (_backgroundStyle == null) {
+ _backgroundStyle = new GUIStyle(GUI.skin.box);
+ _backgroundStyle.normal.background = _backTex;
+ }
+
+ return _backgroundStyle;
+ }
+ }
+
+
+ private static Rect _modeStatusRect = new Rect(20f, 20f, 250f, 150f);
+ private static GUIStyle _modeStatusStyle;
+ private static GUIStyle ModeStatusStyle
+ {
+ get
+ {
+ if (_modeStatusStyle == null) {
+ _modeStatusStyle = new GUIStyle();
+ _modeStatusStyle.fontSize = 36;
+ _modeStatusStyle.fontStyle = FontStyle.Bold;
+ _modeStatusStyle.normal.textColor = new Color(1f, 1f, 1f, 0.2f);
+ }
+
+ return _modeStatusStyle;
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditor.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditor.cs.meta
new file mode 100644
index 00000000..15c06c0c
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: a13b690ab7a11cb4cb37718591f0f20a
+timeCreated: 1501781542
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditorWindow.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditorWindow.cs
new file mode 100644
index 00000000..e6407f19
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditorWindow.cs
@@ -0,0 +1,320 @@
+
+using System.IO;
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.Callbacks;
+
+using NodeEditorFramework.Utilities;
+using UNEB.Utility;
+
+namespace UNEB
+{
+ public class NodeEditorWindow : EditorWindow
+ {
+ [MenuItem("Window/Node Editor")]
+ static void Init()
+ {
+ var w = EditorWindow.CreateInstance<NodeEditorWindow>();
+ w.titleContent = new GUIContent("Node Editor");
+ w.Show();
+ }
+
+ public const float kToolbarHeight = 20f;
+ public const float kToolbarButtonWidth = 50f;
+
+ [SerializeField]
+ public NodeGraph graph;
+
+ public NodeEditor editor;
+ public ActionManager actions;
+ public ActionTriggerSystem triggers;
+ public NodeEditorState state;
+ private SaveManager _saveManager;
+
+ public enum Mode { Edit, View };
+ private Mode _mode = Mode.Edit;
+
+ void OnEnable()
+ {
+ GUIScaleUtility.CheckInit();
+ TextureLib.LoadStandardTextures();
+
+ actions = new ActionManager(this);
+ editor = new NodeEditor(this);
+ triggers = new ActionTriggerSystem(actions);
+ state = new NodeEditorState();
+
+ _saveManager = new SaveManager(this);
+
+ editor.graph = graph;
+
+ // Make sure that changes from the undo system are immediately
+ // updated in the window. If not, the undo changes will be
+ // visually delayed.
+ actions.OnUndo += Repaint;
+ actions.OnRedo += Repaint;
+
+ // Always start in edit mode.
+ // The only way it can be in view mode is if the window is
+ // already opened and the user selects a some graph.
+ _mode = Mode.Edit;
+
+ editor.HomeView();
+ }
+
+ void OnDisable()
+ {
+ _saveManager.Cleanup();
+ }
+
+ void OnDestroy()
+ {
+ cleanup();
+ }
+
+ void OnGUI()
+ {
+ // Asset removed.
+ if (!graph && !_saveManager.IsInNographState()) {
+ _saveManager.InitState();
+ }
+
+ editor.Draw();
+ drawToolbar();
+
+ // This must go after draw calls or there can be
+ // GUI layout errors.
+ triggers.Update();
+ }
+
+ public void SetGraph(NodeGraph g, Mode mode = Mode.Edit)
+ {
+ graph = g;
+ editor.graph = g;
+
+ // Reset Undo and Redo buffers.
+ actions.Reset();
+
+ _mode = mode;
+ }
+
+ private void cleanup()
+ {
+ if (actions != null) {
+ actions.OnUndo -= Repaint;
+ actions.OnRedo -= Repaint;
+ }
+
+ actions.Reset();
+ _saveManager.Cleanup();
+ }
+
+ private void drawToolbar()
+ {
+ EditorGUILayout.BeginHorizontal("Toolbar");
+
+ if (DropdownButton("File", kToolbarButtonWidth)) {
+ createFileMenu();
+ }
+
+ if (DropdownButton("Edit", kToolbarButtonWidth)) {
+ createEditMenu();
+ }
+
+ if (DropdownButton("View", kToolbarButtonWidth)) {
+ createViewMenu();
+ }
+
+ if (DropdownButton("Settings", kToolbarButtonWidth + 10f)) {
+ createSettingsMenu();
+ }
+
+ if (DropdownButton("Tools", kToolbarButtonWidth)) {
+ createToolsMenu();
+ }
+
+ // Make the toolbar extend all throughout the window extension.
+ GUILayout.FlexibleSpace();
+ drawGraphName();
+
+ EditorGUILayout.EndHorizontal();
+ }
+
+ private void drawGraphName()
+ {
+ string graphName = "None";
+ if (graph != null) {
+ graphName = graph.name;
+ }
+
+ GUILayout.Label(graphName);
+ }
+
+ private void createFileMenu()
+ {
+ var menu = new GenericMenu();
+
+ menu.AddItem(new GUIContent("Create New"), false, _saveManager.RequestNew);
+ menu.AddItem(new GUIContent("Load"), false, _saveManager.RequestLoad);
+
+ menu.AddSeparator("");
+ menu.AddItem(new GUIContent("Save"), false, _saveManager.RequestSave);
+ menu.AddItem(new GUIContent("Save As"), false, _saveManager.RequestSaveAs);
+
+ menu.DropDown(new Rect(5f, kToolbarHeight, 0f, 0f));
+ }
+
+ private void createEditMenu()
+ {
+ var menu = new GenericMenu();
+
+ menu.AddItem(new GUIContent("Undo"), false, actions.UndoAction);
+ menu.AddItem(new GUIContent("Redo"), false, actions.RedoAction);
+
+ menu.DropDown(new Rect(55f, kToolbarHeight, 0f, 0f));
+ }
+
+ private void createViewMenu()
+ {
+ var menu = new GenericMenu();
+
+ menu.AddItem(new GUIContent("Home"), false, editor.HomeView);
+ menu.AddItem(new GUIContent("Zoom In"), false, () => { editor.Zoom(-1); });
+ menu.AddItem(new GUIContent("Zoom Out"), false, () => { editor.Zoom(1); });
+
+ menu.DropDown(new Rect(105f, kToolbarHeight, 0f, 0f));
+ }
+
+ private void createSettingsMenu()
+ {
+ var menu = new GenericMenu();
+
+ menu.AddItem(new GUIContent("Show Guide"), editor.bDrawGuide, editor.ToggleDrawGuide);
+
+ menu.DropDown(new Rect(155f, kToolbarHeight, 0f, 0f));
+ }
+
+ private void createToolsMenu()
+ {
+ var menu = new GenericMenu();
+
+ menu.AddItem(new GUIContent("Add Test Nodes"), false, addTestNodes);
+ menu.AddItem(new GUIContent("Clear Nodes"), false, clearNodes);
+
+ menu.DropDown(new Rect(215f, kToolbarHeight, 0f, 0f));
+ }
+
+ public bool DropdownButton(string name, float width)
+ {
+ return GUILayout.Button(name, EditorStyles.toolbarDropDown, GUILayout.Width(width));
+ }
+
+ private void addTestNodes()
+ {
+ if (graph) {
+
+ for (int x = 0; x < 10; x++) {
+ for (int y = 0; y < 10; y++) {
+
+ var node = SaveManager.CreateNode<BasicNode>(graph);
+
+ float xpos = x * Node.kDefaultSize.x * 1.5f;
+ float ypos = y * Node.kDefaultSize.y * 1.5f;
+ node.bodyRect.position = new Vector2(xpos, ypos);
+ }
+ }
+ }
+ }
+
+ private void clearNodes()
+ {
+ if (graph) {
+
+ foreach (var node in graph.nodes) {
+ ScriptableObject.DestroyImmediate(node, true);
+ }
+
+ actions.Reset();
+ graph.nodes.Clear();
+ }
+ }
+
+ /// <summary>
+ /// The size of the window.
+ /// </summary>
+ public Rect Size
+ {
+ get { return new Rect(Vector2.zero, position.size); }
+ }
+
+ /// <summary>
+ /// The rect used to filter input.
+ /// This is so the toolbar is not ignored by editor inputs.
+ /// </summary>
+ public Rect InputRect
+ {
+ get
+ {
+ var rect = Size;
+
+ rect.y += kToolbarHeight;
+ rect.height -= kToolbarHeight;
+
+ return rect;
+ }
+ }
+
+ public Mode GetMode()
+ {
+ return _mode;
+ }
+
+ /// <summary>
+ /// Opens up the node editor window from asset selection.
+ /// </summary>
+ /// <param name="instanceID"></param>
+ /// <param name="line"></param>
+ /// <returns></returns>
+ [OnOpenAsset(1)]
+ private static bool OpenGraphAsset(int instanceID, int line)
+ {
+ var graphSelected = EditorUtility.InstanceIDToObject(instanceID) as NodeGraph;
+
+ if (graphSelected != null) {
+
+ NodeEditorWindow windowToUse = null;
+
+ // Try to find an editor window without a graph...
+ var windows = Resources.FindObjectsOfTypeAll<NodeEditorWindow>();
+ foreach (var w in windows) {
+
+ // The canvas is already opened
+ if (w.graph == graphSelected) {
+ return false;
+ }
+
+ // Found a window with no active canvas.
+ if (w.graph == null) {
+ windowToUse = w;
+ break;
+ }
+ }
+
+ // No windows available...just make a new one.
+ if (!windowToUse) {
+ windowToUse = EditorWindow.CreateInstance<NodeEditorWindow>();
+ windowToUse.titleContent = new GUIContent("Node Editor");
+ windowToUse.Show();
+ }
+
+ windowToUse.SetGraph(graphSelected);
+ windowToUse._saveManager.InitState();
+ windowToUse.Repaint();
+
+ return true;
+ }
+
+ return false;
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditorWindow.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditorWindow.cs.meta
new file mode 100644
index 00000000..84abdc2e
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/NodeEditorWindow.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e9e0c3fd288222b4ea49d6b9eb70ccaa
+timeCreated: 1501781512
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/SaveManager.cs b/Other/NodeEditorExamples/Assets/UNEB/Editor/SaveManager.cs
new file mode 100644
index 00000000..c9825ae0
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/SaveManager.cs
@@ -0,0 +1,473 @@
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.Callbacks;
+
+using Bonsai.Utility;
+
+namespace UNEB
+{
+ /// <summary>
+ /// Handles the saving and loading of tree assets.
+ /// </summary>
+ public class SaveManager
+ {
+ public enum SaveState { NoGraph, TempGraph, SavedGraph };
+
+ // The FSM used to structure the logic control of saving and loading.
+ private StateMachine<SaveState> _saveFSM;
+
+ // The events that dictate the flow of the manager's FSM.
+ private enum SaveOp { None, New, Load, Save, SaveAs };
+ private SaveOp _saveOp = SaveOp.None;
+
+ private NodeEditorWindow _window;
+
+ private const string kRootUNEB = "UNEB";
+
+ // Path that stores temporary graphs.
+ private const string kTempGraphDirectory = "TempGraphsUNEB";
+ private const string kTempFileName = "TempNodeGraphUNEB";
+
+ public SaveManager(NodeEditorWindow w)
+ {
+ _window = w;
+
+ _saveFSM = new StateMachine<SaveState>();
+
+ var noGraph = new StateMachine<SaveState>.State(SaveState.NoGraph);
+ var tempGraph = new StateMachine<SaveState>.State(SaveState.TempGraph);
+ var savedGraph = new StateMachine<SaveState>.State(SaveState.SavedGraph);
+
+ _saveFSM.AddState(noGraph);
+ _saveFSM.AddState(tempGraph);
+ _saveFSM.AddState(savedGraph);
+
+ // Actions to take when starting out on a window with no graph.
+ _saveFSM.AddTransition(noGraph, tempGraph, isNewRequested, createNewOnto_Window_WithTempOrEmpty);
+ _saveFSM.AddTransition(noGraph, savedGraph, isLoadRequested, loadOnto_EmptyWindow);
+
+ // Actions to take when the window has a temp graph.
+ _saveFSM.AddTransition(tempGraph, tempGraph, isNewRequested, createNewOnto_Window_WithTempOrEmpty);
+ _saveFSM.AddTransition(tempGraph, savedGraph, isSaveOrSaveAsRequested, saveTempAs);
+ _saveFSM.AddTransition(tempGraph, savedGraph, isLoadRequested, loadOnto_Window_WithTempgraph);
+
+ // Actions to take when the window has a valid graph (already saved).
+ _saveFSM.AddTransition(savedGraph, savedGraph, isSaveRequested, save);
+ _saveFSM.AddTransition(savedGraph, savedGraph, isSaveAsRequested, saveCloneAs);
+ _saveFSM.AddTransition(savedGraph, savedGraph, isLoadRequested, loadOnto_Window_WithSavedgraph);
+ _saveFSM.AddTransition(savedGraph, tempGraph, isNewRequested, createNewOnto_Window_WithSavedgraph);
+
+ // Consume the save operation even after the transition is made.
+ _saveFSM.OnStateChangedEvent += () => { _saveOp = SaveOp.None; };
+
+ InitState();
+
+ NodeConnection.OnConnectionCreated -= saveConnection;
+ NodeConnection.OnConnectionCreated += saveConnection;
+ }
+
+ /// <summary>
+ /// This hanldes setting up the proper state based on the window's graph.
+ /// </summary>
+ internal void InitState()
+ {
+ // If the window has a valid graph and editable.
+ if (_window.graph != null && _window.GetMode() == NodeEditorWindow.Mode.Edit) {
+
+ string path = getCurrentGraphPath();
+
+ // If the graph is temp.
+ if (path.Contains(kTempGraphDirectory)) {
+ SetState(SaveState.TempGraph);
+ }
+
+ // If the graph is saved (not a temp).
+ else {
+ SetState(SaveState.SavedGraph);
+ }
+ }
+
+ // Window is fresh, no graph yet set.
+ else {
+ SetState(SaveState.NoGraph);
+ }
+ }
+
+ /// <summary>
+ /// Get the path from open file dialog.
+ /// </summary>
+ /// <returns></returns>
+ private string getGraphFilePath()
+ {
+ string path = EditorUtility.OpenFilePanel("Open Node Graph", "Assets/", "asset");
+
+ // If the path is outside the project's asset folder.
+ if (!path.Contains(Application.dataPath)) {
+
+ // If the selection was not cancelled...
+ if (!string.IsNullOrEmpty(path)) {
+ _window.ShowNotification(new GUIContent("Please select a Graph asset within the project's Asset folder."));
+ return null;
+ }
+ }
+
+ return path;
+ }
+
+ /// <summary>
+ /// Assumes that the path is already valid.
+ /// </summary>
+ /// <param name="path"></param>
+ private void loadGraph(string path)
+ {
+ int assetIndex = path.IndexOf("/Assets/");
+ path = path.Substring(assetIndex + 1);
+
+ var graph = AssetDatabase.LoadAssetAtPath<NodeGraph>(path);
+ _window.SetGraph(graph);
+ }
+
+ /// <summary>
+ /// Gets the file path to save the canavs at.
+ /// </summary>
+ /// <returns></returns>
+ private string getSaveFilePath()
+ {
+ string path = EditorUtility.SaveFilePanelInProject("Save Node Graph", "NewNodeGraph", "asset", "Select a destination to save the graph.");
+
+ if (string.IsNullOrEmpty(path)) {
+ return "";
+ }
+
+ return path;
+ }
+
+ #region Save Operations
+
+ /// <summary>
+ /// Creates and adds a node to the graph.
+ /// </summary>
+ /// <param name="t"></param>
+ /// <param name="bt"></param>
+ /// <returns></returns>
+ public static Node CreateNode(Type t, NodeGraph g)
+ {
+ try {
+
+ var node = ScriptableObject.CreateInstance(t) as Node;
+ AssetDatabase.AddObjectToAsset(node, g);
+
+ // Optional, set reference to graph: node.graph = g
+
+ node.Init();
+ g.Add(node);
+ return node;
+ }
+
+ catch (Exception e) {
+ throw new UnityException(e.Message);
+ }
+ }
+
+ /// <summary>
+ /// Creates and adds a node to the graph.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="bt"></param>
+ /// <returns></returns>
+ public static Node CreateNode<T>(NodeGraph g) where T : Node
+ {
+ var node = ScriptableObject.CreateInstance<T>();
+ AssetDatabase.AddObjectToAsset(node, g);
+
+ // Optional, set reference to graph: node.graph = g
+
+ node.Init();
+ g.Add(node);
+ return node;
+ }
+
+ /// <summary>
+ /// Creates a graph asset and saves it.
+ /// </summary>
+ /// <param name="path">The full path including name and extension.</param>
+ /// <returns></returns>
+ public static NodeGraph CreateNodeGraph(string path)
+ {
+ // We create a graph asset in the data base in order to add node assets
+ // under the graph. This way things are organized in the editor.
+ //
+ // The drawback is that we need to create a temp asset for the tree
+ // and make sure it does not linger if the temp asset is discarded.
+ //
+ // This means that we need to have a persistent directoy to store temp
+ // assets.
+
+ var graph = ScriptableObject.CreateInstance<NodeGraph>();
+
+ AssetDatabase.CreateAsset(graph, path);
+ AssetDatabase.SaveAssets();
+ AssetDatabase.Refresh();
+
+ return graph;
+ }
+
+ /// <summary>
+ /// Creates a new temporary node graph.
+ /// </summary>
+ /// <returns></returns>
+ private NodeGraph createNew()
+ {
+ string tempPath = getTempFilePath();
+
+ if (!string.IsNullOrEmpty(tempPath)) {
+
+ _window.ShowNotification(new GUIContent("New Graph Created"));
+ return CreateNodeGraph(tempPath);
+ }
+
+ return null;
+ }
+
+ // Create a new temp graph on an empty window or with a temp graph.
+ private bool createNewOnto_Window_WithTempOrEmpty()
+ {
+ _window.SetGraph(createNew());
+ return true;
+ }
+
+ // Saves the current active graph then loads a new graph.
+ private bool createNewOnto_Window_WithSavedgraph()
+ {
+ // Save the old graph to avoid loss.
+ AssetDatabase.SaveAssets();
+
+ _window.SetGraph(createNew());
+
+ return true;
+ }
+
+ // Load a graph to a window that has no graph active.
+ private bool loadOnto_EmptyWindow()
+ {
+ loadGraph(getGraphFilePath());
+ return true;
+ }
+
+ // Load a graph to a window that has a temp graph active.
+ private bool loadOnto_Window_WithTempgraph()
+ {
+ string path = getGraphFilePath();
+
+ if (!string.IsNullOrEmpty(path)) {
+
+ // Get rid of the temporary graph.
+ AssetDatabase.DeleteAsset(getCurrentGraphPath());
+ loadGraph(path);
+ return true;
+ }
+
+ return false;
+ }
+
+ // Load a graph to a window that has a saved graph active.
+ private bool loadOnto_Window_WithSavedgraph()
+ {
+ string path = getGraphFilePath();
+
+ if (!string.IsNullOrEmpty(path)) {
+
+ // Save the old graph.
+ save();
+ loadGraph(path);
+ return true;
+ }
+
+ return false;
+ }
+
+ // Makes the temporary graph into a saved graph.
+ private bool saveTempAs()
+ {
+ string newPath = getSaveFilePath();
+ string currentPath = getCurrentGraphPath();
+
+ //If asset exists on path, delete it first.
+ if (AssetDatabase.LoadAssetAtPath<ScriptableObject>(newPath) != null) {
+ AssetDatabase.DeleteAsset(newPath);
+ }
+
+ string result = AssetDatabase.ValidateMoveAsset(currentPath, newPath);
+
+ if (result.Length == 0) {
+ AssetDatabase.MoveAsset(currentPath, newPath);
+ save();
+ return true;
+ }
+
+ else {
+ Debug.LogError(result);
+ return false;
+ }
+ }
+
+ // Copies the current active graph to a new location.
+ private bool saveCloneAs()
+ {
+ string newPath = getSaveFilePath();
+
+ if (!string.IsNullOrEmpty(newPath)) {
+
+ string currentPath = getCurrentGraphPath();
+
+ AssetDatabase.CopyAsset(currentPath, newPath);
+ AssetDatabase.SetMainObject(_window.graph, currentPath);
+
+ save();
+ return true;
+ }
+
+ return false;
+ }
+
+ // Saves the current graph (not a temp graph).
+ private bool save()
+ {
+ _window.graph.OnSave();
+ AssetDatabase.SaveAssets();
+ AssetDatabase.Refresh();
+
+ _window.ShowNotification(new GUIContent("Graph Saved"));
+ return true;
+ }
+
+ // Helper method for the NodeConnection.OnConnectionCreated callback.
+ private void saveConnection(NodeConnection conn)
+ {
+ if (!AssetDatabase.Contains(conn)) {
+ AssetDatabase.AddObjectToAsset(conn, _window.graph);
+ }
+ }
+
+ #endregion
+
+ /// <summary>
+ /// Handles deleting temporary graph or saving valid graph.
+ /// </summary>
+ internal void Cleanup()
+ {
+ // Only save/delete things if we are in edit mode.
+ if (_window.GetMode() != NodeEditorWindow.Mode.Edit) {
+ return;
+ }
+
+ SaveState state = _saveFSM.CurrentState.Value;
+
+ if (state == SaveState.TempGraph) {
+ AssetDatabase.DeleteAsset(getCurrentGraphPath());
+ }
+
+ else if (state == SaveState.SavedGraph) {
+ save();
+ }
+ }
+
+ /*
+ * These are conditions used the save FSM to know when to transition.
+ * */
+ private bool isNewRequested() { return _saveOp == SaveOp.New; }
+ private bool isLoadRequested() { return _saveOp == SaveOp.Load; }
+ private bool isSaveRequested() { return _saveOp == SaveOp.Save; }
+ private bool isSaveAsRequested() { return _saveOp == SaveOp.SaveAs; }
+ private bool isSaveOrSaveAsRequested() { return isSaveAsRequested() || isSaveRequested(); }
+
+ /*
+ * These are the events that drive the save manager.
+ * Whenever one of this is fired, the save operation is set
+ * and the save FSM updated.
+ * */
+ internal void RequestNew() { _saveOp = SaveOp.New; _saveFSM.Update(); }
+ internal void RequestLoad() { _saveOp = SaveOp.Load; _saveFSM.Update(); }
+ internal void RequestSave() { _saveOp = SaveOp.Save; _saveFSM.Update(); }
+ internal void RequestSaveAs() { _saveOp = SaveOp.SaveAs; _saveFSM.Update(); }
+
+ private string getTempFilePath()
+ {
+ string tempRoot = getTempDirPath();
+
+ if (string.IsNullOrEmpty(tempRoot)) {
+ return "";
+ }
+
+ string filename = kTempFileName + _window.GetInstanceID().ToString().Ext("asset");
+ return tempRoot.Dir(filename);
+ }
+
+ internal void SetState(SaveState state)
+ {
+ _saveFSM.SetCurrentState(state);
+ }
+
+ internal bool IsInNographState()
+ {
+ return _saveFSM.CurrentState.Value == SaveState.NoGraph;
+ }
+
+ internal SaveState CurrentState()
+ {
+ return _saveFSM.CurrentState.Value;
+ }
+
+ private string getCurrentGraphPath()
+ {
+ return AssetDatabase.GetAssetPath(_window.graph);
+ }
+
+ private string getTempDirPath()
+ {
+ string[] dirs = Directory.GetDirectories(Application.dataPath, kTempGraphDirectory, SearchOption.AllDirectories);
+
+ // Return first occurance containing targetFolderName.
+ if (dirs.Length != 0) {
+ return getTempPathRelativeToAssets(dirs[0]);
+ }
+
+ // Could not find anything. Make the folder
+ string rootPath = getPathToRootUNEB();
+
+ if (!string.IsNullOrEmpty(rootPath)) {
+ var dirInfo = Directory.CreateDirectory(rootPath.Dir(kTempGraphDirectory));
+ return getTempPathRelativeToAssets(dirInfo.FullName);
+ }
+
+ else {
+ return "";
+ }
+ }
+
+ private static string getPathToRootUNEB()
+ {
+ // Find the UNEB project root directory within the Unity project.
+ var dirs = Directory.GetDirectories(Application.dataPath, kRootUNEB, SearchOption.AllDirectories);
+
+ if (dirs.Length != 0) {
+ return dirs[0];
+ }
+ else {
+ Debug.LogError("Could not find project root: /" + kRootUNEB + '/');
+ return "";
+ }
+ }
+
+ // Assumes that the fullTempPath is valid.
+ private static string getTempPathRelativeToAssets(string fullTempPath)
+ {
+ int index = fullTempPath.IndexOf("Assets");
+ return fullTempPath.Substring(index);
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Editor/SaveManager.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Editor/SaveManager.cs.meta
new file mode 100644
index 00000000..48c5f044
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Editor/SaveManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2c1fb70b507fdef4e947a73357d0d811
+timeCreated: 1503072834
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/FlowTraversal.cs b/Other/NodeEditorExamples/Assets/UNEB/FlowTraversal.cs
new file mode 100644
index 00000000..eb795dfc
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/FlowTraversal.cs
@@ -0,0 +1,12 @@
+
+namespace UNEB
+{
+ /// <summary>
+ /// Uni-directional graph traversal.
+ /// Does not support cycles.
+ /// </summary>
+ public class FlowTraversal
+ {
+
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/FlowTraversal.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/FlowTraversal.cs.meta
new file mode 100644
index 00000000..69e5ca25
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/FlowTraversal.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d88ae7fbcd48f58469e623dac843578b
+timeCreated: 1503204799
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Node.cs b/Other/NodeEditorExamples/Assets/UNEB/Node.cs
new file mode 100644
index 00000000..a00ac329
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Node.cs
@@ -0,0 +1,305 @@
+
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+using UNEB.Utility;
+
+namespace UNEB
+{
+ /// <summary>
+ /// The visual representation of a logic unit such as an object or function.
+ /// </summary>
+ public abstract class Node : ScriptableObject
+ {
+ public static readonly Vector2 kDefaultSize = new Vector2(140f, 110f);
+
+ /// <summary>
+ /// The space reserved between knobs.
+ /// </summary>
+ public const float kKnobOffset = 4f;
+
+ /// <summary>
+ /// The space reserved for the header (title) of the node.
+ /// </summary>
+ public const float kHeaderHeight = 15f;
+
+ /// <summary>
+ /// The max label width for a field in the body.
+ /// </summary>
+ public const float kBodyLabelWidth = 100f;
+
+ /// <summary>
+ /// The rect of the node in canvas space.
+ /// </summary>
+ [HideInInspector]
+ public Rect bodyRect;
+
+ /// <summary>
+ /// How much additional offset to apply when resizing.
+ /// </summary>
+ public const float resizePaddingX = 20f;
+
+ [SerializeField, HideInInspector]
+ private List<NodeOutput> _outputs = new List<NodeOutput>();
+
+ [SerializeField, HideInInspector]
+ private List<NodeInput> _inputs = new List<NodeInput>();
+
+ // Hides the node asset.
+ // Sets up the name via type information.
+ void OnEnable()
+ {
+ hideFlags = HideFlags.HideInHierarchy;
+ name = GetType().Name;
+
+#if UNITY_EDITOR
+ name = ObjectNames.NicifyVariableName(name);
+#endif
+
+ }
+
+ /// <summary>
+ /// Always call the base OnDisable() to cleanup the connection objects.
+ /// </summary>
+ protected virtual void OnDestroy()
+ {
+ _inputs.RemoveAll(
+ (input) =>
+ {
+ ScriptableObject.DestroyImmediate(input, true);
+ return true;
+ });
+
+ _outputs.RemoveAll(
+ (output) =>
+ {
+ ScriptableObject.DestroyImmediate(output, true);
+ return true;
+ });
+ }
+
+ /// <summary>
+ /// Use this for initialization.
+ /// </summary>
+ public virtual void Init() {
+ bodyRect.size = kDefaultSize;
+ }
+
+ public virtual void OnNodeGUI()
+ {
+ OnNodeHeaderGUI();
+ OnConnectionsGUI();
+ onBodyGuiInternal();
+ }
+
+ /// <summary>
+ /// Renders the node connections. By default, after the header.
+ /// </summary>
+ public virtual void OnConnectionsGUI()
+ {
+ int inputCount = _inputs.Count;
+ int outputCount = _outputs.Count;
+
+ int maxCount = (int)Mathf.Max(inputCount, outputCount);
+
+ // The entire knob section is stacked rows of inputs and outputs.
+ for (int i = 0; i < maxCount; ++i) {
+
+ GUILayout.BeginHorizontal();
+
+ // Render the knob layout horizontally.
+ if (i < inputCount) _inputs[i].OnConnectionGUI(i);
+ if (i < outputCount) _outputs[i].OnConnectionGUI(i);
+
+ GUILayout.EndHorizontal();
+ }
+ }
+
+ /// <summary>
+ /// Render the title/header of the node. By default, renders on top of the node.
+ /// </summary>
+ public virtual void OnNodeHeaderGUI()
+ {
+ // Draw header
+ GUILayout.Box(name, HeaderStyle);
+ }
+
+ /// <summary>
+ /// Draws the body of the node. By default, after the connections.
+ /// </summary>
+ public virtual void OnBodyGUI() { }
+
+ // Handles the coloring and layout of the body.
+ // This is for convenience so the user does not need to worry about this boiler plate code.
+ protected virtual void onBodyGuiInternal()
+ {
+ float oldLabelWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = kBodyLabelWidth;
+
+ // Cache the old label style.
+ // Do this first before changing the EditorStyles.label style.
+ // So the original values are kept.
+ var oldLabelStyle = UnityLabelStyle;
+
+ // Setup new values for the label style.
+ EditorStyles.label.normal = DefaultStyle.normal;
+ EditorStyles.label.active = DefaultStyle.active;
+ EditorStyles.label.focused = DefaultStyle.focused;
+
+ EditorGUILayout.BeginVertical();
+
+ GUILayout.Space(kKnobOffset);
+ OnBodyGUI();
+
+ // Revert back to old label style.
+ EditorStyles.label.normal = oldLabelStyle.normal;
+ EditorStyles.label.active = oldLabelStyle.active;
+ EditorStyles.label.focused = oldLabelStyle.focused;
+
+ EditorGUIUtility.labelWidth = oldLabelWidth;
+ EditorGUILayout.EndVertical();
+ }
+
+ public NodeInput AddInput(string name = "input", bool multipleConnections = false)
+ {
+ var input = NodeInput.Create(this, multipleConnections);
+ input.name = name;
+ _inputs.Add(input);
+
+ return input;
+ }
+
+ public NodeOutput AddOutput(string name = "output", bool multipleConnections = false)
+ {
+ var output = NodeOutput.Create(this, multipleConnections);
+ output.name = name;
+ _outputs.Add(output);
+
+ return output;
+ }
+
+ /// <summary>
+ /// Called when the output knob had an input connection removed.
+ /// </summary>
+ /// <param name="removedInput"></param>
+ public virtual void OnInputConnectionRemoved(NodeInput removedInput) { }
+
+ /// <summary>
+ /// Called when the output knob made a connection to an input knob.
+ /// </summary>
+ /// <param name="addedInput"></param>
+ public virtual void OnNewInputConnection(NodeInput addedInput) { }
+
+ public IEnumerable<NodeOutput> Outputs
+ {
+ get { return _outputs; }
+ }
+
+ public IEnumerable<NodeInput> Inputs
+ {
+ get { return _inputs; }
+ }
+
+ public int InputCount
+ {
+ get { return _inputs.Count; }
+ }
+
+ public int OutputCount
+ {
+ get { return _outputs.Count; }
+ }
+
+ public NodeInput GetInput(int index)
+ {
+ return _inputs[index];
+ }
+
+ public NodeOutput GetOutput(int index)
+ {
+ return _outputs[index];
+ }
+
+ /// <summary>
+ /// Get the Y value of the top header.
+ /// </summary>
+ public float HeaderTop
+ {
+ get { return bodyRect.yMin + kHeaderHeight; }
+ }
+
+ /// <summary>
+ /// Resize the node to fit the knobs.
+ /// </summary>
+ public void FitKnobs()
+ {
+ int maxCount = (int)Mathf.Max(_inputs.Count, _outputs.Count);
+
+ float totalKnobsHeight = maxCount * NodeConnection.kMinSize.y;
+ float totalOffsetHeight = (maxCount - 1) * kKnobOffset;
+
+ float heightRequired = totalKnobsHeight + totalOffsetHeight + kHeaderHeight;
+
+ // Add some extra height at the end.
+ bodyRect.height = heightRequired + kHeaderHeight / 2f;
+ }
+
+ #region Styles and Contents
+
+ private static GUIStyle _unityLabelStyle;
+
+ /// <summary>
+ /// Caches the default EditorStyle.
+ /// There is a strange bug with it being overriden when opening an Animation window.
+ /// </summary>
+ public static GUIStyle UnityLabelStyle
+ {
+ get
+ {
+ if (_unityLabelStyle == null) {
+ _unityLabelStyle = new GUIStyle(EditorStyles.label);
+ }
+
+ return _unityLabelStyle;
+ }
+ }
+
+ private static GUIStyle _defStyle;
+ public static GUIStyle DefaultStyle
+ {
+ get
+ {
+ if (_defStyle == null) {
+ _defStyle = new GUIStyle(EditorStyles.label);
+ _defStyle.normal.textColor = Color.white * 0.9f;
+ _defStyle.active.textColor = ColorExtensions.From255(126, 186, 255) * 0.9f;
+ _defStyle.focused.textColor = ColorExtensions.From255(126, 186, 255);
+ }
+
+ return _defStyle;
+ }
+ }
+
+ private static GUIStyle _headerStyle;
+ public GUIStyle HeaderStyle
+ {
+ get
+ {
+ if (_headerStyle == null) {
+
+ _headerStyle = new GUIStyle();
+
+ _headerStyle.stretchWidth = true;
+ _headerStyle.alignment = TextAnchor.MiddleLeft;
+ _headerStyle.padding.left = 5;
+ _headerStyle.normal.textColor = Color.white * 0.9f;
+ _headerStyle.fixedHeight = kHeaderHeight;
+ }
+
+ return _headerStyle;
+ }
+ }
+
+ #endregion
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Node.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Node.cs.meta
new file mode 100644
index 00000000..19287a49
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Node.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 7701d85b0845e514cbf1da5e92a37927
+timeCreated: 1501781551
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/NodeConnection.cs b/Other/NodeEditorExamples/Assets/UNEB/NodeConnection.cs
new file mode 100644
index 00000000..40f4d6de
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/NodeConnection.cs
@@ -0,0 +1,91 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace UNEB
+{
+ public abstract class NodeConnection : ScriptableObject
+ {
+ public static readonly Vector2 kMinSize = new Vector2(12f, 12f);
+ public static readonly Vector2 kMinHalfSize = kMinSize / 2f;
+
+ [HideInInspector]
+ public Rect bodyRect = new Rect(Vector2.zero, kMinSize);
+
+ public System.Func<object> getValue;
+
+ public static System.Action<NodeConnection> OnConnectionCreated;
+
+ [SerializeField, HideInInspector]
+ protected Node parentNode;
+
+ void OnEnable()
+ {
+ hideFlags = HideFlags.HideInHierarchy;
+ }
+
+ public virtual void Init(Node parent)
+ {
+ name = "connection";
+ parentNode = parent;
+ }
+
+ /// <summary>
+ /// The node associated with this knob.
+ /// </summary>
+ public Node ParentNode
+ {
+ get { return parentNode; }
+ }
+
+ public abstract GUIStyle GetStyle();
+
+ public virtual void OnConnectionGUI(int order)
+ {
+ OnNameGUI();
+
+ // Position the knobs properly for the draw pass of the knobs in the editor.
+ float yPos = parentNode.HeaderTop + order * GetStyle().fixedHeight + Node.kKnobOffset;
+ bodyRect.center = new Vector2(GetNodeAnchor(), 0f);
+ bodyRect.y = yPos;
+ }
+
+ public virtual void OnNameGUI()
+ {
+ GUILayout.Label(Content, GetStyle());
+ }
+
+ private GUIContent _content;
+ private GUIContent Content
+ {
+ get
+ {
+ if (_content == null) {
+ _content = new GUIContent(name);
+ }
+
+ return _content;
+ }
+ }
+
+ /// <summary>
+ /// What side of the node should the knob anchor to.
+ /// </summary>
+ /// <returns></returns>
+ public abstract float GetNodeAnchor();
+
+ /// <summary>
+ /// Attempts to get the value of the specified type.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ public T GetValue<T>()
+ {
+ if (getValue != null) {
+ return (T)getValue();
+ }
+
+ return default(T);
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/NodeConnection.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/NodeConnection.cs.meta
new file mode 100644
index 00000000..1f8e4fa4
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/NodeConnection.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4a46115d42daa3e438d70eca59efba6b
+timeCreated: 1501804873
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/NodeEditorState.cs b/Other/NodeEditorExamples/Assets/UNEB/NodeEditorState.cs
new file mode 100644
index 00000000..f11cddc2
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/NodeEditorState.cs
@@ -0,0 +1,18 @@
+
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace UNEB
+{
+ public class NodeEditorState
+ {
+
+ public Node selectedNode;
+ public Vector2 lastClickedPosition;
+
+ public NodeOutput selectedOutput;
+ public NodeInput selectedInput;
+
+ public System.Type typeToCreate;
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/NodeEditorState.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/NodeEditorState.cs.meta
new file mode 100644
index 00000000..f13de28d
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/NodeEditorState.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c4faacf28f5e1be4c9d441c74e2c9eda
+timeCreated: 1501899343
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/NodeGraph.cs b/Other/NodeEditorExamples/Assets/UNEB/NodeGraph.cs
new file mode 100644
index 00000000..e977e698
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/NodeGraph.cs
@@ -0,0 +1,57 @@
+
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace UNEB
+{
+ /// <summary>
+ /// Represents a graph of nodes.
+ /// </summary>
+ public class NodeGraph : ScriptableObject
+ {
+ /// <summary>
+ /// The types of nodes accepted by the graph.
+ /// </summary>
+ public static HashSet<Type> nodeTypes = new HashSet<Type>();
+
+ [HideInInspector]
+ public List<Node> nodes = new List<Node>();
+
+ /// <summary>
+ /// Add a node to the graph.
+ /// It is recommended that the save manager adds the nodes.
+ /// </summary>
+ /// <param name="n"></param>
+ public void Add(Node n)
+ {
+ nodes.Add(n);
+ }
+
+ /// <summary>
+ /// Removes a node from the graph but it is not destroyed.
+ /// </summary>
+ /// <param name="node"></param>
+ public void Remove(Node node)
+ {
+ nodes.Remove(node);
+ }
+
+ /// <summary>
+ /// Put the node at the end of the node list.
+ /// </summary>
+ /// <param name="node"></param>
+ public void PushToEnd(Node node)
+ {
+ if (nodes.Remove(node)) {
+ nodes.Add(node);
+ }
+ }
+
+ /// <summary>
+ /// Gets called right before the graph is saved.
+ /// Can be used to setup things before saving like sorting nodes.
+ /// </summary>
+ public virtual void OnSave() { }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/NodeGraph.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/NodeGraph.cs.meta
new file mode 100644
index 00000000..c2ffc888
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/NodeGraph.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5472e37c6bced914daa030c486155845
+timeCreated: 1501782614
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/NodeInput.cs b/Other/NodeEditorExamples/Assets/UNEB/NodeInput.cs
new file mode 100644
index 00000000..fab62c10
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/NodeInput.cs
@@ -0,0 +1,114 @@
+
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+namespace UNEB
+{
+ public class NodeInput : NodeConnection
+ {
+ [SerializeField]
+ private bool _bCanHaveMultipleConnections;
+
+ [SerializeField]
+ private List<NodeOutput> _outputs = new List<NodeOutput>();
+
+ private GUIStyle _style;
+
+ public virtual void Init(Node parent, bool multipleConnections = true)
+ {
+ base.Init(parent);
+ name = "input";
+ _bCanHaveMultipleConnections = multipleConnections;
+ }
+
+ /// <summary>
+ /// Should only be called by NodeOutput
+ /// </summary>
+ /// <param name="output"></param>
+ internal void Connect(NodeOutput output)
+ {
+ if (!_outputs.Contains(output))
+ _outputs.Add(output);
+ }
+
+ /// <summary>
+ /// Should only be called by NodeOutput.
+ /// </summary>
+ internal void Disconnect(NodeOutput output)
+ {
+ if (_outputs.Contains(output))
+ _outputs.Remove(output);
+ }
+
+ public bool HasOutputConnected()
+ {
+ return _outputs.Count > 0;
+ }
+
+ public void RemoveAll() {
+ // Cache the outputs since in order to disconnect them,
+ // they must be removed from _outputs List.
+ var outputs = new List<NodeOutput>(_outputs);
+
+ _outputs.Clear();
+
+ foreach (NodeOutput output in outputs) {
+ output.Remove(this);
+ }
+ }
+
+ public List<NodeOutput> Outputs
+ {
+ get { return _outputs; }
+ }
+
+ public int OutputCount
+ {
+ get { return _outputs.Count; }
+ }
+
+ public NodeOutput GetOutput(int index)
+ {
+ return _outputs[index];
+ }
+
+ public override GUIStyle GetStyle()
+ {
+ if (_style == null) {
+
+ _style = new GUIStyle();
+
+ _style.fixedHeight = kMinSize.y + Node.kKnobOffset;
+ _style.alignment = TextAnchor.MiddleLeft;
+ _style.normal.textColor = Color.white * 0.9f;
+ _style.padding.left = (int)kMinHalfSize.x + 5;
+ }
+
+ return _style;
+ }
+
+ /// <summary>
+ /// The input is anchored at the left side of the node.
+ /// </summary>
+ /// <returns></returns>
+ public override float GetNodeAnchor()
+ {
+ return parentNode.bodyRect.xMin;
+ }
+
+ public bool bCanHaveMultipleConnections
+ {
+ get { return _bCanHaveMultipleConnections; }
+ }
+
+ public static NodeInput Create(Node parent, bool multipleConnections = false)
+ {
+ var input = ScriptableObject.CreateInstance<NodeInput>();
+ input.Init(parent, multipleConnections);
+
+ NodeConnection.OnConnectionCreated(input);
+ return input;
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/NodeInput.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/NodeInput.cs.meta
new file mode 100644
index 00000000..62740a8d
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/NodeInput.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0bace920f087ccf4595fad22948ac526
+timeCreated: 1501804790
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/NodeOutput.cs b/Other/NodeEditorExamples/Assets/UNEB/NodeOutput.cs
new file mode 100644
index 00000000..4a64ec73
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/NodeOutput.cs
@@ -0,0 +1,157 @@
+
+using System.Linq;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace UNEB
+{
+ public class NodeOutput : NodeConnection
+ {
+ [SerializeField]
+ private bool _bCanHaveMultipleConnections;
+
+ [SerializeField]
+ private List<NodeInput> _inputs = new List<NodeInput>();
+
+ private GUIStyle _style;
+
+ public virtual void Init(Node parent, bool multipleConnections = true)
+ {
+ base.Init(parent);
+ _bCanHaveMultipleConnections = multipleConnections;
+ }
+
+ public List<NodeInput> Inputs
+ {
+ get { return _inputs; }
+ }
+
+ public int InputCount
+ {
+ get { return _inputs.Count; }
+ }
+
+ public NodeInput GetInput(int index)
+ {
+ return _inputs[index];
+ }
+
+ /// <summary>
+ /// Returns true if the connection was added successfully.
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ public bool Add(NodeInput input)
+ {
+ if (!CanConnectInput(input)) {
+ return false;
+ }
+
+ // The input cannot be connected to anything.
+ // 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() && !input.bCanHaveMultipleConnections) {
+
+ // Changes to the inputs need to be properly handled by the Action system,
+ // so it works with undo.
+ Debug.LogWarning("Cannot add an input that is already connected");
+ return false;
+ }
+
+ input.Connect(this);
+ _inputs.Add(input);
+
+ parentNode.OnNewInputConnection(input);
+
+ return true;
+ }
+
+ /// <summary>
+ /// Tests to see if the output can be connected to the input.
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ public bool CanConnectInput(NodeInput input)
+ {
+ if (input == null) {
+ Debug.LogError("Attempted to add a null input.");
+ return false;
+ }
+
+ // Avoid self-connecting
+ if (parentNode.Inputs.Contains(input)) {
+ Debug.LogWarning("Cannot self connect.");
+ return false;
+ }
+
+ // Avoid connecting when it is already connected.
+ if (input.Outputs.Contains(this)) {
+ Debug.LogWarning("Already Connected");
+ return false;
+ }
+
+ return true;
+ }
+
+ public void Remove(NodeInput input)
+ {
+ if (_inputs.Remove(input)) {
+ parentNode.OnInputConnectionRemoved(input);
+ input.Disconnect(this);
+ }
+ }
+
+ public void RemoveAll()
+ {
+ // Cache the inputs since in order to disconnect them,
+ // they must be removed from _inputs List.
+ var inputs = new List<NodeInput>(_inputs);
+
+ _inputs.Clear();
+
+ foreach (NodeInput input in inputs) {
+ parentNode.OnInputConnectionRemoved(input);
+ input.Disconnect(this);
+ }
+ }
+
+ public override GUIStyle GetStyle()
+ {
+ if (_style == null) {
+
+ _style = new GUIStyle();
+
+ _style.fixedHeight = kMinSize.y + Node.kKnobOffset;
+ _style.alignment = TextAnchor.MiddleRight;
+ _style.normal.textColor = Color.white * 0.9f;
+ _style.padding.right = (int)kMinHalfSize.x + 5;
+ }
+
+ return _style;
+ }
+
+ /// <summary>
+ /// The output is anchored at the right side of the node.
+ /// </summary>
+ /// <returns></returns>
+ public override float GetNodeAnchor()
+ {
+ return parentNode.bodyRect.xMax;
+ }
+
+ public bool bCanHaveMultipleConnections
+ {
+ get { return _bCanHaveMultipleConnections; }
+ }
+
+ public static NodeOutput Create(Node parent, bool multipleConnections = true)
+ {
+ var output = ScriptableObject.CreateInstance<NodeOutput>();
+ output.Init(parent, multipleConnections);
+
+ NodeConnection.OnConnectionCreated(output);
+ return output;
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/NodeOutput.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/NodeOutput.cs.meta
new file mode 100644
index 00000000..1178dc35
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/NodeOutput.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 505fc75df63b6cd4694c90b7f0428f99
+timeCreated: 1501804800
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Nodes.meta b/Other/NodeEditorExamples/Assets/UNEB/Nodes.meta
new file mode 100644
index 00000000..8a294dde
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Nodes.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: e0dd5d51fa34588489d6675851e9486e
+folderAsset: yes
+timeCreated: 1502911891
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Nodes/BasicNode.cs b/Other/NodeEditorExamples/Assets/UNEB/Nodes/BasicNode.cs
new file mode 100644
index 00000000..fd9ea801
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Nodes/BasicNode.cs
@@ -0,0 +1,39 @@
+
+using UnityEngine;
+using UnityEditor;
+
+namespace UNEB
+{
+ public class BasicNode : Node
+ {
+ private int _someInt = 0;
+
+ public override void Init()
+ {
+ base.Init();
+
+ AddInput("Input");
+ AddOutput("Ouput");
+
+ FitKnobs();
+
+ // Fit the int field, need to automate this.
+ bodyRect.height += 20f;
+ }
+
+ public override void OnBodyGUI()
+ {
+ _someInt = EditorGUILayout.IntField("Int Value", _someInt);
+ }
+
+ public override void OnNewInputConnection(NodeInput addedInput)
+ {
+ Debug.Log("Added Input: " + addedInput.name);
+ }
+
+ public override void OnInputConnectionRemoved(NodeInput removedInput)
+ {
+ Debug.Log("Removed Input: " + removedInput.name);
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Nodes/BasicNode.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Nodes/BasicNode.cs.meta
new file mode 100644
index 00000000..38d9d18c
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Nodes/BasicNode.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b0d0b3390e407b34d9672707671fdf01
+timeCreated: 1502911896
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/TempGraphsUNEB.meta b/Other/NodeEditorExamples/Assets/UNEB/TempGraphsUNEB.meta
new file mode 100644
index 00000000..dd9d21c8
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/TempGraphsUNEB.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: b885bb71b1d0fd34584e1392483dba6d
+folderAsset: yes
+timeCreated: 1503087061
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/TempGraphsUNEB/TempNodeGraphUNEB-18000.asset b/Other/NodeEditorExamples/Assets/UNEB/TempGraphsUNEB/TempNodeGraphUNEB-18000.asset
new file mode 100644
index 00000000..f562815f
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/TempGraphsUNEB/TempNodeGraphUNEB-18000.asset
@@ -0,0 +1,6515 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5472e37c6bced914daa030c486155845, type: 3}
+ m_Name: TempNodeGraphUNEB-18000
+ m_EditorClassIdentifier:
+ nodes:
+ - {fileID: 114649820198714802}
+ - {fileID: 114318772694394034}
+ - {fileID: 114247328516611494}
+ - {fileID: 114188287407102516}
+ - {fileID: 114488006925090048}
+ - {fileID: 114668404074355798}
+ - {fileID: 114372441715335820}
+ - {fileID: 114544046452556548}
+ - {fileID: 114318072981352580}
+ - {fileID: 114995943598026618}
+ - {fileID: 114372460049263836}
+ - {fileID: 114595714967894500}
+ - {fileID: 114809703780796474}
+ - {fileID: 114924491257293590}
+ - {fileID: 114298590628864988}
+ - {fileID: 114214789622764380}
+ - {fileID: 114094250832233624}
+ - {fileID: 114484120233952240}
+ - {fileID: 114372608875964954}
+ - {fileID: 114549266524813346}
+ - {fileID: 114724721532079774}
+ - {fileID: 114258201408638206}
+ - {fileID: 114416965029609000}
+ - {fileID: 114279443101610996}
+ - {fileID: 114535851105013628}
+ - {fileID: 114331226178011978}
+ - {fileID: 114978496358228684}
+ - {fileID: 114157618514019984}
+ - {fileID: 114127330872578466}
+ - {fileID: 114537698157735394}
+ - {fileID: 114592582420987538}
+ - {fileID: 114826471941662460}
+ - {fileID: 114495392188715312}
+ - {fileID: 114779143377165324}
+ - {fileID: 114508363775481748}
+ - {fileID: 114748890917427988}
+ - {fileID: 114212919586348082}
+ - {fileID: 114060468691274060}
+ - {fileID: 114586171112551252}
+ - {fileID: 114123719148343364}
+ - {fileID: 114343114984546550}
+ - {fileID: 114104407920392924}
+ - {fileID: 114627603537053588}
+ - {fileID: 114102133613934306}
+ - {fileID: 114032647566845792}
+ - {fileID: 114558006963751182}
+ - {fileID: 114735742031852318}
+ - {fileID: 114791909558126260}
+ - {fileID: 114753436896775260}
+ - {fileID: 114185767057852742}
+ - {fileID: 114342869155660718}
+ - {fileID: 114463183136394232}
+ - {fileID: 114291501057425104}
+ - {fileID: 114794504564065380}
+ - {fileID: 114105289680323532}
+ - {fileID: 114235848786241888}
+ - {fileID: 114216783342308070}
+ - {fileID: 114385647069057010}
+ - {fileID: 114155030097666606}
+ - {fileID: 114906112867144964}
+ - {fileID: 114582611350948750}
+ - {fileID: 114195846631795460}
+ - {fileID: 114970029795268052}
+ - {fileID: 114816260020250312}
+ - {fileID: 114899868845616516}
+ - {fileID: 114461922176674752}
+ - {fileID: 114851792330118846}
+ - {fileID: 114867537130609524}
+ - {fileID: 114729652895838470}
+ - {fileID: 114903470640933088}
+ - {fileID: 114492910285958856}
+ - {fileID: 114587963243139904}
+ - {fileID: 114220700694228568}
+ - {fileID: 114730562526222724}
+ - {fileID: 114964089510329778}
+ - {fileID: 114407112841337898}
+ - {fileID: 114580975342486084}
+ - {fileID: 114844738074964444}
+ - {fileID: 114693143912305152}
+ - {fileID: 114286271705629688}
+ - {fileID: 114709234588755810}
+ - {fileID: 114601912298373078}
+ - {fileID: 114169632940801564}
+ - {fileID: 114576911103601276}
+ - {fileID: 114638634703980764}
+ - {fileID: 114426660520134716}
+ - {fileID: 114312773077251228}
+ - {fileID: 114503251171754162}
+ - {fileID: 114035303143955214}
+ - {fileID: 114719136315363464}
+ - {fileID: 114055381488272514}
+ - {fileID: 114519746998358522}
+ - {fileID: 114222944304035782}
+ - {fileID: 114578668458250286}
+ - {fileID: 114442000406844188}
+ - {fileID: 114952593327603842}
+ - {fileID: 114786548535745842}
+ - {fileID: 114595812434298278}
+ - {fileID: 114677833350987524}
+ - {fileID: 114754120066644676}
+--- !u!114 &114001671155620418
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1252.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114729652895838470}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114011123281342946
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1602.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114407112841337898}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114021341993425826
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 132.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114649820198714802}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114021699380983960
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 2022.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114222944304035782}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114022396875520970
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 132.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114668404074355798}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114026035281217696
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1812.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114035303143955214}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114030281820682114
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1812.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114576911103601276}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114032647566845792
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 840
+ y: 660
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114046665484049786}
+ _inputs:
+ - {fileID: 114688430239101240}
+--- !u!114 &114035303143955214
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1680
+ y: 1320
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114026035281217696}
+ _inputs:
+ - {fileID: 114228224168405964}
+--- !u!114 &114036256417699856
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1042.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114463183136394232}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114045636928124764
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: -7.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114318772694394034}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114046015062868526
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1812.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114638634703980764}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114046665484049786
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 972.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114032647566845792}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114049435994216540
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1672.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114576911103601276}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114054398101695222
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1182.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114216783342308070}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114055381488272514
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1890
+ y: 0
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114354078374219062}
+ _inputs:
+ - {fileID: 114732689614608988}
+--- !u!114 &114057440960578784
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 2022.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114677833350987524}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114058908433932722
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 552.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114537698157735394}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114059270142671446
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 202.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114214789622764380}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114060468691274060
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 630
+ y: 1155
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114795600385364100}
+ _inputs:
+ - {fileID: 114692140502736702}
+--- !u!114 &114064592695255072
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1042.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114342869155660718}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114067836920298000
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1462.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114580975342486084}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114069368663378846
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 832.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114627603537053588}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114079228532555544
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1812.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114719136315363464}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114086803895435852
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 202.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114372460049263836}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114091354739448916
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 622.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114826471941662460}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114092724552326696
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 552.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114279443101610996}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114092793003749472
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1182.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114906112867144964}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114094250832233624
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 210
+ y: 990
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114955182263277056}
+ _inputs:
+ - {fileID: 114949153467399768}
+--- !u!114 &114102133613934306
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 840
+ y: 495
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114150513525053244}
+ _inputs:
+ - {fileID: 114296000429823454}
+--- !u!114 &114104407920392924
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 840
+ y: 165
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114564631989367198}
+ _inputs:
+ - {fileID: 114176198538265880}
+--- !u!114 &114105289680323532
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1050
+ y: 660
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114464153349159156}
+ _inputs:
+ - {fileID: 114975688528033068}
+--- !u!114 &114120408963611960
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1672.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114312773077251228}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114123719148343364
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 630
+ y: 1485
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114330711847355500}
+ _inputs:
+ - {fileID: 114303047529592570}
+--- !u!114 &114127330872578466
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 420
+ y: 1320
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114615187719956714}
+ _inputs:
+ - {fileID: 114513622963664910}
+--- !u!114 &114129556680958820
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 552.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114724721532079774}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114131937200386948
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 832.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114558006963751182}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114138540684449194
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 132.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114188287407102516}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114139763991355432
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 972.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114791909558126260}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114142066382874350
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 552.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114157618514019984}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114144399137022088
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1392.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114582611350948750}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114146543418525146
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1042.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114906112867144964}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114148187341695068
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 622.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114212919586348082}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114148521313434022
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 552.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114416965029609000}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114149206805687562
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1602.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114844738074964444}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114150513525053244
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 972.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114102133613934306}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114154234458328364
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1252.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114970029795268052}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114155030097666606
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1050
+ y: 1320
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114811656040908320}
+ _inputs:
+ - {fileID: 114694725891797130}
+--- !u!114 &114157618514019984
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 420
+ y: 1155
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114142066382874350}
+ _inputs:
+ - {fileID: 114337812970617456}
+--- !u!114 &114160035018724188
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 972.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114343114984546550}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114163812832239278
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: -7.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114372441715335820}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114167251018549298
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1672.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114426660520134716}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114169632940801564
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1680
+ y: 330
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114998529089306044}
+ _inputs:
+ - {fileID: 114686552855947096}
+--- !u!114 &114171629767782314
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1252.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114582611350948750}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114176198538265880
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 832.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114104407920392924}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114176425944178666
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1392.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114195846631795460}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114182654162089432
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1882.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114952593327603842}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114185767057852742
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 840
+ y: 1485
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114224169038261350}
+ _inputs:
+ - {fileID: 114628534875840702}
+--- !u!114 &114188287407102516
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 0
+ y: 495
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114138540684449194}
+ _inputs:
+ - {fileID: 114533503901114068}
+--- !u!114 &114192113363169920
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1812.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114312773077251228}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114195846631795460
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1260
+ y: 165
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114176425944178666}
+ _inputs:
+ - {fileID: 114415755779835962}
+--- !u!114 &114198595924211876
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: -7.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114318072981352580}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114204136897111338
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 202.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114298590628864988}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114207513964066840
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 552.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114535851105013628}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114207799271921918
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1462.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114407112841337898}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114212919586348082
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 630
+ y: 990
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114673998392407258}
+ _inputs:
+ - {fileID: 114148187341695068}
+--- !u!114 &114213799034815696
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1672.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114503251171754162}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114214789622764380
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 210
+ y: 825
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114344266174767670}
+ _inputs:
+ - {fileID: 114059270142671446}
+--- !u!114 &114215758429549356
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 2022.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114519746998358522}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114216783342308070
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1050
+ y: 990
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114054398101695222}
+ _inputs:
+ - {fileID: 114947244980610300}
+--- !u!114 &114217294926676420
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1812.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114426660520134716}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114220700694228568
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1470
+ y: 330
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114866156505868784}
+ _inputs:
+ - {fileID: 114758093600472114}
+--- !u!114 &114221303362999580
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 622.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114508363775481748}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114222944304035782
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1890
+ y: 330
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114021699380983960}
+ _inputs:
+ - {fileID: 114768861245032676}
+--- !u!114 &114223578349965356
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1042.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114794504564065380}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114224169038261350
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 972.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114185767057852742}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114228224168405964
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1672.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114035303143955214}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114233473679809758
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 202.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114924491257293590}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114233527380986214
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1462.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114286271705629688}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114235848786241888
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1050
+ y: 825
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114766069295182146}
+ _inputs:
+ - {fileID: 114323000564522410}
+--- !u!114 &114243640797432118
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 622.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114495392188715312}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114247328516611494
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 0
+ y: 330
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114414525360453778}
+ _inputs:
+ - {fileID: 114460546136940212}
+--- !u!114 &114250615166782950
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 412.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114258201408638206}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114255955519873922
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1672.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114601912298373078}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114258201408638206
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 420
+ y: 165
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114681217675056844}
+ _inputs:
+ - {fileID: 114250615166782950}
+--- !u!114 &114259854081428940
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 832.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114343114984546550}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114260543212820992
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 342.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114924491257293590}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114265837573135884
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1252.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114816260020250312}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114279443101610996
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 420
+ y: 495
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114092724552326696}
+ _inputs:
+ - {fileID: 114806391775952548}
+--- !u!114 &114286271705629688
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1470
+ y: 1485
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114413724917062214}
+ _inputs:
+ - {fileID: 114233527380986214}
+--- !u!114 &114291501057425104
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1050
+ y: 330
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114972869643474944}
+ _inputs:
+ - {fileID: 114642787968873662}
+--- !u!114 &114296000429823454
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 832.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114102133613934306}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114298590628864988
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 210
+ y: 660
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114783157596119098}
+ _inputs:
+ - {fileID: 114204136897111338}
+--- !u!114 &114303047529592570
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 622.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114123719148343364}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114308445692205998
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1182.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114794504564065380}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114312773077251228
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1680
+ y: 990
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114192113363169920}
+ _inputs:
+ - {fileID: 114120408963611960}
+--- !u!114 &114318072981352580
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 0
+ y: 1320
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114417450592935928}
+ _inputs:
+ - {fileID: 114198595924211876}
+--- !u!114 &114318772694394034
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 0
+ y: 165
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114333723834092882}
+ _inputs:
+ - {fileID: 114045636928124764}
+--- !u!114 &114323000564522410
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1042.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114235848786241888}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114324074816370092
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 132.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114488006925090048}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114325389654104252
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1602.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114587963243139904}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114330711847355500
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 762.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114123719148343364}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114331226178011978
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 420
+ y: 825
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114792452818695174}
+ _inputs:
+ - {fileID: 114623541315529784}
+--- !u!114 &114333723834092882
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 132.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114318772694394034}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114337812970617456
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 412.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114157618514019984}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114342869155660718
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1050
+ y: 0
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114377133730835656}
+ _inputs:
+ - {fileID: 114064592695255072}
+--- !u!114 &114343114984546550
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 840
+ y: 0
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114160035018724188}
+ _inputs:
+ - {fileID: 114259854081428940}
+--- !u!114 &114344266174767670
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 342.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114214789622764380}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114346240878861572
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1882.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114786548535745842}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114354078374219062
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 2022.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114055381488272514}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114363613899660596
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1672.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114709234588755810}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114372441715335820
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 0
+ y: 990
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114417378196762410}
+ _inputs:
+ - {fileID: 114163812832239278}
+--- !u!114 &114372460049263836
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 210
+ y: 0
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114642663622843824}
+ _inputs:
+ - {fileID: 114086803895435852}
+--- !u!114 &114372608875964954
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 210
+ y: 1320
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114874388098277048}
+ _inputs:
+ - {fileID: 114870878225041800}
+--- !u!114 &114377133730835656
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1182.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114342869155660718}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114377759737611548
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 412.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114537698157735394}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114378066669872004
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1462.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114730562526222724}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114378669117163648
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 762.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114495392188715312}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114380919628130816
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 762.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114592582420987538}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114385647069057010
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1050
+ y: 1155
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114655561224605726}
+ _inputs:
+ - {fileID: 114732635930678278}
+--- !u!114 &114397270286976436
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1672.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114719136315363464}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114407112841337898
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1470
+ y: 825
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114011123281342946}
+ _inputs:
+ - {fileID: 114207799271921918}
+--- !u!114 &114409187314540462
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 762.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114779143377165324}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114413724917062214
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1602.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114286271705629688}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114414525360453778
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 132.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114247328516611494}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114415755779835962
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1252.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114195846631795460}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114416965029609000
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 420
+ y: 330
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114148521313434022}
+ _inputs:
+ - {fileID: 114814935640544030}
+--- !u!114 &114417378196762410
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 132.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114372441715335820}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114417450592935928
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 132.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114318072981352580}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114419868793824710
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1252.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114867537130609524}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114421761065742202
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 2022.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114952593327603842}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114422984684629644
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1812.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114601912298373078}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114426660520134716
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1680
+ y: 825
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114217294926676420}
+ _inputs:
+ - {fileID: 114167251018549298}
+--- !u!114 &114428533554137858
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 622.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114592582420987538}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114435575373244152
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1602.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114964089510329778}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114442000406844188
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1890
+ y: 660
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114733855804583510}
+ _inputs:
+ - {fileID: 114577975947466440}
+--- !u!114 &114442915415878272
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 622.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114748890917427988}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114453339144657796
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 832.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114735742031852318}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114453818972680006
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 412.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114724721532079774}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114455813581842644
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1392.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114816260020250312}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114460546136940212
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: -7.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114247328516611494}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114461922176674752
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1260
+ y: 825
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114844909480189294}
+ _inputs:
+ - {fileID: 114520090539263432}
+--- !u!114 &114463183136394232
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1050
+ y: 165
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114743798990957344}
+ _inputs:
+ - {fileID: 114036256417699856}
+--- !u!114 &114464153349159156
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1182.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114105289680323532}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114472743358668682
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1602.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114580975342486084}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114481029219770476
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1462.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114693143912305152}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114484120233952240
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 210
+ y: 1155
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114493911685783342}
+ _inputs:
+ - {fileID: 114759216864638356}
+--- !u!114 &114488006925090048
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 0
+ y: 660
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114324074816370092}
+ _inputs:
+ - {fileID: 114734523107015782}
+--- !u!114 &114492910285958856
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1470
+ y: 0
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114541749899237478}
+ _inputs:
+ - {fileID: 114568567758687386}
+--- !u!114 &114493911685783342
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 342.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114484120233952240}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114495392188715312
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 630
+ y: 330
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114378669117163648}
+ _inputs:
+ - {fileID: 114243640797432118}
+--- !u!114 &114503251171754162
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1680
+ y: 1155
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114744951861517220}
+ _inputs:
+ - {fileID: 114213799034815696}
+--- !u!114 &114507278802011122
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: -7.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114668404074355798}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114508363775481748
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 630
+ y: 660
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114687940223319342}
+ _inputs:
+ - {fileID: 114221303362999580}
+--- !u!114 &114513622963664910
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 412.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114127330872578466}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114518411516238768
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 202.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114595714967894500}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114519746998358522
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1890
+ y: 165
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114215758429549356}
+ _inputs:
+ - {fileID: 114842706196820562}
+--- !u!114 &114520090539263432
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1252.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114461922176674752}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114526347215813776
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1252.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114851792330118846}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114533503901114068
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: -7.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114188287407102516}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114535851105013628
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 420
+ y: 660
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114207513964066840}
+ _inputs:
+ - {fileID: 114766860237946060}
+--- !u!114 &114537698157735394
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 420
+ y: 1485
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114058908433932722}
+ _inputs:
+ - {fileID: 114377759737611548}
+--- !u!114 &114541749899237478
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1602.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114492910285958856}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114544046452556548
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 0
+ y: 1155
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114905837760230530}
+ _inputs:
+ - {fileID: 114545309586114844}
+--- !u!114 &114545309586114844
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: -7.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114544046452556548}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114549266524813346
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 210
+ y: 1485
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114580882340762694}
+ _inputs:
+ - {fileID: 114930515935297554}
+--- !u!114 &114554886157775580
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1602.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114730562526222724}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114558006963751182
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 840
+ y: 825
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114569332090812236}
+ _inputs:
+ - {fileID: 114131937200386948}
+--- !u!114 &114561025448010958
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 552.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114978496358228684}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114562184610295042
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1602.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114693143912305152}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114563591049466754
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1252.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114899868845616516}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114564508886529610
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 972.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114753436896775260}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114564631989367198
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 972.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114104407920392924}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114568567758687386
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1462.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114492910285958856}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114569332090812236
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 972.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114558006963751182}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114576911103601276
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1680
+ y: 495
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114030281820682114}
+ _inputs:
+ - {fileID: 114049435994216540}
+--- !u!114 &114577975947466440
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1882.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114442000406844188}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114578668458250286
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1890
+ y: 495
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114741999339535908}
+ _inputs:
+ - {fileID: 114889190475240398}
+--- !u!114 &114580829955589776
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 2022.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114595812434298278}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114580882340762694
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 342.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114549266524813346}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114580975342486084
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1470
+ y: 990
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114472743358668682}
+ _inputs:
+ - {fileID: 114067836920298000}
+--- !u!114 &114582611350948750
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1260
+ y: 0
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114144399137022088}
+ _inputs:
+ - {fileID: 114171629767782314}
+--- !u!114 &114586171112551252
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 630
+ y: 1320
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114889917528243060}
+ _inputs:
+ - {fileID: 114907626386969702}
+--- !u!114 &114587963243139904
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1470
+ y: 165
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114325389654104252}
+ _inputs:
+ - {fileID: 114740462656451092}
+--- !u!114 &114589334417388670
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1392.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114903470640933088}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114592582420987538
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 630
+ y: 0
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114380919628130816}
+ _inputs:
+ - {fileID: 114428533554137858}
+--- !u!114 &114595714967894500
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 210
+ y: 165
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114656271419409666}
+ _inputs:
+ - {fileID: 114518411516238768}
+--- !u!114 &114595812434298278
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1890
+ y: 1155
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114580829955589776}
+ _inputs:
+ - {fileID: 114812010943235154}
+--- !u!114 &114601912298373078
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1680
+ y: 165
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114422984684629644}
+ _inputs:
+ - {fileID: 114255955519873922}
+--- !u!114 &114615187719956714
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 552.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114127330872578466}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114623541315529784
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 412.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114331226178011978}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114627603537053588
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 840
+ y: 330
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114877567627212650}
+ _inputs:
+ - {fileID: 114069368663378846}
+--- !u!114 &114628534875840702
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 832.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114185767057852742}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114638164312271686
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1882.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114754120066644676}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114638634703980764
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1680
+ y: 660
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114046015062868526}
+ _inputs:
+ - {fileID: 114706606264321634}
+--- !u!114 &114642663622843824
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 342.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114372460049263836}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114642787968873662
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1042.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114291501057425104}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114649820198714802
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114021341993425826}
+ _inputs:
+ - {fileID: 114784539778093238}
+--- !u!114 &114655561224605726
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1182.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114385647069057010}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114656271419409666
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 342.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114595714967894500}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114668404074355798
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 0
+ y: 825
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114022396875520970}
+ _inputs:
+ - {fileID: 114507278802011122}
+--- !u!114 &114672329845936832
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1392.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114899868845616516}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114673998392407258
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 762.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114212919586348082}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114677833350987524
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1890
+ y: 1320
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114057440960578784}
+ _inputs:
+ - {fileID: 114980907721042644}
+--- !u!114 &114681217675056844
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 552.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114258201408638206}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114686552855947096
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1672.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114169632940801564}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114687940223319342
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 762.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114508363775481748}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114688430239101240
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 832.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114032647566845792}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114692140502736702
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 622.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114060468691274060}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114693143912305152
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1470
+ y: 1320
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114562184610295042}
+ _inputs:
+ - {fileID: 114481029219770476}
+--- !u!114 &114694725891797130
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1042.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114155030097666606}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114704744442492192
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 2022.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114786548535745842}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114706606264321634
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1672.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114638634703980764}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114709234588755810
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1680
+ y: 0
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114806912815789804}
+ _inputs:
+ - {fileID: 114363613899660596}
+--- !u!114 &114719136315363464
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1680
+ y: 1485
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114079228532555544}
+ _inputs:
+ - {fileID: 114397270286976436}
+--- !u!114 &114724721532079774
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 420
+ y: 0
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114129556680958820}
+ _inputs:
+ - {fileID: 114453818972680006}
+--- !u!114 &114729652895838470
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1260
+ y: 1320
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114796118759526962}
+ _inputs:
+ - {fileID: 114001671155620418}
+--- !u!114 &114730562526222724
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1470
+ y: 495
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114554886157775580}
+ _inputs:
+ - {fileID: 114378066669872004}
+--- !u!114 &114732635930678278
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1042.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114385647069057010}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114732689614608988
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1882.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114055381488272514}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114733855804583510
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 2022.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114442000406844188}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114734523107015782
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: -7.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114488006925090048}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114735742031852318
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 840
+ y: 990
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114976950462444310}
+ _inputs:
+ - {fileID: 114453339144657796}
+--- !u!114 &114740462656451092
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1462.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114587963243139904}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114741351006934176
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: -7.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114995943598026618}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114741999339535908
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 2022.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114578668458250286}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114743798990957344
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1182.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114463183136394232}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114744710742415316
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 202.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114809703780796474}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114744951861517220
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1812.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114503251171754162}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114748890917427988
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 630
+ y: 825
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114819209065616624}
+ _inputs:
+ - {fileID: 114442915415878272}
+--- !u!114 &114753436896775260
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 840
+ y: 1320
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114564508886529610}
+ _inputs:
+ - {fileID: 114995440111697984}
+--- !u!114 &114754120066644676
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1890
+ y: 1485
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114754951159244130}
+ _inputs:
+ - {fileID: 114638164312271686}
+--- !u!114 &114754951159244130
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 2022.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114754120066644676}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114758093600472114
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1462.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114220700694228568}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114759216864638356
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 202.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114484120233952240}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114766069295182146
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1182.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114235848786241888}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114766860237946060
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 412.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114535851105013628}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114768861245032676
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1882.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114222944304035782}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114779143377165324
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 630
+ y: 495
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114409187314540462}
+ _inputs:
+ - {fileID: 114816594903349010}
+--- !u!114 &114780825815363388
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 412.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114978496358228684}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114783157596119098
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 342.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114298590628864988}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114784539778093238
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: -7.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114649820198714802}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114786548535745842
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1890
+ y: 990
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114704744442492192}
+ _inputs:
+ - {fileID: 114346240878861572}
+--- !u!114 &114786563481142584
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1462.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114964089510329778}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114791909558126260
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 840
+ y: 1155
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114139763991355432}
+ _inputs:
+ - {fileID: 114890517229404200}
+--- !u!114 &114792452818695174
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 552.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114331226178011978}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114794504564065380
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1050
+ y: 495
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114308445692205998}
+ _inputs:
+ - {fileID: 114223578349965356}
+--- !u!114 &114795600385364100
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 762.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114060468691274060}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114796118759526962
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1392.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114729652895838470}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114806391775952548
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 412.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114279443101610996}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114806912815789804
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1812.5
+ y: 19
+ width: 15
+ height: 15
+ parentNode: {fileID: 114709234588755810}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114809067390081412
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1392.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114851792330118846}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114809703780796474
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 210
+ y: 330
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114979262586425312}
+ _inputs:
+ - {fileID: 114744710742415316}
+--- !u!114 &114811656040908320
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1182.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114155030097666606}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114812010943235154
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1882.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114595812434298278}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114814935640544030
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 412.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114416965029609000}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114815031477891846
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1252.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114903470640933088}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114816260020250312
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1260
+ y: 495
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114455813581842644}
+ _inputs:
+ - {fileID: 114265837573135884}
+--- !u!114 &114816594903349010
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 622.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114779143377165324}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114819209065616624
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 762.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114748890917427988}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114826471941662460
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 630
+ y: 165
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114832943604600684}
+ _inputs:
+ - {fileID: 114091354739448916}
+--- !u!114 &114832943604600684
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 762.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114826471941662460}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114842706196820562
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1882.5
+ y: 184
+ width: 15
+ height: 15
+ parentNode: {fileID: 114519746998358522}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114844738074964444
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1470
+ y: 1155
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114149206805687562}
+ _inputs:
+ - {fileID: 114872688452594094}
+--- !u!114 &114844909480189294
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1392.5
+ y: 844
+ width: 15
+ height: 15
+ parentNode: {fileID: 114461922176674752}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114851792330118846
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1260
+ y: 990
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114809067390081412}
+ _inputs:
+ - {fileID: 114526347215813776}
+--- !u!114 &114866156505868784
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1602.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114220700694228568}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114867537130609524
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1260
+ y: 1155
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114937807352434108}
+ _inputs:
+ - {fileID: 114419868793824710}
+--- !u!114 &114870878225041800
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 202.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114372608875964954}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114872688452594094
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1462.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114844738074964444}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114874388098277048
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 342.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114372608875964954}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114877567627212650
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 972.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114627603537053588}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114889190475240398
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1882.5
+ y: 514
+ width: 15
+ height: 15
+ parentNode: {fileID: 114578668458250286}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114889917528243060
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 762.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114586171112551252}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114890517229404200
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 832.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114791909558126260}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114893495342764084
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1392.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114970029795268052}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114896499536795920
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 132.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114995943598026618}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114899868845616516
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1260
+ y: 660
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114672329845936832}
+ _inputs:
+ - {fileID: 114563591049466754}
+--- !u!114 &114903470640933088
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1260
+ y: 1485
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114589334417388670}
+ _inputs:
+ - {fileID: 114815031477891846}
+--- !u!114 &114905837760230530
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 132.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114544046452556548}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114906112867144964
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1050
+ y: 1485
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114092793003749472}
+ _inputs:
+ - {fileID: 114146543418525146}
+--- !u!114 &114907626386969702
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 622.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114586171112551252}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114924491257293590
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 210
+ y: 495
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114260543212820992}
+ _inputs:
+ - {fileID: 114233473679809758}
+--- !u!114 &114930515935297554
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 202.5
+ y: 1504
+ width: 15
+ height: 15
+ parentNode: {fileID: 114549266524813346}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114937807352434108
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1392.5
+ y: 1174
+ width: 15
+ height: 15
+ parentNode: {fileID: 114867537130609524}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114947244980610300
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1042.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114216783342308070}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114949153467399768
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 202.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114094250832233624}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114952593327603842
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1890
+ y: 825
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114421761065742202}
+ _inputs:
+ - {fileID: 114182654162089432}
+--- !u!114 &114955182263277056
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 342.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114094250832233624}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114964089510329778
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1470
+ y: 660
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114435575373244152}
+ _inputs:
+ - {fileID: 114786563481142584}
+--- !u!114 &114970029795268052
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1260
+ y: 330
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114893495342764084}
+ _inputs:
+ - {fileID: 114154234458328364}
+--- !u!114 &114972869643474944
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1182.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114291501057425104}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114975688528033068
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1042.5
+ y: 679
+ width: 15
+ height: 15
+ parentNode: {fileID: 114105289680323532}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114976950462444310
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 972.5
+ y: 1009
+ width: 15
+ height: 15
+ parentNode: {fileID: 114735742031852318}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114978496358228684
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 420
+ y: 990
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114561025448010958}
+ _inputs:
+ - {fileID: 114780825815363388}
+--- !u!114 &114979262586425312
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 342.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114809703780796474}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
+--- !u!114 &114980907721042644
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1882.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114677833350987524}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114995440111697984
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0bace920f087ccf4595fad22948ac526, type: 3}
+ m_Name: Input
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 832.5
+ y: 1339
+ width: 15
+ height: 15
+ parentNode: {fileID: 114753436896775260}
+ _bCanHaveMultipleConnections: 0
+ _outputs: []
+--- !u!114 &114995943598026618
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b0d0b3390e407b34d9672707671fdf01, type: 3}
+ m_Name: Basic Node
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 0
+ y: 1485
+ width: 140
+ height: 57.5
+ _outputs:
+ - {fileID: 114896499536795920}
+ _inputs:
+ - {fileID: 114741351006934176}
+--- !u!114 &114998529089306044
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 505fc75df63b6cd4694c90b7f0428f99, type: 3}
+ m_Name: Ouput
+ m_EditorClassIdentifier:
+ bodyRect:
+ serializedVersion: 2
+ x: 1812.5
+ y: 349
+ width: 15
+ height: 15
+ parentNode: {fileID: 114169632940801564}
+ _bCanHaveMultipleConnections: 1
+ _inputs: []
diff --git a/Other/NodeEditorExamples/Assets/UNEB/TempGraphsUNEB/TempNodeGraphUNEB-18000.asset.meta b/Other/NodeEditorExamples/Assets/UNEB/TempGraphsUNEB/TempNodeGraphUNEB-18000.asset.meta
new file mode 100644
index 00000000..1ca2cfb8
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/TempGraphsUNEB/TempNodeGraphUNEB-18000.asset.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 7b48b278d2bc03d4ebb7e9554d7baeb5
+timeCreated: 1503266707
+licenseType: Free
+NativeFormatImporter:
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures.meta b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures.meta
new file mode 100644
index 00000000..1e5598c8
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 5761ae761e67fe64fa22031bd69b0dca
+folderAsset: yes
+timeCreated: 1501786124
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Circle.png b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Circle.png
new file mode 100644
index 00000000..d91689af
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Circle.png
Binary files differ
diff --git a/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Circle.png.meta b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Circle.png.meta
new file mode 100644
index 00000000..fd909015
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Circle.png.meta
@@ -0,0 +1,204 @@
+fileFormatVersion: 2
+guid: 7351ad259fd2ebb4e92d45d99d89ca33
+timeCreated: 1502521939
+licenseType: Free
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 0
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: 0
+ aniso: 16
+ mipBias: 0
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 3
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 4
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Standalone
+ maxTextureSize: 32
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline:
+ - - {x: 0, y: 2}
+ - {x: -0.09813535, y: 1.9975909}
+ - {x: -0.19603428, y: 1.9903694}
+ - {x: -0.29346094, y: 1.978353}
+ - {x: -0.39018065, y: 1.9615705}
+ - {x: -0.4859604, y: 1.9400625}
+ - {x: -0.5805693, y: 1.9138807}
+ - {x: -0.67377967, y: 1.8830881}
+ - {x: -0.76536685, y: 1.8477591}
+ - {x: -0.8551101, y: 1.8079786}
+ - {x: -0.9427934, y: 1.7638426}
+ - {x: -1.0282055, y: 1.7154572}
+ - {x: -1.1111405, y: 1.6629392}
+ - {x: -1.1913986, y: 1.606415}
+ - {x: -1.2687867, y: 1.5460209}
+ - {x: -1.343118, y: 1.4819021}
+ - {x: -1.4142137, y: 1.4142134}
+ - {x: -1.4819024, y: 1.3431177}
+ - {x: -1.5460211, y: 1.2687864}
+ - {x: -1.6064153, y: 1.1913984}
+ - {x: -1.6629394, y: 1.1111403}
+ - {x: -1.7154574, y: 1.0282052}
+ - {x: -1.7638427, y: 0.94279313}
+ - {x: -1.8079787, y: 0.8551098}
+ - {x: -1.8477592, y: 0.76536644}
+ - {x: -1.8830884, y: 0.6737792}
+ - {x: -1.9138808, y: 0.5805688}
+ - {x: -1.9400626, y: 0.48595977}
+ - {x: -1.9615707, y: 0.39018002}
+ - {x: -1.9783531, y: 0.29346028}
+ - {x: -1.9903696, y: 0.19603357}
+ - {x: -1.9975909, y: 0.098134585}
+ - {x: -2, y: -0.0000008026785}
+ - {x: -1.9975909, y: -0.09813619}
+ - {x: -1.9903693, y: -0.19603516}
+ - {x: -1.9783529, y: -0.29346186}
+ - {x: -1.9615704, y: -0.3901816}
+ - {x: -1.9400623, y: -0.48596132}
+ - {x: -1.9138803, y: -0.58057034}
+ - {x: -1.8830878, y: -0.67378074}
+ - {x: -1.8477587, y: -0.7653679}
+ - {x: -1.8079782, y: -0.855111}
+ - {x: -1.7638422, y: -0.9427941}
+ - {x: -1.715457, y: -1.028206}
+ - {x: -1.6629391, y: -1.1111407}
+ - {x: -1.606415, y: -1.1913987}
+ - {x: -1.546021, y: -1.2687865}
+ - {x: -1.4819025, y: -1.3431177}
+ - {x: -1.4142139, y: -1.4142132}
+ - {x: -1.3431184, y: -1.4819018}
+ - {x: -1.2687873, y: -1.5460204}
+ - {x: -1.1913995, y: -1.6064144}
+ - {x: -1.1111416, y: -1.6629385}
+ - {x: -1.0282067, y: -1.7154565}
+ - {x: -0.9427949, y: -1.7638417}
+ - {x: -0.85511184, y: -1.8079778}
+ - {x: -0.76536876, y: -1.8477583}
+ - {x: -0.6737818, y: -1.8830874}
+ - {x: -0.5805717, y: -1.91388}
+ - {x: -0.48596293, y: -1.9400618}
+ - {x: -0.39018345, y: -1.96157}
+ - {x: -0.29346398, y: -1.9783525}
+ - {x: -0.1960375, y: -1.9903691}
+ - {x: -0.09813879, y: -1.9975908}
+ - {x: -0.0000036398517, y: -2}
+ - {x: 0.098131515, y: -1.9975911}
+ - {x: 0.19603026, y: -1.9903698}
+ - {x: 0.29345676, y: -1.9783536}
+ - {x: 0.3901763, y: -1.9615715}
+ - {x: 0.48595586, y: -1.9400636}
+ - {x: 0.58056474, y: -1.913882}
+ - {x: 0.67377496, y: -1.8830898}
+ - {x: 0.765362, y: -1.847761}
+ - {x: 0.8551053, y: -1.8079809}
+ - {x: 0.94278854, y: -1.7638452}
+ - {x: 1.0282005, y: -1.7154602}
+ - {x: 1.1111355, y: -1.6629425}
+ - {x: 1.1913936, y: -1.6064187}
+ - {x: 1.2687817, y: -1.5460249}
+ - {x: 1.3431131, y: -1.4819067}
+ - {x: 1.4142088, y: -1.4142184}
+ - {x: 1.4818976, y: -1.3431231}
+ - {x: 1.5460167, y: -1.2687918}
+ - {x: 1.6064112, y: -1.1914037}
+ - {x: 1.6629357, y: -1.1111456}
+ - {x: 1.7154542, y: -1.0282105}
+ - {x: 1.7638398, y: -0.94279844}
+ - {x: 1.8079762, y: -0.855115}
+ - {x: 1.8477571, y: -0.76537156}
+ - {x: 1.8830866, y: -0.6737842}
+ - {x: 1.9138794, y: -0.5805737}
+ - {x: 1.9400615, y: -0.48596448}
+ - {x: 1.9615698, y: -0.39018452}
+ - {x: 1.9783524, y: -0.29346457}
+ - {x: 1.9903691, y: -0.19603767}
+ - {x: 1.9975908, y: -0.09813846}
+ - {x: 2, y: -0.0000028371733}
+ - {x: 1.997591, y: 0.0981328}
+ - {x: 1.9903697, y: 0.19603202}
+ - {x: 1.9783533, y: 0.29345897}
+ - {x: 1.9615709, y: 0.39017895}
+ - {x: 1.9400629, y: 0.48595896}
+ - {x: 1.9138811, y: 0.58056825}
+ - {x: 1.8830885, y: 0.6737789}
+ - {x: 1.8477592, y: 0.7653663}
+ - {x: 1.8079787, y: 0.8551099}
+ - {x: 1.7638426, y: 0.9427934}
+ - {x: 1.7154571, y: 1.0282056}
+ - {x: 1.662939, y: 1.1111408}
+ - {x: 1.6064146, y: 1.1913992}
+ - {x: 1.5460203, y: 1.2687874}
+ - {x: 1.4819014, y: 1.3431189}
+ - {x: 1.4142125, y: 1.4142147}
+ - {x: 1.3431165, y: 1.4819036}
+ - {x: 1.2687849, y: 1.5460223}
+ - {x: 1.1913966, y: 1.6064166}
+ - {x: 1.1111382, y: 1.6629407}
+ - {x: 1.0282029, y: 1.7154588}
+ - {x: 0.94279057, y: 1.7638441}
+ - {x: 0.85510695, y: 1.8079801}
+ - {x: 0.76536334, y: 1.8477606}
+ - {x: 0.67377585, y: 1.8830895}
+ - {x: 0.58056515, y: 1.9138819}
+ - {x: 0.48595583, y: 1.9400636}
+ - {x: 0.3901758, y: 1.9615716}
+ - {x: 0.29345578, y: 1.9783537}
+ - {x: 0.1960288, y: 1.99037}
+ - {x: 0.09812956, y: 1.9975911}
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Grid.png b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Grid.png
new file mode 100644
index 00000000..1c4457e0
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Grid.png
Binary files differ
diff --git a/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Grid.png.meta b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Grid.png.meta
new file mode 100644
index 00000000..7affb106
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Grid.png.meta
@@ -0,0 +1,76 @@
+fileFormatVersion: 2
+guid: 4ab4e605fe422164da65569c46a161d2
+timeCreated: 1493143660
+licenseType: Free
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 0
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 1
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: 2
+ aniso: 1
+ mipBias: -1
+ wrapMode: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 0
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 64
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Standalone
+ maxTextureSize: 64
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Square.png b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Square.png
new file mode 100644
index 00000000..c8bbb357
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Square.png
Binary files differ
diff --git a/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Square.png.meta b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Square.png.meta
new file mode 100644
index 00000000..9f830579
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/UNEB Textures/Square.png.meta
@@ -0,0 +1,76 @@
+fileFormatVersion: 2
+guid: 2753fd6aa74e4ae48b498cb00649f41c
+timeCreated: 1502670092
+licenseType: Free
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 0
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: 0
+ aniso: -1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Standalone
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility.meta b/Other/NodeEditorExamples/Assets/UNEB/Utility.meta
new file mode 100644
index 00000000..c637d44d
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 5b4a95752fe3e454da78c3bfbf465f51
+folderAsset: yes
+timeCreated: 1502670670
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility/ColorExtensions.cs b/Other/NodeEditorExamples/Assets/UNEB/Utility/ColorExtensions.cs
new file mode 100644
index 00000000..5a2de0b0
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility/ColorExtensions.cs
@@ -0,0 +1,13 @@
+
+using UnityEngine;
+
+namespace UNEB.Utility
+{
+ public static class ColorExtensions
+ {
+ public static Color From255(byte r, byte g, byte b)
+ {
+ return new Color(r / 255f, g / 255f, b / 255f);
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility/ColorExtensions.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Utility/ColorExtensions.cs.meta
new file mode 100644
index 00000000..9aa744fb
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility/ColorExtensions.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: fe88d4f484d88f541adb9ee3c76532e9
+timeCreated: 1502671454
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility/FiniteStack.cs b/Other/NodeEditorExamples/Assets/UNEB/Utility/FiniteStack.cs
new file mode 100644
index 00000000..2faac0f1
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility/FiniteStack.cs
@@ -0,0 +1,78 @@
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace UNEB.Utility
+{
+ /// <summary>
+ /// A simple stack with a limited capacity.
+ /// In order to make more room, the first element (not the top) in the stack is removed.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ public class FiniteStack<T> : IEnumerable<T>
+ {
+ private LinkedList<T> _container;
+ private int _capacity;
+
+ /// <summary>
+ /// Called when the stack runs out of space and removes
+ /// the first item (bottom of stack) to make room.
+ /// </summary>
+ public event Action<T> OnRemoveBottomItem;
+
+ public FiniteStack(int capacity)
+ {
+ _container = new LinkedList<T>();
+ _capacity = capacity;
+ }
+
+ public void Push(T value)
+ {
+ _container.AddLast(value);
+
+ // Out of room, remove the first element in the stack.
+ if (_container.Count == _capacity) {
+
+ T first = _container.First.Value;
+ _container.RemoveFirst();
+
+ if (OnRemoveBottomItem != null)
+ OnRemoveBottomItem(first);
+ }
+ }
+
+ public T Peek()
+ {
+ return _container.Last.Value;
+ }
+
+ public T Pop()
+ {
+ var lastVal = _container.Last.Value;
+ _container.RemoveLast();
+
+ return lastVal;
+ }
+
+ public void Clear()
+ {
+ _container.Clear();
+ }
+
+ public int Count
+ {
+ get { return _container.Count; }
+ }
+
+ public IEnumerator<T> GetEnumerator()
+ {
+ return _container.GetEnumerator();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator()
+ {
+ return _container.GetEnumerator();
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility/FiniteStack.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Utility/FiniteStack.cs.meta
new file mode 100644
index 00000000..33af9b97
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility/FiniteStack.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8b4b8b87bda6573489817470ee03e595
+timeCreated: 1503072950
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility/Pair.cs b/Other/NodeEditorExamples/Assets/UNEB/Utility/Pair.cs
new file mode 100644
index 00000000..dfff1249
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility/Pair.cs
@@ -0,0 +1,20 @@
+
+namespace UNEB.Utility
+{
+ /// <summary>
+ /// Simple pair tuple.
+ /// </summary>
+ /// <typeparam name="T1"></typeparam>
+ /// <typeparam name="T2"></typeparam>
+ public class Pair<T1, T2>
+ {
+ public readonly T1 item1;
+ public readonly T2 item2;
+
+ public Pair(T1 item1, T2 item2)
+ {
+ this.item1 = item1;
+ this.item2 = item2;
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility/Pair.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Utility/Pair.cs.meta
new file mode 100644
index 00000000..ac58e80c
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility/Pair.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4c74f38f4b664f749bd0e508ea0ccc2d
+timeCreated: 1502603700
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility/StateMachine.cs b/Other/NodeEditorExamples/Assets/UNEB/Utility/StateMachine.cs
new file mode 100644
index 00000000..9c3a8992
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility/StateMachine.cs
@@ -0,0 +1,300 @@
+using UnityEngine;
+using System;
+using System.Collections.Generic;
+
+namespace Bonsai.Utility
+{
+ /// <summary>
+ /// A finite state machine.
+ /// </summary>
+ /// <typeparam name="T">The date type to be stored by the machine states.</typeparam>
+ public class StateMachine<T>
+ {
+ /// <summary>
+ /// An event that fires when the machine finishes transitioning to another state.
+ /// </summary>
+ public event Action OnStateChangedEvent = delegate { };
+
+ protected Dictionary<T, State> _states = new Dictionary<T, State>();
+
+ /// <summary>
+ /// Get all the state data.
+ /// </summary>
+ /// <returns></returns>
+ public IEnumerable<T> Data()
+ {
+ return _states.Keys;
+ }
+
+ protected State _currentState;
+
+ public State CurrentState
+ {
+ get { return _currentState; }
+ }
+
+ /// <summary>
+ /// Adds a state to the machine.
+ /// </summary>
+ /// <param name="data"></param>
+ public void AddState(T data)
+ {
+ var s = new State(data);
+ _states.Add(data, s); ;
+ }
+
+ public void AddState(State s)
+ {
+ _states.Add(s.Value, s);
+ }
+
+ public void AddTransition(State start, State end, Func<bool> condition, Func<bool> onMakingTransition)
+ {
+ var t = new Transition(condition);
+ t.onMakingTransition = onMakingTransition;
+
+ AddTransition(start, end, t);
+ }
+
+ public void AddTransition(State start, State end, Transition t)
+ {
+ start.Add(t);
+ t.SetNextState(end);
+ }
+
+ /// <summary>
+ /// Add a transition that goes from start to end state.
+ /// </summary>
+ /// <param name="start"></param>
+ /// <param name="end"></param>
+ /// <param name="t"></param>
+ public void AddTransition(T start, T end, Transition t)
+ {
+ var startST = GetState(start);
+ var endST = GetState(end);
+
+ if (startST == null || endST == null) {
+ Debug.LogError("State(s) are not in the state machine");
+ return;
+ }
+
+ AddTransition(startST, endST, t);
+ }
+
+ /// <summary>
+ /// Add two transitions.
+ /// One from start to end.
+ /// Another from end to start.
+ /// </summary>
+ /// <param name="start"></param>
+ /// <param name="end"></param>
+ /// <param name="startToEnd"></param>
+ /// <param name="endToStart"></param>
+ public void AddBiTransition(T start, T end, Transition startToEnd, Transition endToStart)
+ {
+ var startST = GetState(start);
+ var endST = GetState(end);
+
+ if (startST == null || endST == null) {
+ Debug.LogError("State(s) are not in the state machine");
+ return;
+ }
+
+ AddTransition(startST, endST, startToEnd);
+ AddTransition(endST, startST, endToStart);
+ }
+
+ /// <summary>
+ /// Gets the state associated with the data.
+ /// </summary>
+ /// <param name="data"></param>
+ /// <returns></returns>
+ public State GetState(T data)
+ {
+ if (_states.ContainsKey(data)) {
+ return _states[data];
+ }
+
+ return null;
+ }
+
+ /// <summary>
+ /// Sets the current active state of the machine.
+ /// </summary>
+ /// <param name="data"></param>
+ public void SetCurrentState(T data)
+ {
+
+ var state = GetState(data);
+
+ if (state == null) {
+ Debug.LogError(data + " is not in the state machine.");
+ }
+
+ else {
+ _currentState = state;
+ }
+ }
+
+ /// <summary>
+ /// Handles moving to next state when conditions are met.
+ /// </summary>
+ public void Update()
+ {
+ if (_currentState == null) {
+ return;
+ }
+
+ Transition validTrans = null;
+
+ // Pick the next state if the transition conditions are met.
+ for (int i = 0; i < _currentState.Transitions.Count; i++) {
+
+ if (_currentState.Transitions[i].AllConditionsMet()) {
+ validTrans = _currentState.Transitions[i];
+ break;
+ }
+ }
+
+ if (validTrans != null) {
+
+ // Call on making transition.
+ if (validTrans.onMakingTransition()) {
+
+ // Call on state exit.
+ if (_currentState.onStateExit != null)
+ _currentState.onStateExit();
+
+ // Change the state to the next one.
+ _currentState = validTrans.NextState;
+
+ // Call on state enter.
+ if (_currentState.onStateEnter != null)
+ _currentState.onStateEnter();
+
+ OnStateChangedEvent();
+ }
+ }
+ }
+
+ /// <summary>
+ /// A transition between two states than only occurs if all
+ /// its conditions are satisfied.
+ /// </summary>
+ public class Transition
+ {
+ private State _nextState = null;
+ private List<Func<bool>> _conditions = new List<Func<bool>>();
+
+ /// <summary>
+ /// Called after the 'from' state exits and before the 'to' state enters.
+ /// If this fails, then it goes back to the starting state.
+ /// </summary>
+ public Func<bool> onMakingTransition = () => { return true; };
+
+ public Transition()
+ {
+
+ }
+
+ /// <summary>
+ /// Pass in initial conditions
+ /// </summary>
+ /// <param name="?"></param>
+ public Transition(params Func<bool>[] conditions)
+ {
+ foreach (var c in conditions) {
+ AddCondition(c);
+ }
+ }
+
+ /// <summary>
+ /// Adds a condition that must be satisfied in order to do the transition.
+ /// </summary>
+ /// <param name="cond"></param>
+ public void AddCondition(Func<bool> cond)
+ {
+ _conditions.Add(cond);
+ }
+
+ /// <summary>
+ /// Tests if all the conditions of the transition are satisfied.
+ /// </summary>
+ /// <returns></returns>
+ public bool AllConditionsMet()
+ {
+ for (int i = 0; i < _conditions.Count; i++) {
+
+ if (!_conditions[i]()) return false;
+ }
+
+ // All conditions returned true.
+ return true;
+ }
+
+ /// <summary>
+ /// Set the state that transition goes to.
+ /// </summary>
+ /// <param name="next"></param>
+ public void SetNextState(State next)
+ {
+ _nextState = next;
+ }
+
+ /// <summary>
+ /// The state that transition goes to.
+ /// </summary>
+ public State NextState
+ {
+ get { return _nextState; }
+ }
+ }
+
+ /// <summary>
+ /// A state of the machine.
+ /// </summary>
+ public class State
+ {
+ private T _data;
+ private List<Transition> _transitions = new List<Transition>();
+
+ /// <summary>
+ /// Executes when the machine transitions into this state.
+ /// </summary>
+ public Action onStateEnter;
+
+ /// <summary>
+ /// Executes when the machine transitions out of this state.
+ /// </summary>
+ public Action onStateExit;
+
+ /// <summary>
+ /// Construct a state with its data.
+ /// </summary>
+ /// <param name="data"></param>
+ public State(T data)
+ {
+ _data = data;
+ }
+
+ /// <summary>
+ /// Adds a transition to the state.
+ /// </summary>
+ /// <param name="t"></param>
+ public void Add(Transition t)
+ {
+ _transitions.Add(t);
+ }
+
+ /// <summary>
+ /// The data held by the state.
+ /// </summary>
+ public T Value { get { return _data; } }
+
+ /// <summary>
+ /// The transitions connected to the state.
+ /// </summary>
+ public List<Transition> Transitions { get { return _transitions; } }
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility/StateMachine.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Utility/StateMachine.cs.meta
new file mode 100644
index 00000000..e84d2aad
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility/StateMachine.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5431af42bc33d804eb9504ebe195cc41
+timeCreated: 1503072950
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility/StringExtensions.cs b/Other/NodeEditorExamples/Assets/UNEB/Utility/StringExtensions.cs
new file mode 100644
index 00000000..33c0d960
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility/StringExtensions.cs
@@ -0,0 +1,29 @@
+
+namespace UNEB
+{
+ public static class StringExtensions
+ {
+
+ /// <summary>
+ /// Merges the parent and child paths with the '/' character.
+ /// </summary>
+ /// <param name="parentDir"></param>
+ /// <param name="childDir"></param>
+ /// <returns></returns>
+ public static string Dir(this string parentDir, string childDir)
+ {
+ return parentDir + '/' + childDir;
+ }
+
+ /// <summary>
+ /// Appends the extension to the file name with '.'
+ /// </summary>
+ /// <param name="file"></param>
+ /// <param name="extension"></param>
+ /// <returns></returns>
+ public static string Ext(this string file, string extension)
+ {
+ return file + '.' + extension;
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility/StringExtensions.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Utility/StringExtensions.cs.meta
new file mode 100644
index 00000000..2d33c4b7
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility/StringExtensions.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: ae4ec85959c405246890eb2d46b5c0e5
+timeCreated: 1503086644
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility/TextureLib.cs b/Other/NodeEditorExamples/Assets/UNEB/Utility/TextureLib.cs
new file mode 100644
index 00000000..3849326a
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility/TextureLib.cs
@@ -0,0 +1,191 @@
+
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+
+using UnityEngine;
+using UnityEditor;
+
+namespace UNEB.Utility
+{
+ /// <summary>
+ /// A static library that loads and stores references to textures via name.
+ /// </summary>
+ public class TextureLib
+ {
+ public const string kStandardTexturesFolder = "UNEB Textures";
+ public enum TexType { PNG, JPEG, BMP };
+
+ private static Dictionary<string, Texture2D> _textures = new Dictionary<string, Texture2D>();
+ private static Dictionary<TintedTextureKey, Texture2D> _tintedTextures = new Dictionary<TintedTextureKey, Texture2D>();
+
+ public static void LoadStandardTextures()
+ {
+ _textures.Clear();
+ _tintedTextures.Clear();
+
+ LoadTexture("Grid");
+ LoadTexture("Circle");
+ LoadTexture("Square");
+ }
+
+ public static void LoadTexture(string name, TexType type = TexType.PNG)
+ {
+ string ext = GetTexTypeExtension(type);
+ string filename = name.Ext(ext);
+ string path = GetTextureFolderPath().Dir(filename);
+
+ var tex = AssetDatabase.LoadAssetAtPath<Texture2D>(path);
+
+ if (tex != null) {
+ _textures.Add(name, tex);
+ }
+
+ else {
+ Debug.LogError("The texture: " + path + " could not be found.");
+ }
+ }
+
+ public static string GetTexTypeExtension(TexType type)
+ {
+ switch (type) {
+ case TexType.PNG: return "png";
+ case TexType.JPEG: return "jpg";
+ case TexType.BMP: return "bmp";
+ }
+
+ return "";
+ }
+
+ public static Texture2D GetTexture(string name)
+ {
+ if (_textures.ContainsKey(name)) {
+ return _textures[name];
+ }
+
+ Debug.LogError(name + " is not loaded in the texture library.");
+ return null;
+ }
+
+ /// <summary>
+ /// Gets the texture with a tint.
+ /// It must be already loaded in the library.
+ /// </summary>
+ /// <param name="name"></param>
+ /// <param name="color"></param>
+ /// <returns></returns>
+ public static Texture2D GetTintTex(string name, Color color)
+ {
+ var key = new TintedTextureKey(color, name);
+
+ // Check if it already exsists in the tint dictionary.
+ if (_tintedTextures.ContainsKey(key)) {
+
+ if (_tintedTextures[key]) {
+ return _tintedTextures[key];
+ }
+
+ // Rebuild texture.
+ else {
+ _tintedTextures[key] = tintCopy(GetTexture(name), color);
+ return _tintedTextures[key];
+ }
+ }
+
+ // Make a new tint from the pre-loaded texture.
+ Texture2D tex = GetTexture(name);
+
+ // Tint the tex and add to tinted tex dictionary.
+ if (tex) {
+
+ var tintedTex = tintCopy(tex, color);
+ _tintedTextures.Add(key, tintedTex);
+
+ return tintedTex;
+ }
+
+ return null;
+ }
+
+ private static Texture2D tintCopy(Texture2D tex, Color color)
+ {
+ int pixCount = tex.width * tex.height;
+
+ var tintedTex = new Texture2D(tex.width, tex.height);
+ tintedTex.alphaIsTransparency = true;
+
+ var newPixels = new Color[pixCount];
+ var pixels = tex.GetPixels();
+
+ for (int i = 0; i < pixCount; ++i) {
+ newPixels[i] = color;
+ newPixels[i].a = pixels[i].a;
+ }
+
+ tintedTex.SetPixels(newPixels);
+ tintedTex.Apply();
+
+ return tintedTex;
+ }
+
+ public static string GetTextureFolderPath()
+ {
+ string fullpath = getFullPath(Application.dataPath, kStandardTexturesFolder);
+
+ if (!string.IsNullOrEmpty(fullpath)) {
+
+ // Return the texture folder path relative to Unity's Asset folder.
+ int index = fullpath.IndexOf("Assets");
+ string localPath = fullpath.Substring(index);
+
+ return localPath;
+ }
+
+ Debug.LogError("Could not find folder: " + kStandardTexturesFolder);
+ return "";
+ }
+
+ private static string getFullPath(string root, string targetFolderName)
+ {
+ string[] dirs = Directory.GetDirectories(root, targetFolderName, SearchOption.AllDirectories);
+
+ // Return first occurance containing targetFolderName.
+ if (dirs.Length != 0) {
+ return dirs[0];
+ }
+
+ // Could not find anything.
+ return "";
+ }
+
+ private struct TintedTextureKey
+ {
+ public readonly Color color;
+ public readonly string texName;
+
+ public TintedTextureKey(Color c, string name)
+ {
+ color = c;
+ texName = name;
+ }
+
+ public override int GetHashCode()
+ {
+ return color.GetHashCode() * texName.GetHashCode();
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj is TintedTextureKey) {
+
+ var key = (TintedTextureKey)obj;
+ return key.color == color && key.texName == texName;
+ }
+
+ else {
+ return false;
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Other/NodeEditorExamples/Assets/UNEB/Utility/TextureLib.cs.meta b/Other/NodeEditorExamples/Assets/UNEB/Utility/TextureLib.cs.meta
new file mode 100644
index 00000000..180ea446
--- /dev/null
+++ b/Other/NodeEditorExamples/Assets/UNEB/Utility/TextureLib.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 620aee55f886f914e825c6b891b8bd9b
+timeCreated: 1501784046
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: