test
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Analyser(typeof(FlowStateTransition))]
|
||||
public class FlowStateTransitionAnalyser : NesterStateTransitionAnalyser<FlowStateTransition>
|
||||
{
|
||||
public FlowStateTransitionAnalyser(GraphReference reference, FlowStateTransition transition) : base(reference, transition) { }
|
||||
|
||||
protected override bool IsTraversed()
|
||||
{
|
||||
var graph = transition.nest.graph;
|
||||
|
||||
if (graph == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
using (var recursion = Recursion.New(1))
|
||||
{
|
||||
foreach (var trigger in graph.GetUnitsRecursive(recursion).OfType<TriggerStateTransition>())
|
||||
{
|
||||
if (trigger.Analysis<UnitAnalysis>(context).isEntered)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected override IEnumerable<Warning> Warnings()
|
||||
{
|
||||
foreach (var baseWarning in base.Warnings())
|
||||
{
|
||||
yield return baseWarning;
|
||||
}
|
||||
|
||||
var graph = transition.nest.graph;
|
||||
|
||||
if (graph == null)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
using (var recursion = Recursion.New(1))
|
||||
{
|
||||
if (!graph.GetUnitsRecursive(recursion).OfType<IEventUnit>().Any())
|
||||
{
|
||||
yield return Warning.Caution("Transition graph is missing an event.");
|
||||
}
|
||||
}
|
||||
|
||||
using (var recursion = Recursion.New(1))
|
||||
{
|
||||
if (!graph.GetUnitsRecursive(recursion).OfType<TriggerStateTransition>().Any())
|
||||
{
|
||||
yield return Warning.Caution("Transition graph is missing a trigger unit.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1275e89e45fac4c26b82fda27d2d9647
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,106 @@
|
||||
using System.Linq;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Descriptor(typeof(FlowStateTransition))]
|
||||
public class FlowStateTransitionDescriptor : NesterStateTransitionDescriptor<FlowStateTransition>
|
||||
{
|
||||
public FlowStateTransitionDescriptor(FlowStateTransition transition) : base(transition) { }
|
||||
|
||||
public override string Title()
|
||||
{
|
||||
var graph = transition.nest.graph;
|
||||
|
||||
if (graph != null)
|
||||
{
|
||||
if (!StringUtility.IsNullOrWhiteSpace(graph.title))
|
||||
{
|
||||
return graph.title;
|
||||
}
|
||||
|
||||
using (var recursion = Recursion.New(1))
|
||||
{
|
||||
var events = graph.GetUnitsRecursive(recursion).OfType<IEventUnit>().ToList();
|
||||
|
||||
if (events.Count == 0)
|
||||
{
|
||||
return "(No Event)";
|
||||
}
|
||||
else if (events.Count == 1)
|
||||
{
|
||||
return events[0].Description().title;
|
||||
}
|
||||
else // if (events.Count > 1)
|
||||
{
|
||||
return "(Multiple Events)";
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "(No Transition)";
|
||||
}
|
||||
}
|
||||
|
||||
public override string Summary()
|
||||
{
|
||||
var graph = transition.nest.graph;
|
||||
|
||||
if (graph != null)
|
||||
{
|
||||
if (!StringUtility.IsNullOrWhiteSpace(graph.summary))
|
||||
{
|
||||
return graph.summary;
|
||||
}
|
||||
|
||||
using (var recursion = Recursion.New(1))
|
||||
{
|
||||
var events = graph.GetUnitsRecursive(recursion).OfType<IEventUnit>().ToList();
|
||||
|
||||
if (events.Count == 0)
|
||||
{
|
||||
return "Open the transition graph to add an event.";
|
||||
}
|
||||
else if (events.Count == 1)
|
||||
{
|
||||
return events[0].Description().summary;
|
||||
}
|
||||
else // if (events.Count > 1)
|
||||
{
|
||||
return "Open the transition graph to see the full transition.";
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "Choose a source in the graph inspector.";
|
||||
}
|
||||
}
|
||||
|
||||
public override EditorTexture Icon()
|
||||
{
|
||||
var graph = transition.nest.graph;
|
||||
|
||||
using (var recursion = Recursion.New(1))
|
||||
{
|
||||
if (graph != null)
|
||||
{
|
||||
var events = graph.GetUnitsRecursive(recursion).OfType<IEventUnit>().ToList();
|
||||
|
||||
if (events.Count == 1)
|
||||
{
|
||||
return events[0].Description().icon;
|
||||
}
|
||||
else
|
||||
{
|
||||
return typeof(IStateTransition).Icon();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return typeof(IStateTransition).Icon();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 355c8a593616d459494378fc4c6f39a2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,8 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Editor(typeof(FlowStateTransition))]
|
||||
public sealed class FlowStateTransitionEditor : NesterStateTransitionEditor
|
||||
{
|
||||
public FlowStateTransitionEditor(Metadata metadata) : base(metadata) { }
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6a1240097a06b411090f9cb6c29cf64a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,44 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Widget(typeof(FlowStateTransition))]
|
||||
public sealed class FlowStateTransitionWidget : NesterStateTransitionWidget<FlowStateTransition>, IDragAndDropHandler
|
||||
{
|
||||
public FlowStateTransitionWidget(StateCanvas canvas, FlowStateTransition transition) : base(canvas, transition) { }
|
||||
|
||||
#region Drag & Drop
|
||||
|
||||
public DragAndDropVisualMode dragAndDropVisualMode => DragAndDropVisualMode.Generic;
|
||||
|
||||
public bool AcceptsDragAndDrop()
|
||||
{
|
||||
return DragAndDropUtility.Is<ScriptGraphAsset>();
|
||||
}
|
||||
|
||||
public void PerformDragAndDrop()
|
||||
{
|
||||
UndoUtility.RecordEditedObject("Drag & Drop Macro");
|
||||
transition.nest.source = GraphSource.Macro;
|
||||
transition.nest.macro = DragAndDropUtility.Get<ScriptGraphAsset>();
|
||||
transition.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
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 78c6207d792514839993cf7f713d79e2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,7 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public interface IStateTransitionWidget : INodeWidget
|
||||
{
|
||||
Edge sourceEdge { get; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1b9a6728ed0414076b5bd0a744bb8b21
|
||||
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(INesterStateTransition))]
|
||||
public class NesterStateTransitionAnalyser<TGraphNesterStateTransition> : StateTransitionAnalyser<TGraphNesterStateTransition>
|
||||
where TGraphNesterStateTransition : class, INesterStateTransition
|
||||
{
|
||||
public NesterStateTransitionAnalyser(GraphReference reference, TGraphNesterStateTransition transition) : base(reference, transition) { }
|
||||
|
||||
protected override IEnumerable<Warning> Warnings()
|
||||
{
|
||||
foreach (var baseWarning in base.Warnings())
|
||||
{
|
||||
yield return baseWarning;
|
||||
}
|
||||
|
||||
if (transition.childGraph == null)
|
||||
{
|
||||
yield return Warning.Caution("Missing transition graph.");
|
||||
}
|
||||
|
||||
if (transition.nest.hasBackgroundEmbed)
|
||||
{
|
||||
yield return Warning.Caution("Background embed graph detected.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b41eaa7e036334f5abae76f726a02edc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,21 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Descriptor(typeof(INesterStateTransition))]
|
||||
public class NesterStateTransitionDescriptor<TNesterStateTransition> : StateTransitionDescriptor<TNesterStateTransition>
|
||||
where TNesterStateTransition : class, INesterStateTransition
|
||||
{
|
||||
public NesterStateTransitionDescriptor(TNesterStateTransition transition) : base(transition) { }
|
||||
|
||||
[RequiresUnityAPI]
|
||||
public override string Title()
|
||||
{
|
||||
return GraphNesterDescriptor.Title(transition);
|
||||
}
|
||||
|
||||
[RequiresUnityAPI]
|
||||
public override string Summary()
|
||||
{
|
||||
return GraphNesterDescriptor.Summary(transition);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3ef8f00bbef6a4ceaaaa090c41d2cf23
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,30 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Editor(typeof(INesterStateTransition))]
|
||||
public class NesterStateTransitionEditor : StateTransitionEditor
|
||||
{
|
||||
public NesterStateTransitionEditor(Metadata metadata) : base(metadata) { }
|
||||
|
||||
private Metadata nestMetadata => metadata[nameof(INesterStateTransition.nest)];
|
||||
|
||||
private Metadata graphMetadata => nestMetadata[nameof(IGraphNest.graph)];
|
||||
|
||||
protected override GraphReference headerReference => reference.ChildReference((INesterStateTransition)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: 55db6890417fe448f800580347902eea
|
||||
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 NesterStateTransitionWidget<TNesterStateTransition> : StateTransitionWidget<TNesterStateTransition>
|
||||
where TNesterStateTransition : class, INesterStateTransition
|
||||
{
|
||||
protected NesterStateTransitionWidget(StateCanvas canvas, TNesterStateTransition transition) : base(canvas, transition) { }
|
||||
|
||||
protected override IEnumerable<DropdownOption> contextOptions
|
||||
{
|
||||
get
|
||||
{
|
||||
var childReference = reference.ChildReference(transition, false);
|
||||
|
||||
if (childReference != 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 (transition.graph.zoom == 1)
|
||||
{
|
||||
var childReference = reference.ChildReference(transition, 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: 292c8b7edc601474ba17d63cd957dbff
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,27 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public abstract class StateTransitionAnalyser<TStateTransition> : Analyser<TStateTransition, StateTransitionAnalysis>
|
||||
where TStateTransition : IStateTransition
|
||||
{
|
||||
protected StateTransitionAnalyser(GraphReference reference, TStateTransition target) : base(reference, target) { }
|
||||
|
||||
public TStateTransition transition => target;
|
||||
|
||||
[Assigns]
|
||||
protected virtual bool IsTraversed()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
[Assigns]
|
||||
protected virtual IEnumerable<Warning> Warnings()
|
||||
{
|
||||
if (!IsTraversed())
|
||||
{
|
||||
yield return Warning.Info("Transition is never traversed.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4666c372b28594071897c42f3fd2f47e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,8 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public sealed class StateTransitionDescription : GraphElementDescription
|
||||
{
|
||||
public string label { get; set; }
|
||||
public string tooltip { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2cf1e35e2ea20404cb31e0153aec76c7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,41 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public abstract class StateTransitionDescriptor<TStateTransition> : Descriptor<TStateTransition, StateTransitionDescription>
|
||||
where TStateTransition : class, IStateTransition
|
||||
{
|
||||
protected StateTransitionDescriptor(TStateTransition target) : base(target) { }
|
||||
|
||||
public TStateTransition transition => target;
|
||||
|
||||
[Assigns]
|
||||
public override string Title()
|
||||
{
|
||||
return "Transition";
|
||||
}
|
||||
|
||||
[Assigns]
|
||||
public override string Summary()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
[Assigns]
|
||||
public virtual string Label()
|
||||
{
|
||||
return Title();
|
||||
}
|
||||
|
||||
[Assigns]
|
||||
public virtual string Tooltip()
|
||||
{
|
||||
return Summary();
|
||||
}
|
||||
|
||||
[Assigns]
|
||||
[RequiresUnityAPI]
|
||||
public override EditorTexture Icon()
|
||||
{
|
||||
return typeof(IStateTransition).Icon();
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 82e797f2fea594d6f89e0146757d0ed6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,12 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Editor(typeof(IStateTransition))]
|
||||
public class StateTransitionEditor : GraphElementEditor<StateGraphContext>
|
||||
{
|
||||
public StateTransitionEditor(Metadata metadata) : base(metadata) { }
|
||||
|
||||
private IStateTransition transition => (IStateTransition)element;
|
||||
|
||||
protected new StateTransitionDescription description => (StateTransitionDescription)base.description;
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9d4e73ed999c34cb3ae93178fcb08712
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3d4c55a931854453da3c5a0466ef9fb8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,10 @@
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
[Widget(typeof(TriggerStateTransition))]
|
||||
public sealed class TriggerStateTransitionWidget : UnitWidget<TriggerStateTransition>
|
||||
{
|
||||
public TriggerStateTransitionWidget(FlowCanvas canvas, TriggerStateTransition unit) : base(canvas, unit) { }
|
||||
|
||||
protected override NodeColorMix baseColor => NodeColorMix.TealReadable;
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b189625584c90451ebec9bd6a0e5e334
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Reference in New Issue
Block a user