JAZ27QX53QXAN4JVMMX2KYKN4GCULWFMXYSPFZ5HWW4T7FUB5EHAC
D4K77RTIZUI46DIDLVOR42DW3EP6IOMEAASAPZQ5XA2J7GEYFQIAC
3UN6NREN32ZBQW4EWI7ED4WVQILCU2EIE7DQGFWZR3OUDCO3ZSPQC
DTKCWM4J7PFNWAAES3RZHQGDA6PTDNX4TZVOXAKF5V7LCZBI3XUAC
FXM5KEZSKC2Z4LH4SEM6SSXN7WXH7B35MO4PQ4HMW5CFYFTCSNPQC
XTNHXKSQ4PQS6CN3ATENRI7JUXU7DYZMRW4PBSEABN4S4VQHFUMAC
IFN4UDLTN7TD26CPONDCRHW4G3DJEXEYV62ZHZC4QD7DKJ76JAEQC
CD5FF75KTOBTMVMTMCKMR6F5DFKOF26I5K43ITNHGBI3ZAZHA4RAC
HXTSBPAP75A7EC4RKWYQMVPPHPNZFPHUORBZWDHGEB6MPAGI7G7AC
namespace TagFighter.Effects
{
using System.Collections.Generic;
using System.Linq;
{
[UnityEngine.SerializeField]
MultiPort<SingleGetterStep> _in = new();
[UnityEngine.SerializeReference, CareBoo.Serially.ShowSerializeReference]
public IResourceOperator Operator;
[UnityEngine.SerializeField]
List<double> _const = new();
public override IEnumerable<IPort<EffectStepNode>> Inputs {
get {
yield return _in;
}
}
public override string ToString() {
var operatorName = Operator == null ? "*" : Operator.GetType().Name;
var constName = _const.Count == 0 ? "" : $"({string.Join(",", _const)})";
}
}
public override bool IsValid {
get {
return Operator != null;
public override double Get() {
}
}
}
var result = Operator.OperateEnum(_in.Nodes.Select(getter => getter.Get()).Concat(_const));
return result;
return $"{operatorName}{constName}";
}
[StepType(StepTypeAttribute.OperatorStep)]
public class OperatorStep : SingleGetterStep
fileFormatVersion: 2
guid: e3d165e54b32e6d4cbcc75c5b0cf7a68
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects
{
using System.Collections.Generic;
{
[UnityEngine.SerializeField]
SinglePort<SingleGetterStep> _radius = new() {
DisplayName = "Radius"
};
[UnityEngine.SerializeField]
SinglePort<SingleGetterStep> _angle = new() {
DisplayName = "Angle"
};
public override IEnumerable<IPort<EffectStepNode>> Inputs {
get {
yield return _radius;
yield return _angle;
}
}
public override void Set() {
Data.Context.AreaOfEffect = new ConeArea() {
Radius = (float)_radius.Node.Get(),
Angle = (float)_angle.Node.Get(),
};
}
}
}
public override string ToString() => "Cone AOE";
public override bool IsValid => true;
[StepType(StepTypeAttribute.SetterStep)]
public class ConeAreaStep : SetterNode
fileFormatVersion: 2
guid: bfce83ffec5b7b14a85ec10ce4e193ab
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects
{
using System.Collections.Generic;
using System.Linq;
using CareBoo.Serially;
{
[UnityEngine.SerializeField]
MultiPort<SequenceGetterStep> _in = new();
[UnityEngine.SerializeReference, ShowSerializeReference]
public IResourceOperator Operator;
public override IEnumerable<double> Get() {
current.Zip(next, (first, second) =>
Operator.Operate(first, second)));
}
}
}
}
}
return $"Zip.{operatorName}{constName}";
}
public override bool IsValid {
get {
return Operator != null;
public override string ToString() {
var operatorName = Operator == null ? "*" : Operator.GetType().Name;
var constName = _const.Count == 0 ? "" : $"({string.Join(",", _const.Select(val => $"{val}[]"))})";
if (!IsValid) {
double defaultVal = 0;
UnityEngine.Debug.Log($"{Guid} Inner types are null");
return Data.Affected.Select(transform => defaultVal);
}
return _in.Nodes.Select(getter => getter.Get()).Concat(_const.Select(value => Data.Affected.Select(transform => value)))
.Aggregate((current, next) =>
public override IEnumerable<IPort<EffectStepNode>> Inputs {
get {
yield return _in;
}
}
[UnityEngine.SerializeField]
List<double> _const = new();
[StepType(StepTypeAttribute.OperatorStep)]
public class ZipStep : SequenceGetterStep
fileFormatVersion: 2
guid: bd34bf8514de0af4996e67b24ad947e0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 197330efc91666644bf5b27d4a453dea
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: aff62bda1997e384eb9fb765aa33b08e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects
{
public abstract class SequenceGetterStep : EffectStepNode
{
public abstract IEnumerable<double> Get();
}
}
using System.Collections.Generic;
fileFormatVersion: 2
guid: bb9a9a2cce40a384084a18925a111186
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects
{
using System.Collections.Generic;
using System.Linq;
{
[UnityEngine.SerializeField]
SinglePort<SingleGetterStep> _in = new();
public override IEnumerable<double> Get() {
var value = _in.Node.Get();
return Data.Affected.Select(transform => value);
}
get {
}
}
}
}
public override string ToString() => "Repeat";
public override bool IsValid => true;
yield return _in;
public override IEnumerable<IPort<EffectStepNode>> Inputs {
[StepType(StepTypeAttribute.OperatorStep)]
public class RepeatStep : SequenceGetterStep
fileFormatVersion: 2
guid: 844f2211c024f444f876e89a2321a495
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects
{
using System.Linq;
using System.Reflection;
using System.Text;
{
[UnityEngine.SerializeField]
SinglePort<SequenceGetterStep> _in = new();
[CareBoo.Serially.TypeFilter(derivedFrom: typeof(Resources.Resource<>))]
public CareBoo.Serially.SerializableType Resource;
get {
}
}
public override void Set() {
UnityEngine.Debug.Log($"{Guid} Inner types are null");
return;
}
var getSpecificMethod = typeof(PawnSetterStep).GetMethod(nameof(SetSpecific), BindingFlags.NonPublic | BindingFlags.Instance).
MakeGenericMethod(Resource.Type, Resource.Type.BaseType.GetGenericArguments()[0]);
var value = getSpecificMethod.Invoke(this, null);
}
void SetSpecific<TResource, TUnitType>()
where TResource : Resources.Resource<TUnitType>
where TUnitType : Resources.IUnitType {
var result = _in.Node.Get();
var message = new StringBuilder();
foreach (var res in result) {
message.Append($"{res} ,");
}
UnityEngine.Debug.Log($"{nameof(PawnSetterStep)} result {message}");
var set = result.Zip(Data.Affected.Select(transform => transform.GetComponent<TResource>()), (value, resource) => (value, resource));
foreach (var (value, resource) in set) {
Data.StatAccessor.AddCurrentModifier(resource, (Resources.Unit<TUnitType>)value);
}
}
}
}
if (!IsValid) {
}
}
return $"Pawn.Set.{resourceName}.{statName}";
}
public override bool IsValid {
get {
return Resource != null && Resource.Type != null;
public override string ToString() {
var resourceName = Resource == null || Resource.Type == null ? "*" : Resource.Type.Name;
var statName = "Current";
yield return _in;
public override IEnumerable<IPort<EffectStepNode>> Inputs {
[StepType(StepTypeAttribute.SetterStep)]
public class PawnSetterStep : SetterNode
using System.Collections.Generic;
fileFormatVersion: 2
guid: 9aba2983d5b304644a37facc1967f5de
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects
{
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
{
[CareBoo.Serially.TypeFilter(derivedFrom: typeof(Resources.Resource<>))]
public CareBoo.Serially.SerializableType Resource;
public override IEnumerable<double> Get() {
UnityEngine.Debug.Log($"{Guid} Inner types are null");
return Data.Affected.Select(transform => 0d);
}
var getSpecificMethod = typeof(PawnGetterStep).GetMethod(nameof(GetSpecific), BindingFlags.NonPublic | BindingFlags.Instance).
MakeGenericMethod(Resource.Type, Resource.Type.BaseType.GetGenericArguments()[0]);
var value = getSpecificMethod.Invoke(this, null);
return value as IEnumerable<double>;
}
IEnumerable<double> GetSpecific<TResource, TUnitType>()
where TResource : Resources.Resource<TUnitType>
where TUnitType : Resources.IUnitType {
UnityEngine.Debug.Log($"{nameof(PawnGetterStep)} {typeof(TResource)}");
return Data.Affected.Select(transform => (double)transform.GetComponent<TResource>().GetCurrent().AsPrimitive());
}
}
}
get {
}
}
return Resource != null && Resource.Type != null;
public override string ToString() {
var resourceName = Resource == null || Resource.Type == null ? "*" : Resource.Type.Name;
var statName = "Current";
return $"Pawn.Get.{resourceName}.{statName}";
}
public override bool IsValid {
public override IEnumerable<IPort<EffectStepNode>> Inputs => Enumerable.Empty<IPort<EffectStepNode>>();
if (!IsValid) {
[StepType(StepTypeAttribute.GetterStep)]
public class PawnGetterStep : SequenceGetterStep
fileFormatVersion: 2
guid: ba8070acc07ec7f448050fe3c5cd4278
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects
{
using System.Linq;
{
[UnityEngine.SerializeField]
SinglePort<SequenceGetterStep> _in = new();
[UnityEngine.SerializeReference, CareBoo.Serially.ShowSerializeReference]
public IResourceOperator Operator;
public override double Get() {
return _in.Node.Get().Aggregate((current, next) => Operator.Operate(current, next));
}
get {
}
}
}
}
get {
}
}
return Operator != null;
return $"Fold.{operatorName}";
}
public override bool IsValid {
public override string ToString() {
var operatorName = Operator == null ? "*" : Operator.GetType().Name;
yield return _in;
public override IEnumerable<IPort<EffectStepNode>> Inputs {
[StepType(StepTypeAttribute.OperatorStep)]
public class FoldStep : SingleGetterStep
using System.Collections.Generic;
fileFormatVersion: 2
guid: 95498ab7ed723494fb6b3c000a0f1c35
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects
{
using System.Reflection;
using TagFighter.Effects.ResourceLocationAccessors.ContextRegisters;
{
[UnityEngine.SerializeField]
SinglePort<SingleGetterStep> _in = new();
[CareBoo.Serially.TypeFilter(derivedFrom: typeof(Resources.Resource<>))]
public CareBoo.Serially.SerializableType Resource;
[CareBoo.Serially.TypeFilter(derivedFrom: typeof(ContextRegister<>))]
public CareBoo.Serially.SerializableType Register;
get {
}
}
public override void Set() {
UnityEngine.Debug.Log($"{Guid} Inner types are null");
return;
}
var getSpecificMethod = typeof(ContextSetterStep).GetMethod(nameof(SetSpecific), BindingFlags.NonPublic | BindingFlags.Instance).
MakeGenericMethod(Resource.Type, Resource.Type.BaseType.GetGenericArguments()[0], Register.Type);
var value = getSpecificMethod.Invoke(this, null);
}
void SetSpecific<TResource, TUnitType, TContextRegister>()
where TResource : Resources.Resource<TUnitType>
where TUnitType : Resources.IUnitType
where TContextRegister : IContextRegister {
var result = _in.Node.Get();
UnityEngine.Debug.Log($"{nameof(ContextSetterStep)} {typeof(TResource)} {typeof(TContextRegister)} result {result}");
Data.Context.SetResource<TResource, TUnitType, TContextRegister>((Resources.Unit<TUnitType>)result);
}
}
}
if (!IsValid) {
get {
}
}
return Register != null && Register.Type != null && Resource != null && Resource.Type != null;
public override bool IsValid {
}
public override string ToString() {
var resourceName = Resource == null || Resource.Type == null ? "*" : Resource.Type.Name;
var registerName = Register == null || Register.Type == null ? "*" : Register.Type.Name;
return $"Context.Set.{resourceName}.{registerName}";
yield return _in;
public override IEnumerable<IPort<EffectStepNode>> Inputs {
[StepType(StepTypeAttribute.SetterStep)]
public class ContextSetterStep : SetterNode
using System.Collections.Generic;
fileFormatVersion: 2
guid: c5c37fc06b3d0ad45b6305eb93d68542
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects
{
using System.Reflection;
using TagFighter.Effects.ResourceLocationAccessors.ContextRegisters;
{
[CareBoo.Serially.TypeFilter(derivedFrom: typeof(Resources.Resource<>))]
public CareBoo.Serially.SerializableType Resource;
[CareBoo.Serially.TypeFilter(derivedFrom: typeof(ContextRegister<>))]
public CareBoo.Serially.SerializableType Register;
public override double Get() {
if (Register.Type == null || Resource.Type == null) {
UnityEngine.Debug.Log($"{Guid} Inner types are null");
return 0;
}
var getSpecificMethod = typeof(ContextGetterStep).GetMethod(nameof(GetSpecific), BindingFlags.NonPublic | BindingFlags.Instance).
MakeGenericMethod(Resource.Type, Resource.Type.BaseType.GetGenericArguments()[0], Register.Type);
var value = getSpecificMethod.Invoke(this, null);
return (int)value;
}
int GetSpecific<TResource, TUnitType, TContextRegister>()
where TResource : Resources.Resource<TUnitType>
where TUnitType : Resources.IUnitType
where TContextRegister : IContextRegister {
UnityEngine.Debug.Log($"{nameof(ContextGetterStep)} {typeof(TResource)} {typeof(TContextRegister)}");
return Data.Context.GetResource<TResource, TUnitType, TContextRegister>().AsPrimitive();
}
}
}
}
}
public override bool IsValid {
get {
return Register != null && Register.Type != null && Resource != null && Resource.Type != null;
public override string ToString() {
var resourceName = Resource == null || Resource.Type == null ? "*" : Resource.Type.Name;
var registerName = Register == null || Register.Type == null ? "*" : Register.Type.Name;
return $"Context.Get.{resourceName}.{registerName}";
}
public override IEnumerable<IPort<EffectStepNode>> Inputs => Enumerable.Empty<IPort<EffectStepNode>>();
[StepType(StepTypeAttribute.GetterStep)]
public class ContextGetterStep : SingleGetterStep
using System.Collections.Generic;
using System.Linq;
fileFormatVersion: 2
guid: c419ef0e55c3e694cb24080375e68c2e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects
{
{
[UnityEngine.SerializeField]
double _value;
public override double Get() {
UnityEngine.Debug.Log($"{nameof(ConstValueStep)} = {_value}");
return _value;
}
}
}
public override string ToString() {
return $"Const {_value}";
}
public override bool IsValid => true;
public override IEnumerable<IPort<EffectStepNode>> Inputs => Enumerable.Empty<IPort<EffectStepNode>>();
using System.Collections.Generic;
using System.Linq;
[StepType(StepTypeAttribute.GetterStep)]
public class ConstValueStep : SingleGetterStep
fileFormatVersion: 2
guid: bfce83ffec5b7b14a85ec10ce4e193ab
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects.Steps
{
using System.Collections.Generic;
using System.Linq;
using CareBoo.Serially;
[StepType(StepTypeAttribute.OperatorStep)]
public class Zip : OutputStep<IEnumerable<double>>
{
[UnityEngine.SerializeField]
MultiPort<IEnumerable<double>> _in = new();
[UnityEngine.SerializeReference, ShowSerializeReference]
public IResourceOperator Operator;
[UnityEngine.SerializeField]
List<double> _const = new();
public override IEnumerable<IPort> Inputs {
get {
yield return _in;
}
}
public override IEnumerable<double> Run() {
if (!IsValid) {
double defaultVal = 0;
UnityEngine.Debug.Log($"{Guid} Inner types are null");
return Data.Affected.Select(transform => defaultVal);
}
return _in.Nodes.Select(getter => getter.Run()).Concat(_const.Select(value => Data.Affected.Select(transform => value)))
.Aggregate((current, next) =>
current.Zip(next, (first, second) =>
Operator.Operate(first, second)));
}
public override string ToString() {
var operatorName = Operator == null ? "*" : Operator.GetType().Name;
var constName = _const.Count == 0 ? "" : $"({string.Join(",", _const.Select(val => $"{val}[]"))})";
return $"Zip.{operatorName}{constName}";
}
public override bool IsValid {
get {
return Operator != null;
}
}
}
}
fileFormatVersion: 2
guid: bb9a9a2cce40a384084a18925a111186
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects.Steps
{
using System.Collections.Generic;
using System.Linq;
[StepType(StepTypeAttribute.OperatorStep)]
public class Repeat : OutputStep<IEnumerable<double>>
{
[UnityEngine.SerializeField]
SinglePort<double> _in = new();
public override IEnumerable<double> Run() {
var value = _in.Node.Run();
return Data.Affected.Select(transform => value);
}
public override IEnumerable<IPort> Inputs {
get {
yield return _in;
}
}
public override string ToString() => "Repeat";
public override bool IsValid => true;
}
}
fileFormatVersion: 2
guid: 844f2211c024f444f876e89a2321a495
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects.Steps
{
using System.Linq;
using System.Reflection;
using System.Collections.Generic;
[StepType(StepTypeAttribute.SetterStep)]
public class PawnResourceSet : OutputStep<bool>
{
[UnityEngine.SerializeField]
SinglePort<IEnumerable<double>> _in = new();
[CareBoo.Serially.TypeFilter(derivedFrom: typeof(Resources.Resource<>))]
public CareBoo.Serially.SerializableType Resource;
public override IEnumerable<IPort> Inputs {
get {
yield return _in;
}
}
public override string ToString() {
var resourceName = Resource == null || Resource.Type == null ? "*" : Resource.Type.Name;
var statName = "Current";
return $"Pawn.Set.{resourceName}.{statName}";
}
public override bool IsValid {
get {
return Resource != null && Resource.Type != null;
}
}
public override bool Run() {
if (!IsValid) {
UnityEngine.Debug.Log($"{Guid} Inner types are null");
return false;
}
var getSpecificMethod = typeof(PawnResourceSet).GetMethod(nameof(SetSpecific), BindingFlags.NonPublic | BindingFlags.Instance).
MakeGenericMethod(Resource.Type, Resource.Type.BaseType.GetGenericArguments()[0]);
var value = getSpecificMethod.Invoke(this, null);
return (bool)value;
}
bool SetSpecific<TResource, TUnitType>()
where TResource : Resources.Resource<TUnitType>
where TUnitType : Resources.IUnitType {
var result = _in.Node.Run();
UnityEngine.Debug.Log($"{nameof(PawnResourceSet)} result {string.Join(",", result)}");
var set = result.Zip(Data.Affected.Select(transform => transform.GetComponent<TResource>()), (value, resource) => (value, resource));
foreach (var (value, resource) in set) {
Data.StatAccessor.AddCurrentModifier(resource, (Resources.Unit<TUnitType>)value);
}
return true;
}
}
}
fileFormatVersion: 2
guid: 9aba2983d5b304644a37facc1967f5de
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects.Steps
{
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
[StepType(StepTypeAttribute.GetterStep)]
public class PawnResourceGet : OutputStep<IEnumerable<double>>
{
[CareBoo.Serially.TypeFilter(derivedFrom: typeof(Resources.Resource<>))]
public CareBoo.Serially.SerializableType Resource;
public override IEnumerable<double> Run() {
if (!IsValid) {
UnityEngine.Debug.Log($"{Guid} Inner types are null");
return Data.Affected.Select(transform => 0d);
}
var getSpecificMethod = typeof(PawnResourceGet).GetMethod(nameof(GetSpecific), BindingFlags.NonPublic | BindingFlags.Instance).
MakeGenericMethod(Resource.Type, Resource.Type.BaseType.GetGenericArguments()[0]);
var value = getSpecificMethod.Invoke(this, null);
return value as IEnumerable<double>;
}
IEnumerable<double> GetSpecific<TResource, TUnitType>()
where TResource : Resources.Resource<TUnitType>
where TUnitType : Resources.IUnitType {
UnityEngine.Debug.Log($"{nameof(PawnResourceGet)} {typeof(TResource)}");
return Data.Affected.Select(transform => (double)transform.GetComponent<TResource>().GetCurrent().AsPrimitive());
}
public override IEnumerable<IPort> Inputs => Enumerable.Empty<IPort>();
public override string ToString() {
var resourceName = Resource == null || Resource.Type == null ? "*" : Resource.Type.Name;
var statName = "Current";
return $"Pawn.Get.{resourceName}.{statName}";
}
public override bool IsValid {
get {
return Resource != null && Resource.Type != null;
}
}
}
}
fileFormatVersion: 2
guid: 93ba90a75f8f1fe4189ea1ed3890ae3e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects.Steps
{
using System.Collections.Generic;
using System.Linq;
[StepType(StepTypeAttribute.OperatorStep)]
public class Operate : OutputStep<double>
{
[UnityEngine.SerializeField]
MultiPort<double> _in = new();
[UnityEngine.SerializeReference, CareBoo.Serially.ShowSerializeReference]
public IResourceOperator Operator;
[UnityEngine.SerializeField]
List<double> _const = new();
public override IEnumerable<IPort> Inputs {
get {
yield return _in;
}
}
public override string ToString() {
var operatorName = Operator == null ? "*" : Operator.GetType().Name;
var constName = _const.Count == 0 ? "" : $"({string.Join(",", _const)})";
return $"{operatorName}{constName}";
}
public override bool IsValid {
get {
return Operator != null;
}
}
public override double Run() {
var result = Operator.OperateEnum(_in.Nodes.Select(getter => getter.Run()).Concat(_const));
return result;
}
}
}
fileFormatVersion: 2
guid: ba8070acc07ec7f448050fe3c5cd4278
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects.Steps
{
using System.Collections.Generic;
using System.Linq;
[StepType(StepTypeAttribute.OperatorStep)]
public class Fold : OutputStep<double>
{
[UnityEngine.SerializeField]
SinglePort<IEnumerable<double>> _in = new();
[UnityEngine.SerializeReference, CareBoo.Serially.ShowSerializeReference]
public IResourceOperator Operator;
public override double Run() {
return _in.Node.Run().Aggregate((current, next) => Operator.Operate(current, next));
}
public override IEnumerable<IPort> Inputs {
get {
yield return _in;
}
}
public override string ToString() {
var operatorName = Operator == null ? "*" : Operator.GetType().Name;
return $"Fold.{operatorName}";
}
public override bool IsValid {
get {
return Operator != null;
}
}
}
}
/// <see cref="ConstValueStep"/> Input: None Output: Double
/// <see cref="ContextGetterStep"/> Input: None Output: Double
/// <see cref="PawnGetterStep"/> Input: None Output: Sequence<Double>
/// <see cref="ConstValue"/> Input: None Output: Double
/// <see cref="ContextResourceGet"/> Input: None Output: Double
/// <see cref="PawnResourceGet"/> Input: None Output: Sequence<Double>
/// <see cref="ContextSetterStep"/> Input: Single Double
/// <see cref="PawnSetterStep"/> Input: Single Sequence<Double>
/// <see cref="ConeAreaStep"/> Input: 2xDouble
/// <see cref="ContextResourceSet"/> Input: Single Double
/// <see cref="PawnResourceSet"/> Input: Single Sequence<Double>
/// <see cref="ConeAreaGet"/> Input: 2xDouble
fileFormatVersion: 2
guid: 95498ab7ed723494fb6b3c000a0f1c35
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects.Steps
{
using System.Collections.Generic;
using System.Reflection;
using TagFighter.Effects.ResourceLocationAccessors.ContextRegisters;
[StepType(StepTypeAttribute.SetterStep)]
public class ContextResourceSet : OutputStep<bool>
{
[UnityEngine.SerializeField]
SinglePort<double> _in = new();
[CareBoo.Serially.TypeFilter(derivedFrom: typeof(Resources.Resource<>))]
public CareBoo.Serially.SerializableType Resource;
[CareBoo.Serially.TypeFilter(derivedFrom: typeof(ContextRegister<>))]
public CareBoo.Serially.SerializableType Register;
public override IEnumerable<IPort> Inputs {
get {
yield return _in;
}
}
public override string ToString() {
var resourceName = Resource == null || Resource.Type == null ? "*" : Resource.Type.Name;
var registerName = Register == null || Register.Type == null ? "*" : Register.Type.Name;
return $"Context.Set.{resourceName}.{registerName}";
}
public override bool IsValid {
get {
return Register != null && Register.Type != null && Resource != null && Resource.Type != null;
}
}
public override bool Run() {
if (!IsValid) {
UnityEngine.Debug.Log($"{Guid} Inner types are null");
return false;
}
var getSpecificMethod = typeof(ContextResourceSet).GetMethod(nameof(SetSpecific), BindingFlags.NonPublic | BindingFlags.Instance).
MakeGenericMethod(Resource.Type, Resource.Type.BaseType.GetGenericArguments()[0], Register.Type);
var value = getSpecificMethod.Invoke(this, null);
return (bool)value;
}
bool SetSpecific<TResource, TUnitType, TContextRegister>()
where TResource : Resources.Resource<TUnitType>
where TUnitType : Resources.IUnitType
where TContextRegister : IContextRegister {
var result = _in.Node.Run();
UnityEngine.Debug.Log($"{nameof(ContextResourceSet)} {typeof(TResource)} {typeof(TContextRegister)} result {result}");
Data.Context.SetResource<TResource, TUnitType, TContextRegister>((Resources.Unit<TUnitType>)result);
return true;
}
}
}
fileFormatVersion: 2
guid: c5c37fc06b3d0ad45b6305eb93d68542
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects.Steps
{
using System.Reflection;
using System.Collections.Generic;
using System.Linq;
using TagFighter.Effects.ResourceLocationAccessors.ContextRegisters;
[StepType(StepTypeAttribute.GetterStep)]
public class ContextResourceGet : OutputStep<double>
{
[CareBoo.Serially.TypeFilter(derivedFrom: typeof(Resources.Resource<>))]
public CareBoo.Serially.SerializableType Resource;
[CareBoo.Serially.TypeFilter(derivedFrom: typeof(ContextRegister<>))]
public CareBoo.Serially.SerializableType Register;
public override double Run() {
if (Register.Type == null || Resource.Type == null) {
UnityEngine.Debug.Log($"{Guid} Inner types are null");
return 0;
}
var getSpecificMethod = typeof(ContextResourceGet).GetMethod(nameof(GetSpecific), BindingFlags.NonPublic | BindingFlags.Instance).
MakeGenericMethod(Resource.Type, Resource.Type.BaseType.GetGenericArguments()[0], Register.Type);
var value = getSpecificMethod.Invoke(this, null);
return (int)value;
}
int GetSpecific<TResource, TUnitType, TContextRegister>()
where TResource : Resources.Resource<TUnitType>
where TUnitType : Resources.IUnitType
where TContextRegister : IContextRegister {
UnityEngine.Debug.Log($"{nameof(ContextResourceGet)} {typeof(TResource)} {typeof(TContextRegister)}");
return Data.Context.GetResource<TResource, TUnitType, TContextRegister>().AsPrimitive();
}
public override IEnumerable<IPort> Inputs => Enumerable.Empty<IPort>();
public override string ToString() {
var resourceName = Resource == null || Resource.Type == null ? "*" : Resource.Type.Name;
var registerName = Register == null || Register.Type == null ? "*" : Register.Type.Name;
return $"Context.Get.{resourceName}.{registerName}";
}
public override bool IsValid {
get {
return Register != null && Register.Type != null && Resource != null && Resource.Type != null;
}
}
}
}
fileFormatVersion: 2
guid: 81d788b04f027ce4080f0b8736d97a71
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects.Steps
{
using System.Collections.Generic;
[StepType(StepTypeAttribute.SetterStep)]
public class ContextAreaSet : OutputStep<bool>
{
[UnityEngine.SerializeField]
SinglePort<IAreaOfEffect> _in = new();
public override IEnumerable<IPort> Inputs {
get {
yield return _in;
}
}
public override string ToString() => "Context.AOE.Set";
public override bool IsValid => true;
public override bool Run() {
var success = false;
if (_in.Node != null) {
Data.Context.AreaOfEffect = _in.Node.Run();
success = true;
}
return success;
}
}
}
fileFormatVersion: 2
guid: c419ef0e55c3e694cb24080375e68c2e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects.Steps
{
using System.Collections.Generic;
using System.Linq;
[StepType(StepTypeAttribute.GetterStep)]
public class ConstValue : OutputStep<double>
{
[UnityEngine.SerializeField]
double _value;
public override double Run() {
UnityEngine.Debug.Log($"{nameof(ConstValue)} = {_value}");
return _value;
}
public override IEnumerable<IPort> Inputs => Enumerable.Empty<IPort>();
public override string ToString() {
return $"Const {_value}";
}
public override bool IsValid => true;
}
}
fileFormatVersion: 2
guid: e3d165e54b32e6d4cbcc75c5b0cf7a68
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects.Steps
{
using System.Collections.Generic;
[StepType(StepTypeAttribute.GetterStep)]
public class ConeAreaGet : OutputStep<IAreaOfEffect>
{
[UnityEngine.SerializeField]
SinglePort<double> _radius = new() {
DisplayName = "Radius"
};
[UnityEngine.SerializeField]
SinglePort<double> _angle = new() {
DisplayName = "Angle"
};
public override IEnumerable<IPort> Inputs {
get {
yield return _radius;
yield return _angle;
}
}
public override string ToString() => "Cone AOE";
public override bool IsValid => true;
public override IAreaOfEffect Run() {
return new ConeArea() {
Radius = (float)_radius.Node.Run(),
Angle = (float)_angle.Node.Run(),
};
}
}
}
fileFormatVersion: 2
guid: 05c74f9724c88004184e3074359893c6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
namespace TagFighter.Effects.Steps
{
using System.Collections.Generic;
[StepType(StepTypeAttribute.GetterStep)]
public class CircleAreaGet : OutputStep<IAreaOfEffect>
{
[UnityEngine.SerializeField]
SinglePort<double> _radius = new() {
DisplayName = "Radius"
};
public override IEnumerable<IPort> Inputs {
get {
yield return _radius;
}
}
public override string ToString() => "Circle AOE";
public override IAreaOfEffect Run() {
return new CircleArea() {
Radius = 1,
};
}
public override bool IsValid => true;
}
}
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-7959464409387560310
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: bfce83ffec5b7b14a85ec10ce4e193ab, type: 3}
m_Name: ZipStep
m_EditorClassIdentifier:
Guid: cc7813f0-37d2-44d5-8409-72ef640e47fa
_in:
Nodes:
- {fileID: 3470929320567701890}
- {fileID: 6806886774387728050}
Operator:
rid: 2346208790267035649
references:
version: 2
RefIds:
- rid: 2346208790267035649
type: {class: Average, ns: TagFighter.Effects.Operators, asm: Assembly-CSharp}
--- !u!114 &-7310262609116166999
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: 844f2211c024f444f876e89a2321a495, type: 3}
m_Name: PawnSetterStep
m_EditorClassIdentifier:
Position: {x: 677, y: 380}
Guid: 92f81450-a6df-4e4d-912d-de9cedc42ad1
_in:
Node: {fileID: 8736044092964998325}
Resource:
typeId: 30a0ddc8-3fcf-496a-b578-81dbf333c7ec
--- !u!114 &-5841318192641428412
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: c5c37fc06b3d0ad45b6305eb93d68542, type: 3}
m_Name: ContextGetterStep
m_EditorClassIdentifier:
Guid: 938c11fc-01ec-42e1-9011-b345df3cb2cf
Resource:
typeId: da13f1c1-4359-4eb9-b969-7db50afe6423
Register:
typeId: 47eae1ff-9ff5-41fd-b08e-0f674b3848e6
--- !u!114 &-4619482893835212189
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: 95498ab7ed723494fb6b3c000a0f1c35, type: 3}
m_Name: ContextSetterStep
m_EditorClassIdentifier:
Position: {x: 674, y: 386}
Guid: dec38d9a-6558-4198-8cf5-88d7803084f4
_in:
Node: {fileID: -1307332316521653590}
Resource:
typeId: da13f1c1-4359-4eb9-b969-7db50afe6423
Register:
typeId: 47eae1ff-9ff5-41fd-b08e-0f674b3848e6
--- !u!114 &-3229689855982809186
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: 4585b32f67d50794cad3c057a0f091a1, type: 3}
m_Name: 270aa0c6-4d02-473f-9070-b95a78891ce1
m_EditorClassIdentifier:
Guid: 270aa0c6-4d02-473f-9070-b95a78891ce1
_nodes:
- {fileID: -1327748367674765543}
- {fileID: -5841318192641428412}
- {fileID: 8736044092964998325}
- {fileID: -7310262609116166999}
--- !u!114 &-1327748367674765543
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: ae5625888aa1b3849a0329320febbfa9, type: 3}
m_Name: EffectEndNode
m_EditorClassIdentifier:
Position: {x: 865.8, y: 380}
Guid: 990a7b12-86b0-4294-aafd-6ce87974a50f
_in:
Node: {fileID: -7310262609116166999}
--- !u!114 &-1307332316521653590
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: ba8070acc07ec7f448050fe3c5cd4278, type: 3}
m_Name: FoldStep
m_EditorClassIdentifier:
Position: {x: 514, y: 386}
Guid: 1f753776-c588-4623-be3a-2ecc8a6d28c7
_in:
Node: {fileID: -7959464409387560310}
Operator:
rid: 2346208790267035648
references:
version: 2
RefIds:
- rid: 2346208790267035648
type: {class: Sum, ns: TagFighter.Effects.Operators, asm: Assembly-CSharp}
--- !u!114 &-649113059712602876
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: ae5625888aa1b3849a0329320febbfa9, type: 3}
m_Name: EffectEndNode
m_EditorClassIdentifier:
Guid: 99b827f7-16c4-49d1-8785-f184a8377804
_in:
Node: {fileID: -4619482893835212189}
--- !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: c4299eb7af6691f4a82ce6a25fd96981, type: 3}
m_Name: TestRune
m_EditorClassIdentifier:
RuneSprite: {fileID: 0}
Rune:
DisplayName:
Speed: 0
ManaCost: 0
Effects: []
RuneEffects:
- {fileID: 4043878867747308653}
- {fileID: -3229689855982809186}
references:
version: 2
RefIds: []
--- !u!114 &3470929320567701890
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: 9aba2983d5b304644a37facc1967f5de, type: 3}
m_Name: PawnGetterStep
m_EditorClassIdentifier:
Guid: 81887a16-fba6-48b4-92f4-1df09b3dafb5
Resource:
typeId: aecc1739-a0df-4013-b430-22d2eb13f0ff
--- !u!114 &4043878867747308653
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: 4585b32f67d50794cad3c057a0f091a1, type: 3}
m_Name: 339c67f6-1e2b-49ab-b35e-77b5f316c9fe
m_EditorClassIdentifier:
Guid: 339c67f6-1e2b-49ab-b35e-77b5f316c9fe
_nodes:
- {fileID: 3470929320567701890}
- {fileID: -649113059712602876}
- {fileID: -1307332316521653590}
- {fileID: -4619482893835212189}
- {fileID: -7959464409387560310}
- {fileID: 6806886774387728050}
--- !u!114 &6806886774387728050
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: 9aba2983d5b304644a37facc1967f5de, type: 3}
m_Name: PawnGetterStep
m_EditorClassIdentifier:
Guid: ed761976-311d-462d-a7ba-9c67c864a6f7
Resource:
typeId: da13f1c1-4359-4eb9-b969-7db50afe6423
--- !u!114 &8736044092964998325
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: bb9a9a2cce40a384084a18925a111186, type: 3}
m_Name: RepeatStep
m_EditorClassIdentifier:
Position: {x: 509, y: 380}
Guid: 69f99b8e-80a9-476c-ba96-3e7718738e0b
_in:
Node: {fileID: -5841318192641428412}
Position: {x: 105, y: 473}
Position: {x: 115, y: 309}
Position: {x: 940, y: 386}
Position: {x: 229, y: 380}
_const: []
Position: {x: 336, y: 386}
fileFormatVersion: 2
guid: 22e50334a07c426488b84f9da8a0f52d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
%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: c4299eb7af6691f4a82ce6a25fd96981, type: 3}
m_Name: Test Rune
m_EditorClassIdentifier:
RuneSprite: {fileID: 0}
Rune:
DisplayName:
Speed: 0
ManaCost: 0
Effects: []
RuneEffects:
- {fileID: 8640598257864221512}
references:
version: 2
RefIds: []
--- !u!114 &8640598257864221512
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: 4585b32f67d50794cad3c057a0f091a1, type: 3}
m_Name: e8e2d732-2b9d-4977-a7a4-3054375ad036
m_EditorClassIdentifier:
Guid: e8e2d732-2b9d-4977-a7a4-3054375ad036
_nodes: []
var onputPortView = outputView.outputContainer.Children().FirstOrDefault(portView => portView is Port) as Port;
var inputPortView = inputView.inputContainer.Children().FirstOrDefault(portView => portView.userData == inputPort) as Port;
var edge = onputPortView.ConnectTo(inputPortView);
var outputPortView = outputView.outputContainer.Children().FirstOrDefault(portView => portView is Port) as Port;
var inputPortView = inputView.inputContainer.Children().FirstOrDefault(portView => (((IPort port, EffectStepNode _))portView.userData).port == inputPort) as Port;
var edge = outputPortView.ConnectTo(inputPortView);
var inputPortView = edge.input.userData as IPort<EffectStepNode>;
inputPortView?.TryDisconnect(outputNodeView.Node);
(var inputPort, var node) = ((IPort, EffectStepNode))edge.input.userData;
Undo.RecordObject(node, "Rune Effect (Delete Edge)");
inputPort.TryDisconnect(outputNodeView.Node);
var inputPortView = edge.input.userData as IPort<EffectStepNode>;
inputPortView?.TryConnect(outputNodeView.Node);
(var inputPort, var node) = ((IPort, EffectStepNode))edge.input.userData;
Undo.RecordObject(node, "Rune Effect (Create Edge)");
inputPort.TryConnect(outputNodeView.Node);
if (portType == typeof(SequenceGetterStep)) {
return "[]";
}
else if (portType == typeof(SingleGetterStep)) {
return "";
}
else if (portType == typeof(SetterNode)) {
return "()";
}
return null;
(var subType, var arrayMarker) = portType.IsGenericType && portType.GetGenericTypeDefinition() == typeof(IEnumerable<>) ?
(portType.GenericTypeArguments[0], "[]") : (portType, "");
return $"({subType.Name}{arrayMarker})";
PortCapacity.Single => InstantiatePort(Orientation.Horizontal, direction, Port.Capacity.Single, port.InnerType),
_ => InstantiatePort(Orientation.Horizontal, direction, Port.Capacity.Multi, port.InnerType)
PortCapacity.Single => InstantiatePort(Orientation.Horizontal, direction, Port.Capacity.Single, port.GetType().GenericTypeArguments[0]),
_ => InstantiatePort(Orientation.Horizontal, direction, Port.Capacity.Multi, port.GetType().GenericTypeArguments[0])
var portView = Node switch {
SequenceGetterStep => InstantiatePort(orientation, direction, Port.Capacity.Single, typeof(SequenceGetterStep)),
SingleGetterStep => InstantiatePort(orientation, direction, Port.Capacity.Single, typeof(SingleGetterStep)),
SetterNode => InstantiatePort(orientation, direction, Port.Capacity.Single, typeof(SetterNode)),
_ => null,
};
if (portView != null) {
var genericStepType = Node.GetType().GetSubclassOfRawGeneric(typeof(OutputStep<>));
if (genericStepType != null) {
var portView = InstantiatePort(orientation, direction, Port.Capacity.Single, genericStepType.GenericTypeArguments[0]);