Created unity project
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 090e4bacbeacf4be78a0641c489864bf
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,21 @@
|
||||
using UnityEditor;
|
||||
|
||||
namespace Unity.VisualScripting.Analytics
|
||||
{
|
||||
class StateMacroSavedEvent : UnityEditor.AssetModificationProcessor
|
||||
{
|
||||
static string[] OnWillSaveAssets(string[] paths)
|
||||
{
|
||||
foreach (string path in paths)
|
||||
{
|
||||
var assetType = AssetDatabase.GetMainAssetTypeAtPath(path);
|
||||
if (assetType == typeof(StateGraphAsset))
|
||||
{
|
||||
UsageAnalytics.CollectAndSend();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return paths;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8946f8274f03d4448a452d58da80d1cd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 704dcfe5d449b4fc1872497f985b71f9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Descriptor(typeof(StateGraph))]
|
||||
public sealed class StateGraphDescriptor : GraphDescriptor<StateGraph, GraphDescription>
|
||||
{
|
||||
public StateGraphDescriptor(StateGraph target) : base(target) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f05c1fcce075f4c758b4b36f491dd0b8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Descriptor(typeof(StateMachine))]
|
||||
public sealed class StateMachineDescriptor : MachineDescriptor<StateMachine, MachineDescription>
|
||||
{
|
||||
public StateMachineDescriptor(StateMachine target) : base(target) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b04c1e280ff6e45de9c1ee0c405a5711
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Descriptor(typeof(StateGraphAsset))]
|
||||
public sealed class StateMacroDescriptor : MacroDescriptor<StateGraphAsset, MacroDescription>
|
||||
{
|
||||
public StateMacroDescriptor(StateGraphAsset target) : base(target) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 388714a324a29401594aee5d32810261
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c49d3c6b3c0954e528e5020c1c49acfa
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,25 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[GraphContextExtension(typeof(FlowGraphContext))]
|
||||
public sealed class FlowGraphContextStateExtension : GraphContextExtension<FlowGraphContext>
|
||||
{
|
||||
public FlowGraphContextStateExtension(FlowGraphContext context) : base(context) { }
|
||||
|
||||
public override bool AcceptsDragAndDrop()
|
||||
{
|
||||
return DragAndDropUtility.Is<StateGraphAsset>();
|
||||
}
|
||||
|
||||
public override void PerformDragAndDrop()
|
||||
{
|
||||
var statemacro = DragAndDropUtility.Get<StateGraphAsset>();
|
||||
var stateUnit = new StateUnit(statemacro);
|
||||
context.canvas.AddUnit(stateUnit, DragAndDropUtility.position);
|
||||
}
|
||||
|
||||
public override void DrawDragAndDropPreview()
|
||||
{
|
||||
GraphGUI.DrawDragAndDropPreviewLabel(DragAndDropUtility.offsetedPosition, DragAndDropUtility.Get<StateGraphAsset>().name, typeof(StateGraphAsset).Icon());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7befbeb005f98497e828793e65d518c1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Descriptor(typeof(StateUnit))]
|
||||
public class StateUnitDescriptor : NesterUnitDescriptor<StateUnit>
|
||||
{
|
||||
public StateUnitDescriptor(StateUnit unit) : base(unit) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 19529b57382684562940e410a8b7e385
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Editor(typeof(StateUnit))]
|
||||
public sealed class StateUnitEditor : NesterUnitEditor
|
||||
{
|
||||
public StateUnitEditor(Metadata metadata) : base(metadata) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1fa37d86e69c94da48f72c38e85a25f7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,41 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Widget(typeof(StateUnit))]
|
||||
public class StateUnitWidget : NestrerUnitWidget<StateUnit>, IDragAndDropHandler
|
||||
{
|
||||
public StateUnitWidget(FlowCanvas canvas, StateUnit unit) : base(canvas, unit) { }
|
||||
|
||||
public DragAndDropVisualMode dragAndDropVisualMode => DragAndDropVisualMode.Generic;
|
||||
|
||||
public bool AcceptsDragAndDrop()
|
||||
{
|
||||
return DragAndDropUtility.Is<StateGraphAsset>();
|
||||
}
|
||||
|
||||
public void PerformDragAndDrop()
|
||||
{
|
||||
UndoUtility.RecordEditedObject("Drag & Drop Macro");
|
||||
unit.nest.source = GraphSource.Macro;
|
||||
unit.nest.macro = DragAndDropUtility.Get<StateGraphAsset>();
|
||||
unit.nest.embed = null;
|
||||
unit.Define();
|
||||
GUI.changed = true;
|
||||
}
|
||||
|
||||
public void UpdateDragAndDrop()
|
||||
{
|
||||
}
|
||||
|
||||
public void DrawDragAndDropPreview()
|
||||
{
|
||||
GraphGUI.DrawDragAndDropPreviewLabel(new Vector2(edgePosition.x, outerPosition.yMax), "Replace with: " + DragAndDropUtility.Get<StateGraphAsset>().name, typeof(StateGraphAsset).Icon());
|
||||
}
|
||||
|
||||
public void ExitDragAndDrop()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 07e0926bb74a646ad92846ce48b5074e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[InitializeAfterPlugins]
|
||||
public static class UnitBaseStateExtensions
|
||||
{
|
||||
static UnitBaseStateExtensions()
|
||||
{
|
||||
UnitBase.staticUnitsExtensions.Add(GetStaticOptions);
|
||||
UnitBase.dynamicUnitsExtensions.Add(GetDynamicOptions);
|
||||
UnitBase.contextualUnitsExtensions.Add(GetContextualOptions);
|
||||
}
|
||||
|
||||
private static IEnumerable<IUnitOption> GetStaticOptions()
|
||||
{
|
||||
yield return StateUnit.WithStart().Option();
|
||||
}
|
||||
|
||||
private static IEnumerable<IUnitOption> GetDynamicOptions()
|
||||
{
|
||||
var stateMacros = UnityAPI.Await(() => AssetUtility.GetAllAssetsOfType<StateGraphAsset>().ToArray());
|
||||
|
||||
foreach (var stateUnit in stateMacros.Select(statemacro => new StateUnit(statemacro)))
|
||||
{
|
||||
yield return stateUnit.Option();
|
||||
}
|
||||
}
|
||||
|
||||
private static IEnumerable<IUnitOption> GetContextualOptions(GraphReference reference)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 32950f866b53a45b7b44696721d28303
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 746d03c4ee4a14b2fa93ddb9d4718f6c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,341 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Canvas(typeof(StateGraph))]
|
||||
public sealed class StateCanvas : VisualScriptingCanvas<StateGraph>
|
||||
{
|
||||
public StateCanvas(StateGraph graph) : base(graph) { }
|
||||
|
||||
|
||||
#region View
|
||||
|
||||
protected override bool shouldEdgePan => base.shouldEdgePan || isCreatingTransition;
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Drawing
|
||||
|
||||
protected override void DrawBackground()
|
||||
{
|
||||
base.DrawBackground();
|
||||
|
||||
if (isCreatingTransition)
|
||||
{
|
||||
var startRect = this.Widget(transitionSource).position;
|
||||
var end = mousePosition;
|
||||
|
||||
Edge startEdge, endEdge;
|
||||
|
||||
GraphGUI.GetConnectionEdge
|
||||
(
|
||||
startRect.center,
|
||||
end,
|
||||
out startEdge,
|
||||
out endEdge
|
||||
);
|
||||
|
||||
var start = startRect.GetEdgeCenter(startEdge);
|
||||
|
||||
GraphGUI.DrawConnectionArrow(Color.white, start, end, startEdge, endEdge);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Clipboard
|
||||
|
||||
public override void ShrinkCopyGroup(HashSet<IGraphElement> copyGroup)
|
||||
{
|
||||
copyGroup.RemoveWhere(element =>
|
||||
{
|
||||
if (element is IStateTransition)
|
||||
{
|
||||
var transition = (IStateTransition)element;
|
||||
|
||||
if (!copyGroup.Contains(transition.source) ||
|
||||
!copyGroup.Contains(transition.destination))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Window
|
||||
|
||||
public override void OnToolbarGUI()
|
||||
{
|
||||
if (graph.states.Any(u => u.GetException(reference) != null) || graph.transitions.Any(t => t.GetException(reference) != null))
|
||||
{
|
||||
if (GUILayout.Button("Clear Errors", LudiqStyles.toolbarButton))
|
||||
{
|
||||
foreach (var state in graph.states)
|
||||
{
|
||||
state.SetException(reference, null);
|
||||
}
|
||||
|
||||
foreach (var transition in graph.transitions)
|
||||
{
|
||||
transition.SetException(reference, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
|
||||
BoltCore.Configuration.dimInactiveNodes = GUILayout.Toggle(BoltCore.Configuration.dimInactiveNodes, "Dim", LudiqStyles.toolbarButton);
|
||||
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
BoltCore.Configuration.Save();
|
||||
}
|
||||
|
||||
base.OnToolbarGUI();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Context
|
||||
|
||||
protected override void OnContext()
|
||||
{
|
||||
if (isCreatingTransition)
|
||||
{
|
||||
CancelTransition();
|
||||
}
|
||||
else
|
||||
{
|
||||
base.OnContext();
|
||||
}
|
||||
}
|
||||
|
||||
protected override IEnumerable<DropdownOption> GetContextOptions()
|
||||
{
|
||||
yield return new DropdownOption((Action<Vector2>)CreateFlowState, "Create Script State");
|
||||
yield return new DropdownOption((Action<Vector2>)CreateSuperState, "Create Super State");
|
||||
yield return new DropdownOption((Action<Vector2>)CreateAnyState, "Create Any State");
|
||||
yield return new DropdownOption((Action<Vector2>)(NewSticky), "Create Sticky Note");
|
||||
foreach (var baseOption in base.GetContextOptions())
|
||||
{
|
||||
yield return baseOption;
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateFlowState(Vector2 position)
|
||||
{
|
||||
var flowState = FlowState.WithEnterUpdateExit();
|
||||
|
||||
if (!graph.states.Any())
|
||||
{
|
||||
flowState.isStart = true;
|
||||
flowState.nest.embed.title = "Start";
|
||||
}
|
||||
|
||||
AddState(flowState, position);
|
||||
}
|
||||
|
||||
private void CreateSuperState(Vector2 position)
|
||||
{
|
||||
var superState = SuperState.WithStart();
|
||||
|
||||
if (!graph.states.Any())
|
||||
{
|
||||
superState.isStart = true;
|
||||
superState.nest.embed.title = "Start";
|
||||
}
|
||||
|
||||
AddState(superState, position);
|
||||
}
|
||||
|
||||
private void CreateAnyState(Vector2 position)
|
||||
{
|
||||
AddState(new AnyState(), position);
|
||||
}
|
||||
|
||||
private void NewSticky(Vector2 position)
|
||||
{
|
||||
var stickyNote = new StickyNote() { position = new Rect(position, new Vector2(100, 100)) };
|
||||
graph.elements.Add(stickyNote);
|
||||
selection.Select(stickyNote);
|
||||
GUI.changed = true;
|
||||
}
|
||||
|
||||
public void AddState(IState state, Vector2 position)
|
||||
{
|
||||
UndoUtility.RecordEditedObject("Create State");
|
||||
state.position = position;
|
||||
graph.states.Add(state);
|
||||
state.position -= this.Widget(state).position.size / 2;
|
||||
state.position = state.position.PixelPerfect();
|
||||
this.Widget(state).Reposition();
|
||||
selection.Select(state);
|
||||
GUI.changed = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Lifecycle
|
||||
|
||||
public override void Close()
|
||||
{
|
||||
base.Close();
|
||||
|
||||
CancelTransition();
|
||||
}
|
||||
|
||||
protected override void HandleHighPriorityInput()
|
||||
{
|
||||
if (isCreatingTransition)
|
||||
{
|
||||
if (e.IsMouseDrag(MouseButton.Left))
|
||||
{
|
||||
// Priority over lasso
|
||||
e.Use();
|
||||
}
|
||||
else if (e.IsKeyDown(KeyCode.Escape))
|
||||
{
|
||||
CancelTransition();
|
||||
e.Use();
|
||||
}
|
||||
if (e.IsMouseDown(MouseButton.Left) || e.IsMouseUp(MouseButton.Left))
|
||||
{
|
||||
CompleteTransitionToNewState();
|
||||
e.Use();
|
||||
}
|
||||
}
|
||||
|
||||
base.HandleHighPriorityInput();
|
||||
}
|
||||
|
||||
public void CompleteTransitionToNewState()
|
||||
{
|
||||
var startRect = this.Widget(transitionSource).position;
|
||||
var end = mousePosition;
|
||||
|
||||
GraphGUI.GetConnectionEdge
|
||||
(
|
||||
startRect.center,
|
||||
end,
|
||||
out var startEdge,
|
||||
out var endEdge
|
||||
);
|
||||
|
||||
var destination = FlowState.WithEnterUpdateExit();
|
||||
graph.states.Add(destination);
|
||||
|
||||
Vector2 offset;
|
||||
|
||||
var size = this.Widget(destination).position.size;
|
||||
|
||||
switch (endEdge)
|
||||
{
|
||||
case Edge.Left:
|
||||
offset = new Vector2(0, -size.y / 2);
|
||||
break;
|
||||
case Edge.Right:
|
||||
offset = new Vector2(-size.x, -size.y / 2);
|
||||
break;
|
||||
case Edge.Top:
|
||||
offset = new Vector2(-size.x / 2, 0);
|
||||
break;
|
||||
case Edge.Bottom:
|
||||
offset = new Vector2(-size.x / 2, -size.y);
|
||||
break;
|
||||
default:
|
||||
throw new UnexpectedEnumValueException<Edge>(endEdge);
|
||||
}
|
||||
|
||||
destination.position = mousePosition + offset;
|
||||
|
||||
destination.position = destination.position.PixelPerfect();
|
||||
|
||||
EndTransition(destination);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Drag & Drop
|
||||
|
||||
public override bool AcceptsDragAndDrop()
|
||||
{
|
||||
return DragAndDropUtility.Is<ScriptGraphAsset>() || DragAndDropUtility.Is<StateGraphAsset>();
|
||||
}
|
||||
|
||||
public override void PerformDragAndDrop()
|
||||
{
|
||||
if (DragAndDropUtility.Is<ScriptGraphAsset>())
|
||||
{
|
||||
var flowMacro = DragAndDropUtility.Get<ScriptGraphAsset>();
|
||||
var flowState = new FlowState(flowMacro);
|
||||
AddState(flowState, DragAndDropUtility.position);
|
||||
}
|
||||
else if (DragAndDropUtility.Is<StateGraphAsset>())
|
||||
{
|
||||
var asset = DragAndDropUtility.Get<StateGraphAsset>();
|
||||
var superState = new SuperState(asset);
|
||||
AddState(superState, DragAndDropUtility.position);
|
||||
}
|
||||
}
|
||||
|
||||
public override void DrawDragAndDropPreview()
|
||||
{
|
||||
if (DragAndDropUtility.Is<ScriptGraphAsset>())
|
||||
{
|
||||
GraphGUI.DrawDragAndDropPreviewLabel(DragAndDropUtility.offsetedPosition, DragAndDropUtility.Get<ScriptGraphAsset>().name, typeof(ScriptGraphAsset).Icon());
|
||||
}
|
||||
else if (DragAndDropUtility.Is<StateGraphAsset>())
|
||||
{
|
||||
GraphGUI.DrawDragAndDropPreviewLabel(DragAndDropUtility.offsetedPosition, DragAndDropUtility.Get<StateGraphAsset>().name, typeof(StateGraphAsset).Icon());
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Transition Creation
|
||||
|
||||
public IState transitionSource { get; set; }
|
||||
|
||||
public bool isCreatingTransition => transitionSource != null;
|
||||
|
||||
public void StartTransition(IState source)
|
||||
{
|
||||
transitionSource = source;
|
||||
window.Focus();
|
||||
}
|
||||
|
||||
public void EndTransition(IState destination)
|
||||
{
|
||||
UndoUtility.RecordEditedObject("Create State Transition");
|
||||
|
||||
var transition = FlowStateTransition.WithDefaultTrigger(transitionSource, destination);
|
||||
graph.transitions.Add(transition);
|
||||
transitionSource = null;
|
||||
this.Widget(transition).BringToFront();
|
||||
selection.Select(transition);
|
||||
GUI.changed = true;
|
||||
}
|
||||
|
||||
public void CancelTransition()
|
||||
{
|
||||
transitionSource = null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0423634313e0049ed831dc5e3c8c0589
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[GraphContext(typeof(StateGraph))]
|
||||
public class StateGraphContext : GraphContext<StateGraph, StateCanvas>
|
||||
{
|
||||
public StateGraphContext(GraphReference reference) : base(reference) { }
|
||||
|
||||
public override string windowTitle => "State Graph";
|
||||
|
||||
protected override IEnumerable<ISidebarPanelContent> SidebarPanels()
|
||||
{
|
||||
yield return new GraphInspectorPanel(this);
|
||||
yield return new VariablesPanel(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 85de3188858c04b94957f45995108f1a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bf692785fed1a4d2c826ba2f5509edff
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,39 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(ID)]
|
||||
[PluginDependency(BoltCore.ID)]
|
||||
[Product(BoltProduct.ID)]
|
||||
[PluginRuntimeAssembly("Unity." + ID)]
|
||||
public sealed class BoltState : Plugin
|
||||
{
|
||||
[RenamedFrom("Bolt.State")]
|
||||
public const string ID = "VisualScripting.State";
|
||||
|
||||
public BoltState() : base()
|
||||
{
|
||||
instance = this;
|
||||
}
|
||||
|
||||
public static BoltState instance { get; private set; }
|
||||
|
||||
public static BoltStateManifest Manifest => (BoltStateManifest)instance?.manifest;
|
||||
public static BoltStateConfiguration Configuration => (BoltStateConfiguration)instance?.configuration;
|
||||
public static BoltStateResources Resources => (BoltStateResources)instance?.resources;
|
||||
public static BoltStateResources.Icons Icons => Resources?.icons;
|
||||
public const string LegacyRuntimeDllGuid = "dcd2196c4e9166f499793f2007fcda35";
|
||||
public const string LegacyEditorDllGuid = "25cf173c22a896d44ae550407b10ed98";
|
||||
|
||||
public override IEnumerable<ScriptReferenceReplacement> scriptReferenceReplacements
|
||||
{
|
||||
get
|
||||
{
|
||||
#pragma warning disable 618
|
||||
yield return ScriptReferenceReplacement.From<StateMachine>(ScriptReference.Dll(LegacyRuntimeDllGuid, "Bolt", "StateMachine"));
|
||||
yield return ScriptReferenceReplacement.From<StateGraphAsset>(ScriptReference.Dll(LegacyRuntimeDllGuid, "Bolt", "StateMacro"));
|
||||
#pragma warning restore 618
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f920ee4f22d664b36925352e3b321895
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,35 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
public sealed class BoltStateConfiguration : PluginConfiguration
|
||||
{
|
||||
private BoltStateConfiguration(BoltState plugin) : base(plugin) { }
|
||||
|
||||
public override string header => "State Graphs";
|
||||
|
||||
/// <summary>
|
||||
/// Determines under which condition events should be shown in state nodes.
|
||||
/// </summary>
|
||||
[EditorPref]
|
||||
public StateRevealCondition statesReveal { get; set; } = StateRevealCondition.Always;
|
||||
|
||||
/// <summary>
|
||||
/// Determines under which condition event names should be shown in state transition.
|
||||
/// </summary>
|
||||
[EditorPref]
|
||||
public StateRevealCondition transitionsReveal { get; set; } = StateRevealCondition.OnHoverWithAlt;
|
||||
|
||||
/// <summary>
|
||||
/// Whether state transitions should show an arrow at their destination state. This can appear confusing when there are
|
||||
/// multiple transitions.
|
||||
/// </summary>
|
||||
[EditorPref]
|
||||
public bool transitionsEndArrow { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Whether traversed transitions should show a droplet animation.
|
||||
/// </summary>
|
||||
[EditorPref]
|
||||
public bool animateTransitions { get; set; } = true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dad6936c226ce49b9a651479afeb690b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
public sealed class BoltStateManifest : PluginManifest
|
||||
{
|
||||
private BoltStateManifest(BoltState plugin) : base(plugin) { }
|
||||
|
||||
public override string name => "Visual Scripting State";
|
||||
public override string author => "";
|
||||
public override string description => "State-machine based visual scripting.";
|
||||
public override SemanticVersion version => PackageVersionUtility.version;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 68a1715d9bf874bd7ae73ff9648bea1b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,36 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
public sealed class BoltStateResources : PluginResources
|
||||
{
|
||||
private BoltStateResources(BoltState plugin) : base(plugin)
|
||||
{
|
||||
icons = new Icons(this);
|
||||
}
|
||||
|
||||
public Icons icons { get; private set; }
|
||||
|
||||
public override void LateInitialize()
|
||||
{
|
||||
icons.Load();
|
||||
}
|
||||
|
||||
public class Icons
|
||||
{
|
||||
public Icons(BoltStateResources resources)
|
||||
{
|
||||
this.resources = resources;
|
||||
}
|
||||
|
||||
private readonly BoltStateResources resources;
|
||||
public EditorTexture graph { get; private set; }
|
||||
public EditorTexture state { get; private set; }
|
||||
|
||||
public void Load()
|
||||
{
|
||||
graph = typeof(StateGraph).Icon();
|
||||
state = typeof(State).Icon();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 84e6afc294cf242f7b5b66254c763183
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ac1f64ab829894a92a9a4727bbee1721
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_0_0 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_0_0(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override string description => "Initial Release";
|
||||
public override SemanticVersion version => "1.0.0";
|
||||
public override DateTime date => new DateTime(2017, 07, 26);
|
||||
public override IEnumerable<string> changes => Enumerable.Empty<string>();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7ce3ec6fc91e046a4a8911343aa505c7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_0_1 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_0_1(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion version => "1.0.1";
|
||||
public override DateTime date => new DateTime(2017, 08, 01);
|
||||
|
||||
public override IEnumerable<string> changes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return "[Fixed] State header icon size on retina displays";
|
||||
yield return "[Fixed] Pasting into state transition";
|
||||
yield return "[Fixed] Transition events not being triggered from state entry";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dcc6f0c1385114ccf94f9a7112c95d79
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_0_2 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_0_2(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion version => "1.0.2";
|
||||
public override DateTime date => new DateTime(2017, 09, 08);
|
||||
|
||||
public override IEnumerable<string> changes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return "[Fixed] Order-of-operations issues with transitions and updates";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 32396d7cafec147a8b62dce93b2c8f33
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_1_1 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_1_1(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion version => "1.1.1";
|
||||
public override DateTime date => new DateTime(2017, 10, 10);
|
||||
|
||||
public override IEnumerable<string> changes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return "[Changed] Default transitions to not include Update event anymore";
|
||||
yield return "[Fixed] Inactive states sometimes updating";
|
||||
yield return "[Optimized] Editor recursion performance";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9bae4d3962b184e788831cefda9e20bb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_1_2 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_1_2(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion version => "1.1.2";
|
||||
public override DateTime date => new DateTime(2017, 10, 16);
|
||||
|
||||
public override IEnumerable<string> changes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return "[Fixed] Issue with dragging";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b59c9165726434ecc96fc359de597099
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_1_3 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_1_3(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion version => "1.1.3";
|
||||
public override DateTime date => new DateTime(2017, 10, 30);
|
||||
|
||||
public override IEnumerable<string> changes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return "[Fixed] Deserialization error due to nester owner being serialized";
|
||||
yield return "[Fixed] Descriptor error with nested events";
|
||||
yield return "[Fixed] Event listening state being serialized";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 216a0cbaede884a7785cb137b90301b1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_2_2 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_2_2(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion version => "1.2.2";
|
||||
public override DateTime date => new DateTime(2017, 12, 04);
|
||||
|
||||
public override IEnumerable<string> changes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return "[Added] Any State";
|
||||
yield return "[Added] Droplet animations for transitions";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9da5e47993cc143868fbaceb76639261
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_2_3 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_2_3(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion version => "1.2.3";
|
||||
public override DateTime date => new DateTime(2018, 01, 25);
|
||||
|
||||
public override IEnumerable<string> changes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return "[Added] Trigger enter / exit state events in transitions";
|
||||
yield return "[Fixed] Fixed Update and Late Update not firing in super states";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 237934135a3b1433eade240044ab5490
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_2_4 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_2_4(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion version => "1.2.4";
|
||||
public override DateTime date => new DateTime(2018, 02, 26);
|
||||
|
||||
public override IEnumerable<string> changes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return "[Fixed] Manual events not triggering in state units";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4a4c4880bf45e4dcd92c58a4898e83f8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_3_0 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_3_0(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion version => "1.3.0";
|
||||
public override DateTime date => new DateTime(2018, 04, 06);
|
||||
|
||||
public override IEnumerable<string> changes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return "[Fixed] State unit relations";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7199fb71ac8b447d28bcc153d72b3147
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_4_0f6 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_4_0f6(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion version => "1.4.0f6";
|
||||
public override DateTime date => new DateTime(2018, 09, 06);
|
||||
|
||||
public override IEnumerable<string> changes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return "[Fixed] On Enter State and On Exit State events not firing in super units";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_4_0f10 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_4_0f10(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion version => "1.4.0f10";
|
||||
public override DateTime date => new DateTime(2018, 10, 29);
|
||||
|
||||
public override IEnumerable<string> changes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return "[Fixed] Inactive states starting to listen after undo";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 29a9c8f8714ef4a7a87311418ea65ed6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,29 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Changelog_1_4_1 : PluginChangelog
|
||||
{
|
||||
public Changelog_1_4_1(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion version => "1.4.1";
|
||||
|
||||
public override DateTime date => new DateTime(2019, 01, 22);
|
||||
|
||||
public override IEnumerable<string> changes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return "[Changed] Allowed state machines to receive Start, OnEnable and OnDisable events for consistency";
|
||||
yield return "[Fixed] Graph data type mismatch in event listening handlers for state graphs";
|
||||
yield return "[Fixed] Non instantiated state graphs showing force enter / force exit contextual menu options";
|
||||
yield return "[Fixed] Live-added Any States not sending transitions";
|
||||
yield return "[Fixed] Any States not exiting properly when stopping the graph";
|
||||
yield return "[Fixed] Live-added start states not getting automatically entered";
|
||||
yield return "[Fixed] Force Enter and Force Exit showing in Any State context menu";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8e8cdb556e8ed4b8e919d6d39e165125
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0b1525bda7254587be55ddfe956a7b96
|
||||
timeCreated: 1605804310
|
||||
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Migration_1_5_1_to_1_5_2 : PluginMigration
|
||||
{
|
||||
internal Migration_1_5_1_to_1_5_2(Plugin plugin) : base(plugin)
|
||||
{
|
||||
order = 1;
|
||||
}
|
||||
|
||||
public override SemanticVersion @from => "1.5.1";
|
||||
public override SemanticVersion to => "1.5.2";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
try
|
||||
{
|
||||
MigrateProjectSettings();
|
||||
}
|
||||
#pragma warning disable 168
|
||||
catch (Exception e)
|
||||
#pragma warning restore 168
|
||||
{
|
||||
Debug.LogWarning("There was a problem migrating your Visual Scripting project settings. Be sure to check them in Edit -> Project Settings -> Visual Scripting");
|
||||
#if VISUAL_SCRIPT_DEBUG_MIGRATION
|
||||
Debug.LogError(e);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
private static void MigrateProjectSettings()
|
||||
{
|
||||
BoltState.Configuration.LoadOrCreateProjectSettingsAsset();
|
||||
|
||||
var legacyProjectSettingsAsset = MigrationUtility_1_5_1_to_1_5_2.GetLegacyProjectSettingsAsset("VisualScripting.State");
|
||||
if (legacyProjectSettingsAsset != null)
|
||||
{
|
||||
BoltState.Configuration.projectSettingsAsset.Merge(legacyProjectSettingsAsset);
|
||||
}
|
||||
|
||||
BoltState.Configuration.SaveProjectSettingsAsset(true);
|
||||
BoltState.Configuration.ResetProjectSettingsMetadata();
|
||||
}
|
||||
}
|
||||
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class DeprecatedSavedVersionLoader_1_5_1 : PluginDeprecatedSavedVersionLoader
|
||||
{
|
||||
internal DeprecatedSavedVersionLoader_1_5_1(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion @from => "1.5.1";
|
||||
|
||||
public override bool Run(out SemanticVersion savedVersion)
|
||||
{
|
||||
var manuallyParsedVersion = MigrationUtility_1_5_1_to_1_5_2.TryManualParseSavedVersion("VisualScripting.State");
|
||||
savedVersion = manuallyParsedVersion;
|
||||
|
||||
return savedVersion != "0.0.0";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6753fa3367ac4986a92909ed6eb78772
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,49 @@
|
||||
using System;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Migration_1_6_to_1_7 : PluginMigration
|
||||
{
|
||||
internal Migration_1_6_to_1_7(Plugin plugin) : base(plugin)
|
||||
{
|
||||
order = 2;
|
||||
}
|
||||
|
||||
public override SemanticVersion @from => "1.6.1000";
|
||||
public override SemanticVersion to => "1.7.0-pre.0";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
// Need to reset our project settings metadata list to point to the new project settings asset and
|
||||
// underlying dictionary. That way when it gets saved we don't overwrite the files data
|
||||
BoltState.Configuration.LoadProjectSettings();
|
||||
}
|
||||
}
|
||||
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class DeprecatedSavedVersionLoader_1_6_1 : PluginDeprecatedSavedVersionLoader
|
||||
{
|
||||
public DeprecatedSavedVersionLoader_1_6_1(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion @from => "1.6.1";
|
||||
|
||||
public override bool Run(out SemanticVersion savedVersion)
|
||||
{
|
||||
savedVersion = new SemanticVersion();
|
||||
try
|
||||
{
|
||||
var legacyProjectSettingsAsset = MigrationUtility_1_6_to_1_7.GetLegacyProjectSettingsAsset("VisualScripting.State");
|
||||
if (legacyProjectSettingsAsset == null)
|
||||
return false;
|
||||
|
||||
savedVersion = (SemanticVersion)legacyProjectSettingsAsset["savedVersion"];
|
||||
return true;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 55f9606c92224790823f7ac7fd2c8d41
|
||||
timeCreated: 1618943136
|
||||
@@ -0,0 +1,82 @@
|
||||
using System;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class Migration_Asset_to_Package : PluginMigration
|
||||
{
|
||||
public Migration_Asset_to_Package(Plugin plugin) : base(plugin)
|
||||
{
|
||||
order = 2;
|
||||
}
|
||||
|
||||
public override SemanticVersion @from => "1.4.1000";
|
||||
public override SemanticVersion to => "1.5.0-pre.0";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
plugin.configuration.Initialize();
|
||||
|
||||
try
|
||||
{
|
||||
MigrateProjectSettings();
|
||||
}
|
||||
#pragma warning disable 168
|
||||
catch (Exception e)
|
||||
#pragma warning restore 168
|
||||
{
|
||||
Debug.LogWarning("There was a problem migrating your Visual Scripting project settings. Be sure to check them in Edit -> Project Settings -> Visual Scripting");
|
||||
#if VISUAL_SCRIPT_DEBUG_MIGRATION
|
||||
Debug.LogError(e);
|
||||
#endif
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
MigrationUtility_Asset_to_Package.MigrateEditorPreferences(this.plugin);
|
||||
}
|
||||
#pragma warning disable 168
|
||||
catch (Exception e)
|
||||
#pragma warning restore 168
|
||||
{
|
||||
Debug.LogWarning("There was a problem migrating your Visual Scripting editor preferences. Be sure to check them in Edit -> Preferences -> Visual Scripting");
|
||||
#if VISUAL_SCRIPT_DEBUG_MIGRATION
|
||||
Debug.LogError(e);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
private static void MigrateProjectSettings()
|
||||
{
|
||||
// Bolt.State -> VisualScripting.State
|
||||
BoltState.Configuration.LoadOrCreateProjectSettingsAsset();
|
||||
|
||||
var legacyProjectSettingsAsset = MigrationUtility_Asset_to_Package.GetLegacyProjectSettingsAsset("Bolt.State");
|
||||
if (legacyProjectSettingsAsset != null)
|
||||
{
|
||||
BoltState.Configuration.projectSettingsAsset.Merge(legacyProjectSettingsAsset);
|
||||
}
|
||||
|
||||
BoltState.Configuration.SaveProjectSettingsAsset(true);
|
||||
BoltState.Configuration.ResetProjectSettingsMetadata();
|
||||
}
|
||||
}
|
||||
|
||||
[Plugin(BoltState.ID)]
|
||||
internal class DeprecatedSavedVersionLoader_Bolt_AssetStore : PluginDeprecatedSavedVersionLoader
|
||||
{
|
||||
public DeprecatedSavedVersionLoader_Bolt_AssetStore(Plugin plugin) : base(plugin) { }
|
||||
|
||||
public override SemanticVersion @from => "1.4.13";
|
||||
|
||||
public override bool Run(out SemanticVersion savedVersion)
|
||||
{
|
||||
var manuallyParsedVersion = MigrationUtility_Asset_to_Package.TryManualParseSavedVersion("Bolt.State");
|
||||
savedVersion = manuallyParsedVersion;
|
||||
|
||||
return savedVersion != "0.0.0";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 80b5f06f2b254106834105b126a44f19
|
||||
timeCreated: 1605804325
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 827d5236b5139448087199dead970061
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,46 @@
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
#if DISTRIBUTE_ASSEMBLIES
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
|
||||
[assembly: AssemblyTitle("Visual Scripting State (Editor)")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Unity")]
|
||||
[assembly: AssemblyProduct("Visual Scripting")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
|
||||
[assembly: Guid("50495950-7a88-44ea-9818-505a9748a580")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
#endif
|
||||
|
||||
[assembly: InternalsVisibleTo("Unity.VisualScripting.SettingsProvider.Editor")]
|
||||
[assembly: InternalsVisibleTo("Unity.VisualScripting.Tests.Editor")]
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 286bccc220e084ed8af5857efa15db7c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Editor(typeof(StateGraph))]
|
||||
public class StateGraphEditor : GraphEditor
|
||||
{
|
||||
public StateGraphEditor(Metadata metadata) : base(metadata) { }
|
||||
|
||||
private new StateGraph graph => (StateGraph)base.graph;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 21e5071c21b124b5ab6885e0b2867feb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public enum StateRevealCondition
|
||||
{
|
||||
Never,
|
||||
Always,
|
||||
OnHover,
|
||||
OnHoverWithAlt,
|
||||
WhenSelected,
|
||||
OnHoverOrSelected,
|
||||
OnHoverWithAltOrSelected,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 86b460b328d2945298f3ad268e33836e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2679e29c22cab4c519e514fdd6cde9c3
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Descriptor(typeof(AnyState))]
|
||||
public class AnyStateDescriptor : StateDescriptor<AnyState>
|
||||
{
|
||||
public AnyStateDescriptor(AnyState state) : base(state) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0ae8021e59c334368b5ae08b2adfcfaf
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Widget(typeof(AnyState))]
|
||||
public class AnyStateWidget : StateWidget<AnyState>
|
||||
{
|
||||
public AnyStateWidget(StateCanvas canvas, AnyState state) : base(canvas, state) { }
|
||||
|
||||
protected override NodeColorMix color => NodeColorMix.TealReadable;
|
||||
|
||||
protected override string summary => null;
|
||||
|
||||
public override bool canToggleStart => false;
|
||||
|
||||
public override bool canForceEnter => false;
|
||||
|
||||
public override bool canForceExit => false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e7f4def392c07401096915e803a01ebf
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Descriptor(typeof(FlowState))]
|
||||
public class FlowStateDescriptor : NesterStateDescriptor<FlowState>
|
||||
{
|
||||
public FlowStateDescriptor(FlowState state) : base(state) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f66f8803a57c44b2eb4880f870823740
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Editor(typeof(FlowState))]
|
||||
public sealed class FlowStateEditor : NesterStateEditor
|
||||
{
|
||||
public FlowStateEditor(Metadata metadata) : base(metadata) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5290affe00001419e8971554534f83f5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,231 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Widget(typeof(FlowState))]
|
||||
public sealed class FlowStateWidget : NesterStateWidget<FlowState>, IDragAndDropHandler
|
||||
{
|
||||
public FlowStateWidget(StateCanvas canvas, FlowState state) : base(canvas, state)
|
||||
{
|
||||
state.nest.beforeGraphChange += BeforeGraphChange;
|
||||
state.nest.afterGraphChange += AfterGraphChange;
|
||||
|
||||
if (state.nest.graph != null)
|
||||
{
|
||||
state.nest.graph.elements.CollectionChanged += CacheEventLinesOnUnityThread;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
|
||||
state.nest.beforeGraphChange -= BeforeGraphChange;
|
||||
state.nest.afterGraphChange -= AfterGraphChange;
|
||||
}
|
||||
|
||||
private void BeforeGraphChange()
|
||||
{
|
||||
if (state.nest.graph != null)
|
||||
{
|
||||
state.nest.graph.elements.CollectionChanged -= CacheEventLinesOnUnityThread;
|
||||
}
|
||||
}
|
||||
|
||||
private void AfterGraphChange()
|
||||
{
|
||||
CacheEventLinesOnUnityThread();
|
||||
|
||||
if (state.nest.graph != null)
|
||||
{
|
||||
state.nest.graph.elements.CollectionChanged += CacheEventLinesOnUnityThread;
|
||||
}
|
||||
}
|
||||
|
||||
#region Model
|
||||
|
||||
private List<EventLine> eventLines { get; } = new List<EventLine>();
|
||||
|
||||
private void CacheEventLinesOnUnityThread()
|
||||
{
|
||||
UnityAPI.Async(CacheEventLines);
|
||||
}
|
||||
|
||||
private void CacheEventLines()
|
||||
{
|
||||
eventLines.Clear();
|
||||
|
||||
if (state.nest.graph != null)
|
||||
{
|
||||
eventLines.AddRange(state.nest.graph.units
|
||||
.OfType<IEventUnit>()
|
||||
.Select(e => e.GetType())
|
||||
.Distinct()
|
||||
.Select(eventType => new EventLine(eventType))
|
||||
.OrderBy(eventLine => eventLine.content.text));
|
||||
}
|
||||
|
||||
Reposition();
|
||||
}
|
||||
|
||||
protected override void CacheItemFirstTime()
|
||||
{
|
||||
base.CacheItemFirstTime();
|
||||
|
||||
CacheEventLines();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Positioning
|
||||
|
||||
public Dictionary<EventLine, Rect> eventLinesPositions { get; } = new Dictionary<EventLine, Rect>();
|
||||
|
||||
public override void CachePosition()
|
||||
{
|
||||
base.CachePosition();
|
||||
|
||||
eventLinesPositions.Clear();
|
||||
|
||||
var y = contentInnerPosition.y;
|
||||
|
||||
foreach (var eventLine in eventLines)
|
||||
{
|
||||
var eventLinePosition = new Rect
|
||||
(
|
||||
contentInnerPosition.x,
|
||||
y,
|
||||
contentInnerPosition.width,
|
||||
eventLine.GetHeight(contentInnerPosition.width)
|
||||
);
|
||||
|
||||
eventLinesPositions.Add(eventLine, eventLinePosition);
|
||||
|
||||
y += eventLinePosition.height;
|
||||
}
|
||||
}
|
||||
|
||||
protected override float GetContentHeight(float width)
|
||||
{
|
||||
var eventLinesHeight = 0f;
|
||||
|
||||
foreach (var eventLine in eventLines)
|
||||
{
|
||||
eventLinesHeight += eventLine.GetHeight(width);
|
||||
}
|
||||
|
||||
return eventLinesHeight;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Drawing
|
||||
|
||||
protected override bool showContent => eventLines.Count > 0;
|
||||
|
||||
protected override void DrawContent()
|
||||
{
|
||||
foreach (var eventLine in eventLines)
|
||||
{
|
||||
eventLine.Draw(eventLinesPositions[eventLine]);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Drag & Drop
|
||||
|
||||
public DragAndDropVisualMode dragAndDropVisualMode => DragAndDropVisualMode.Generic;
|
||||
|
||||
public bool AcceptsDragAndDrop()
|
||||
{
|
||||
return DragAndDropUtility.Is<ScriptGraphAsset>();
|
||||
}
|
||||
|
||||
public void PerformDragAndDrop()
|
||||
{
|
||||
UndoUtility.RecordEditedObject("Drag & Drop Macro");
|
||||
state.nest.source = GraphSource.Macro;
|
||||
state.nest.macro = DragAndDropUtility.Get<ScriptGraphAsset>();
|
||||
state.nest.embed = null;
|
||||
GUI.changed = true;
|
||||
}
|
||||
|
||||
public void UpdateDragAndDrop() { }
|
||||
|
||||
public void DrawDragAndDropPreview()
|
||||
{
|
||||
GraphGUI.DrawDragAndDropPreviewLabel(new Vector2(edgePosition.x, outerPosition.yMax), "Replace with: " + DragAndDropUtility.Get<ScriptGraphAsset>().name, typeof(ScriptGraphAsset).Icon());
|
||||
}
|
||||
|
||||
public void ExitDragAndDrop() { }
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
public new static class Styles
|
||||
{
|
||||
static Styles()
|
||||
{
|
||||
eventLine = new GUIStyle(EditorStyles.label);
|
||||
eventLine.wordWrap = true;
|
||||
eventLine.imagePosition = ImagePosition.TextOnly; // The icon is drawn manually
|
||||
eventLine.padding = new RectOffset(0, 0, 3, 3);
|
||||
}
|
||||
|
||||
public static readonly GUIStyle eventLine;
|
||||
|
||||
public static readonly float spaceAroundLineIcon = 5;
|
||||
}
|
||||
|
||||
public class EventLine
|
||||
{
|
||||
public EventLine(Type eventType)
|
||||
{
|
||||
content = new GUIContent(BoltFlowNameUtility.UnitTitle(eventType, false, true), eventType.Icon()?[IconSize.Small]);
|
||||
}
|
||||
|
||||
public GUIContent content { get; }
|
||||
|
||||
public float GetHeight(float width)
|
||||
{
|
||||
var labelWidth = width - Styles.spaceAroundLineIcon - IconSize.Small - Styles.spaceAroundLineIcon;
|
||||
|
||||
return Styles.eventLine.CalcHeight(content, labelWidth);
|
||||
}
|
||||
|
||||
public void Draw(Rect position)
|
||||
{
|
||||
var iconPosition = new Rect
|
||||
(
|
||||
position.x + Styles.spaceAroundLineIcon,
|
||||
position.y + Styles.eventLine.padding.top - 1,
|
||||
IconSize.Small,
|
||||
IconSize.Small
|
||||
);
|
||||
|
||||
var labelPosition = new Rect
|
||||
(
|
||||
iconPosition.xMax + Styles.spaceAroundLineIcon,
|
||||
position.y,
|
||||
position.width - Styles.spaceAroundLineIcon - iconPosition.width - Styles.spaceAroundLineIcon,
|
||||
position.height
|
||||
);
|
||||
|
||||
if (content.image != null)
|
||||
{
|
||||
GUI.DrawTexture(iconPosition, content.image);
|
||||
}
|
||||
|
||||
GUI.Label(labelPosition, content, Styles.eventLine);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d891a8dfd0a4d464897c1598d1a0f5a0
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public interface IStateWidget : IGraphElementWidget
|
||||
{
|
||||
IState state { get; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a560e5c5437a44f2db6a4291e7ea9182
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,29 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Analyser(typeof(INesterState))]
|
||||
public class NesterStateAnalyser<TNesterState> : StateAnalyser<TNesterState>
|
||||
where TNesterState : class, INesterState
|
||||
{
|
||||
public NesterStateAnalyser(GraphReference reference, TNesterState state) : base(reference, state) { }
|
||||
|
||||
protected override IEnumerable<Warning> Warnings()
|
||||
{
|
||||
foreach (var baseWarning in base.Warnings())
|
||||
{
|
||||
yield return baseWarning;
|
||||
}
|
||||
|
||||
if (state.childGraph == null)
|
||||
{
|
||||
yield return Warning.Caution("Missing nested graph.");
|
||||
}
|
||||
|
||||
if (state.nest.hasBackgroundEmbed)
|
||||
{
|
||||
yield return Warning.Caution("Background embed graph detected.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2bca8b8e70d8942bc9e0bed5eddf855d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,21 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Descriptor(typeof(INesterState))]
|
||||
public class NesterStateDescriptor<TNesterState> : StateDescriptor<TNesterState>
|
||||
where TNesterState : class, INesterState
|
||||
{
|
||||
public NesterStateDescriptor(TNesterState state) : base(state) { }
|
||||
|
||||
[RequiresUnityAPI]
|
||||
public override string Title()
|
||||
{
|
||||
return GraphNesterDescriptor.Title(state);
|
||||
}
|
||||
|
||||
[RequiresUnityAPI]
|
||||
public override string Summary()
|
||||
{
|
||||
return GraphNesterDescriptor.Summary(state);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e5353b3c45ba346d2ae924e8c15518cd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,30 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Editor(typeof(INesterState))]
|
||||
public class NesterStateEditor : StateEditor
|
||||
{
|
||||
public NesterStateEditor(Metadata metadata) : base(metadata) { }
|
||||
|
||||
private Metadata nestMetadata => metadata[nameof(INesterState.nest)];
|
||||
|
||||
private Metadata graphMetadata => nestMetadata[nameof(IGraphNest.graph)];
|
||||
|
||||
protected override GraphReference headerReference => reference.ChildReference((INesterState)metadata.value, false);
|
||||
|
||||
protected override Metadata headerTitleMetadata => graphMetadata[nameof(IGraph.title)];
|
||||
|
||||
protected override Metadata headerSummaryMetadata => graphMetadata[nameof(IGraph.summary)];
|
||||
|
||||
protected override float GetInspectorHeight(float width)
|
||||
{
|
||||
return LudiqGUI.GetEditorHeight(this, nestMetadata, width);
|
||||
}
|
||||
|
||||
protected override void OnInspectorGUI(Rect position)
|
||||
{
|
||||
LudiqGUI.Editor(nestMetadata, position);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 26fe4d37196fc4b978c8d67f2bf58df3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,56 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public abstract class NesterStateWidget<TNesterState> : StateWidget<TNesterState>
|
||||
where TNesterState : class, INesterState
|
||||
{
|
||||
protected NesterStateWidget(StateCanvas canvas, TNesterState state) : base(canvas, state) { }
|
||||
|
||||
protected override IEnumerable<DropdownOption> contextOptions
|
||||
{
|
||||
get
|
||||
{
|
||||
var childReference = reference.ChildReference(state, false);
|
||||
|
||||
if (state.childGraph != null)
|
||||
{
|
||||
yield return new DropdownOption((Action)(() => window.reference = childReference), "Open");
|
||||
yield return new DropdownOption((Action)(() => GraphWindow.OpenTab(childReference)), "Open in new window");
|
||||
}
|
||||
|
||||
foreach (var baseOption in base.contextOptions)
|
||||
{
|
||||
yield return baseOption;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnDoubleClick()
|
||||
{
|
||||
if (state.graph.zoom == 1)
|
||||
{
|
||||
var childReference = reference.ChildReference(state, false);
|
||||
|
||||
if (childReference != null)
|
||||
{
|
||||
if (e.ctrlOrCmd)
|
||||
{
|
||||
GraphWindow.OpenTab(childReference);
|
||||
}
|
||||
else
|
||||
{
|
||||
window.reference = childReference;
|
||||
}
|
||||
}
|
||||
|
||||
e.Use();
|
||||
}
|
||||
else
|
||||
{
|
||||
base.OnDoubleClick();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8143bcca23d9e4377b5974c05f42e6dc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,57 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Analyser(typeof(IState))]
|
||||
public class StateAnalyser<TState> : Analyser<TState, StateAnalysis>
|
||||
where TState : class, IState
|
||||
{
|
||||
public StateAnalyser(GraphReference reference, TState target) : base(reference, target) { }
|
||||
|
||||
public TState state => target;
|
||||
|
||||
[Assigns]
|
||||
protected virtual bool IsEntered()
|
||||
{
|
||||
using (var recursion = Recursion.New(1))
|
||||
{
|
||||
return IsEntered(state, recursion);
|
||||
}
|
||||
}
|
||||
|
||||
[Assigns]
|
||||
protected virtual IEnumerable<Warning> Warnings()
|
||||
{
|
||||
if (!IsEntered())
|
||||
{
|
||||
yield return Warning.Info("State is never entered.");
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsEntered(IState state, Recursion recursion)
|
||||
{
|
||||
if (state.isStart)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!recursion?.TryEnter(state) ?? false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach (var incomingTransition in state.incomingTransitions)
|
||||
{
|
||||
if (IsEntered(incomingTransition.source, recursion) && incomingTransition.Analysis<StateTransitionAnalysis>(context).isTraversed)
|
||||
{
|
||||
recursion?.Exit(state);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
recursion?.Exit(state);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eb1a4bbdbfdb14545866ce6d30badb33
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public sealed class StateAnalysis : GraphElementAnalysis
|
||||
{
|
||||
public bool isEntered { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 90539a84ee39e4c2493af60a32b9adb4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public sealed class StateDescription : GraphElementDescription
|
||||
{
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user