update forge
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 27s
Create tag and build when new code gets to main / Export (push) Successful in 7m25s

This commit is contained in:
2026-05-17 00:06:44 +02:00
parent 8b54f00814
commit e09714cf83
473 changed files with 13577 additions and 767 deletions

View File

@@ -0,0 +1,20 @@
// Copyright © Gamesmiths Guild.
using System;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
namespace Gamesmiths.Forge.Godot.Resources.Statescript;
internal sealed class NumericCoercionResolver(IPropertyResolver innerResolver, Type targetType) : IPropertyResolver
{
private readonly IPropertyResolver _innerResolver = innerResolver;
public Type ValueType { get; } = targetType;
public Variant128 Resolve(GraphContext graphContext)
{
Variant128 sourceValue = _innerResolver.Resolve(graphContext);
return StatescriptNumericCompatibility.Coerce(sourceValue, _innerResolver.ValueType, ValueType);
}
}

View File

@@ -0,0 +1 @@
uid://b21gkd4yj5xqm

View File

@@ -0,0 +1,171 @@
// Copyright © Gamesmiths Guild.
using System;
using System.Globalization;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
namespace Gamesmiths.Forge.Godot.Resources.Statescript;
internal static class StatescriptNumericCompatibility
{
public static bool CanCoerce(Type sourceType, Type targetType)
{
if (sourceType == targetType)
{
return true;
}
if (!IsNumericType(sourceType) || !IsNumericType(targetType))
{
return false;
}
if (IsIntegralType(targetType))
{
return IsIntegralType(sourceType);
}
return IsFloatingPointType(targetType);
}
public static Variant128 Coerce(Variant128 value, Type sourceType, Type targetType)
{
if (!CanCoerce(sourceType, targetType))
{
throw new InvalidOperationException(
$"Cannot coerce Statescript numeric value from '{sourceType}' to '{targetType}'.");
}
object numericValue = GetNumericValue(sourceType, value);
return targetType switch
{
_ when targetType == typeof(byte) => new Variant128(
Convert.ToByte(numericValue, CultureInfo.InvariantCulture)),
_ when targetType == typeof(sbyte) => new Variant128(
Convert.ToSByte(numericValue, CultureInfo.InvariantCulture)),
_ when targetType == typeof(char) => new Variant128(
Convert.ToChar(numericValue, CultureInfo.InvariantCulture)),
_ when targetType == typeof(short) => new Variant128(
Convert.ToInt16(numericValue, CultureInfo.InvariantCulture)),
_ when targetType == typeof(ushort) => new Variant128(
Convert.ToUInt16(numericValue, CultureInfo.InvariantCulture)),
_ when targetType == typeof(int) => new Variant128(
Convert.ToInt32(numericValue, CultureInfo.InvariantCulture)),
_ when targetType == typeof(uint) => new Variant128(
Convert.ToUInt32(numericValue, CultureInfo.InvariantCulture)),
_ when targetType == typeof(long) => new Variant128(
Convert.ToInt64(numericValue, CultureInfo.InvariantCulture)),
_ when targetType == typeof(ulong) => new Variant128(
Convert.ToUInt64(numericValue, CultureInfo.InvariantCulture)),
_ when targetType == typeof(float) => new Variant128(
Convert.ToSingle(numericValue, CultureInfo.InvariantCulture)),
_ when targetType == typeof(double) => new Variant128(
Convert.ToDouble(numericValue, CultureInfo.InvariantCulture)),
_ when targetType == typeof(decimal) => new Variant128(
Convert.ToDecimal(numericValue, CultureInfo.InvariantCulture)),
_ => throw new InvalidOperationException(
$"Cannot coerce Statescript numeric value to unsupported target type '{targetType}'."),
};
}
public static bool IsNumericType(Type type)
{
return type == typeof(byte)
|| type == typeof(sbyte)
|| type == typeof(char)
|| type == typeof(short)
|| type == typeof(ushort)
|| type == typeof(int)
|| type == typeof(uint)
|| type == typeof(long)
|| type == typeof(ulong)
|| type == typeof(float)
|| type == typeof(double)
|| type == typeof(decimal);
}
private static bool IsFloatingPointType(Type type)
{
return type == typeof(float) || type == typeof(double) || type == typeof(decimal);
}
private static bool IsIntegralType(Type type)
{
return type == typeof(byte)
|| type == typeof(sbyte)
|| type == typeof(char)
|| type == typeof(short)
|| type == typeof(ushort)
|| type == typeof(int)
|| type == typeof(uint)
|| type == typeof(long)
|| type == typeof(ulong);
}
private static object GetNumericValue(Type type, Variant128 value)
{
if (type == typeof(byte))
{
return value.AsByte();
}
if (type == typeof(sbyte))
{
return value.AsSByte();
}
if (type == typeof(char))
{
return value.AsChar();
}
if (type == typeof(short))
{
return value.AsShort();
}
if (type == typeof(ushort))
{
return value.AsUShort();
}
if (type == typeof(int))
{
return value.AsInt();
}
if (type == typeof(uint))
{
return value.AsUInt();
}
if (type == typeof(long))
{
return value.AsLong();
}
if (type == typeof(ulong))
{
return value.AsULong();
}
if (type == typeof(float))
{
return value.AsFloat();
}
if (type == typeof(double))
{
return value.AsDouble();
}
if (type == typeof(decimal))
{
return value.AsDecimal();
}
throw new InvalidOperationException(
$"Cannot read Statescript numeric value from unsupported source type '{type}'.");
}
}

View File

@@ -0,0 +1 @@
uid://bmmwqoyo6m0y8

View File

@@ -1,5 +1,7 @@
// Copyright © Gamesmiths Guild.
using System;
using System.Linq;
using Gamesmiths.Forge.Core;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
@@ -62,4 +64,112 @@ public partial class StatescriptResolverResource : Resource
{
return new VariantResolver(default, typeof(int));
}
protected static void DefineAndBindInputProperty(
Graph graph,
ForgeNode runtimeNode,
string propertyName,
byte index,
IPropertyResolver resolver)
{
var propertyKey = new StringKey(propertyName);
graph.VariableDefinitions.DefineProperty(
propertyKey,
AdaptResolverForExpectedInput(runtimeNode, index, resolver));
runtimeNode.BindInput(index, propertyKey);
}
protected static bool NeedsNumericInputAdaptation(
ForgeNode runtimeNode,
byte index,
Type actualType)
{
if (index >= runtimeNode.InputProperties.Length)
{
return false;
}
Type expectedType = runtimeNode.InputProperties[index].ExpectedType;
return expectedType != typeof(Variant128)
&& expectedType != actualType
&& StatescriptNumericCompatibility.CanCoerce(actualType, expectedType);
}
protected static IPropertyResolver AdaptResolverForExpectedType(
IPropertyResolver resolver,
Type expectedType)
{
if (expectedType == typeof(Variant128) || expectedType == resolver.ValueType)
{
return resolver;
}
if (StatescriptNumericCompatibility.CanCoerce(resolver.ValueType, expectedType))
{
return new NumericCoercionResolver(resolver, expectedType);
}
return resolver;
}
protected static IPropertyResolver PromoteIntegralResolverToFloatingPoint(
IPropertyResolver resolver,
Type preferredFloatingType)
{
if (!StatescriptNumericCompatibility.IsNumericType(resolver.ValueType)
|| IsFloatingPointType(resolver.ValueType))
{
return resolver;
}
return AdaptResolverForExpectedType(resolver, preferredFloatingType);
}
protected static Type GetPreferredFloatingPointType(params IPropertyResolver[] resolvers)
{
foreach (Type resolverType in resolvers.Select(resolver => resolver.ValueType))
{
if (resolverType == typeof(double) || resolverType == typeof(decimal))
{
return typeof(double);
}
}
foreach (IPropertyResolver resolver in resolvers)
{
if (resolver.ValueType == typeof(float))
{
return typeof(float);
}
}
return typeof(double);
}
protected static bool IsVectorOrQuaternionType(Type type)
{
return type == typeof(System.Numerics.Vector2)
|| type == typeof(System.Numerics.Vector3)
|| type == typeof(System.Numerics.Vector4)
|| type == typeof(System.Numerics.Quaternion);
}
private static IPropertyResolver AdaptResolverForExpectedInput(
ForgeNode runtimeNode,
byte index,
IPropertyResolver resolver)
{
if (index >= runtimeNode.InputProperties.Length)
{
return resolver;
}
Type expectedType = runtimeNode.InputProperties[index].ExpectedType;
return AdaptResolverForExpectedType(resolver, expectedType);
}
private static bool IsFloatingPointType(Type type)
{
return type == typeof(float) || type == typeof(double) || type == typeof(decimal);
}
}

View File

@@ -21,6 +21,18 @@ namespace Gamesmiths.Forge.Godot.Resources.Statescript;
/// </summary>
public static class StatescriptVariableTypeConverter
{
private static readonly StatescriptVariableType[] _authoringTypes =
[
StatescriptVariableType.Bool,
StatescriptVariableType.Int,
StatescriptVariableType.Double,
StatescriptVariableType.Vector2,
StatescriptVariableType.Vector3,
StatescriptVariableType.Vector4,
StatescriptVariableType.Plane,
StatescriptVariableType.Quaternion,
];
private static readonly Dictionary<StatescriptVariableType, Type> _typeMap = new()
{
[StatescriptVariableType.Bool] = typeof(bool),
@@ -43,23 +55,36 @@ public static class StatescriptVariableTypeConverter
[StatescriptVariableType.Quaternion] = typeof(System.Numerics.Quaternion),
};
private static readonly Dictionary<Type, StatescriptVariableType> _reverseTypeMap = [];
static StatescriptVariableTypeConverter()
private static readonly Dictionary<Type, StatescriptVariableType> _authoringTypeMap = new()
{
foreach (KeyValuePair<StatescriptVariableType, Type> kvp in _typeMap)
{
_reverseTypeMap[kvp.Value] = kvp.Key;
}
}
[typeof(bool)] = StatescriptVariableType.Bool,
[typeof(byte)] = StatescriptVariableType.Int,
[typeof(sbyte)] = StatescriptVariableType.Int,
[typeof(char)] = StatescriptVariableType.Int,
[typeof(short)] = StatescriptVariableType.Int,
[typeof(ushort)] = StatescriptVariableType.Int,
[typeof(int)] = StatescriptVariableType.Int,
[typeof(uint)] = StatescriptVariableType.Int,
[typeof(long)] = StatescriptVariableType.Int,
[typeof(ulong)] = StatescriptVariableType.Int,
[typeof(float)] = StatescriptVariableType.Double,
[typeof(double)] = StatescriptVariableType.Double,
[typeof(decimal)] = StatescriptVariableType.Double,
[typeof(SysVector2)] = StatescriptVariableType.Vector2,
[typeof(SysVector3)] = StatescriptVariableType.Vector3,
[typeof(SysVector4)] = StatescriptVariableType.Vector4,
[typeof(System.Numerics.Plane)] = StatescriptVariableType.Plane,
[typeof(System.Numerics.Quaternion)] = StatescriptVariableType.Quaternion,
};
/// <summary>
/// Gets all supported variable type values.
/// Gets all supported designer-facing authoring types.
/// </summary>
/// <returns>All values of <see cref="StatescriptVariableType"/>.</returns>
/// <returns>The subset of <see cref="StatescriptVariableType"/> values exposed for authoring in the Godot editor.
/// </returns>
public static StatescriptVariableType[] GetAllTypes()
{
return (StatescriptVariableType[])Enum.GetValues(typeof(StatescriptVariableType));
return [.. _authoringTypes];
}
/// <summary>
@@ -80,28 +105,26 @@ public static class StatescriptVariableTypeConverter
/// <returns><see langword="true"/> if a matching variable type was found.</returns>
public static bool TryFromSystemType(Type type, out StatescriptVariableType variableType)
{
return _reverseTypeMap.TryGetValue(type, out variableType);
return _authoringTypeMap.TryGetValue(type, out variableType);
}
/// <summary>
/// Checks whether the given <see cref="Type"/> is compatible with the specified variable type.
/// </summary>
/// <remarks>
/// For <see cref="Variant128"/> (wildcard type), all types are compatible. Otherwise, strict type matching is used
/// with no implicit numeric conversions.
/// For <see cref="Variant128"/> (wildcard type), all types are compatible. Otherwise, exact type matches are
/// accepted, and numeric types are also considered compatible when
/// <see cref="StatescriptNumericCompatibility.CanCoerce(Type, Type)"/> can adapt the authored value to the expected
/// runtime type. This allows integral-to-integral and numeric-to-floating-point compatibility, but not
/// floating-point-to-integral coercion.
/// </remarks>
/// <param name="expectedType">The expected type from the node declaration.</param>
/// <param name="variableType">The variable type to check.</param>
/// <returns><see langword="true"/> if the types are compatible.</returns>
public static bool IsCompatible(Type expectedType, StatescriptVariableType variableType)
{
if (expectedType == typeof(Variant128))
{
return true;
}
Type actualType = ToSystemType(variableType);
return expectedType == actualType;
return IsCompatible(expectedType, actualType);
}
/// <summary>
@@ -174,7 +197,33 @@ public static class StatescriptVariableTypeConverter
/// <returns>A human-readable name for the type.</returns>
public static string GetDisplayName(StatescriptVariableType variableType)
{
return variableType.ToString();
return variableType switch
{
StatescriptVariableType.Byte => "Int",
StatescriptVariableType.SByte => "Int",
StatescriptVariableType.Char => "Int",
StatescriptVariableType.Int => "Int",
StatescriptVariableType.UInt => "Int",
StatescriptVariableType.Long => "Int",
StatescriptVariableType.ULong => "Int",
StatescriptVariableType.Short => "Int",
StatescriptVariableType.UShort => "Int",
StatescriptVariableType.Decimal => "Float",
StatescriptVariableType.Double => "Float",
StatescriptVariableType.Float => "Float",
_ => variableType.ToString(),
};
}
internal static bool IsCompatible(Type expectedType, Type actualType)
{
if (expectedType == typeof(Variant128))
{
return true;
}
return expectedType == actualType
|| StatescriptNumericCompatibility.CanCoerce(actualType, expectedType);
}
private static Variant128 ToForgeVector2(GodotVector2 v)

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ACosHResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "ACosH";
protected override string PropertyNamePrefix => "__acosh";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new ACosHResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://ua6xttpaqtx3

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ACosResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "ACos";
protected override string PropertyNamePrefix => "__acos";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new ACosResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://bq0oh51duv5l8

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ASinHResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "ASinH";
protected override string PropertyNamePrefix => "__asinh";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new ASinHResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://c36ndfu5e0bh8

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ASinResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "ASin";
protected override string PropertyNamePrefix => "__asin";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new ASinResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://jb4s37nicvyr

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ATan2ResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "ATan2";
protected override string PropertyNamePrefix => "__atan2";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new ATan2Resolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://dfq0vlrg7fu83

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ATanHResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "ATanH";
protected override string PropertyNamePrefix => "__atanh";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new ATanHResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://bqt6be18wb8f8

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ATanResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "ATan";
protected override string PropertyNamePrefix => "__atan";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new ATanResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://bhmn58hn6c83p

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class AbsResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Abs";
protected override string PropertyNamePrefix => "__abs";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new AbsResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://cl5dlem7o8qhh

View File

@@ -68,7 +68,7 @@ public partial class ActivationDataResolverResource : StatescriptResolverResourc
// Define the variable so the data binder's SetVar call succeeds at runtime.
// Check if the variable is already defined to avoid duplicates when multiple nodes bind the same field.
var alreadyDefined = false;
bool alreadyDefined = false;
foreach (VariableDefinition existing in graph.VariableDefinitions.VariableDefinitions)
{
if (existing.Name == variableName)
@@ -84,6 +84,17 @@ public partial class ActivationDataResolverResource : StatescriptResolverResourc
new VariableDefinition(variableName, default, clrType));
}
if (NeedsNumericInputAdaptation(runtimeNode, index, clrType))
{
DefineAndBindInputProperty(
graph,
runtimeNode,
$"__activation_{nodeId}_{index}",
index,
new VariableResolver(variableName, clrType));
return;
}
runtimeNode.BindInput(index, variableName);
}

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class AddResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Add";
protected override string PropertyNamePrefix => "__add";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new AddResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://cm23kjjecsqkk

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class AndResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "And";
protected override string PropertyNamePrefix => "__and";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new AndResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://dj6r5ytmvhb10

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class AngleResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Angle";
protected override string PropertyNamePrefix => "__angle";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new AngleResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://jch7nucjdqdx

View File

@@ -0,0 +1,45 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Core;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
using Godot.Collections;
using ForgeNode = Gamesmiths.Forge.Statescript.Node;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ArrayVariableResolverResource : StatescriptResolverResource
{
[Export]
public StatescriptVariableType ValueType { get; set; } = StatescriptVariableType.Int;
[Export]
public Array<Variant> ArrayValues { get; set; } = [];
[Export]
public bool IsArrayExpanded { get; set; }
public override string ResolverTypeId => "ArrayVariable";
public override void BindInput(Graph graph, ForgeNode runtimeNode, string nodeId, byte index)
{
var propertyName = new StringKey($"__array_{nodeId}_{index}");
graph.VariableDefinitions.DefineProperty(propertyName, BuildResolver(graph));
runtimeNode.BindInput(index, propertyName);
}
public override IPropertyResolver BuildResolver(Graph graph)
{
var values = new Variant128[ArrayValues.Count];
for (int i = 0; i < ArrayValues.Count; i++)
{
values[i] = StatescriptVariableTypeConverter.GodotVariantToForge(ArrayValues[i], ValueType);
}
return new ArrayVariableResolver(values, StatescriptVariableTypeConverter.ToSystemType(ValueType));
}
}

View File

@@ -0,0 +1 @@
uid://nncg8107buwu

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class CbrtResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Cbrt";
protected override string PropertyNamePrefix => "__cbrt";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new CbrtResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://dqus52x4ayvtg

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class CeilResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Ceil";
protected override string PropertyNamePrefix => "__ceil";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
operandResolver = PromoteIntegralResolverToFloatingPoint(
operandResolver,
GetPreferredFloatingPointType(operandResolver));
return new CeilResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://vupt7axu4yjt

View File

@@ -0,0 +1,26 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ClampMagnitudeResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "ClampMagnitude";
protected override string PropertyNamePrefix => "__clampmag";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
rightResolver = AdaptResolverForExpectedType(rightResolver, typeof(float));
return new ClampMagnitudeResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://di6bytena8enu

View File

@@ -0,0 +1,26 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ClampResolverResource : TernaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Clamp";
protected override string PropertyNamePrefix => "__clamp";
protected override IPropertyResolver CreateResolver(
IPropertyResolver firstResolver,
IPropertyResolver secondResolver,
IPropertyResolver thirdResolver,
Graph graph)
{
return new ClampResolver(firstResolver, secondResolver, thirdResolver);
}
}

View File

@@ -0,0 +1 @@
uid://dyc7kddjdolth

View File

@@ -37,6 +37,12 @@ public partial class ComparisonResolverResource : StatescriptResolverResource
[Export]
public StatescriptResolverResource? Right { get; set; }
[Export]
public bool LeftFolded { get; set; }
[Export]
public bool RightFolded { get; set; }
/// <inheritdoc/>
public override void BindInput(Graph graph, ForgeNode runtimeNode, string nodeId, byte index)
{

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ConcatenateResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Concatenate";
protected override string PropertyNamePrefix => "__concat";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new ConcatenateResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://cmrahroqyhao5

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ConjugateResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Conjugate";
protected override string PropertyNamePrefix => "__conjugate";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new ConjugateResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://1v23fvukfbm1

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class CopySignResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "CopySign";
protected override string PropertyNamePrefix => "__copysign";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new CopySignResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://cp53wwvh6wtpb

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class CosHResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "CosH";
protected override string PropertyNamePrefix => "__cosh";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new CosHResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://2pul8hguveqr

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class CosResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Cos";
protected override string PropertyNamePrefix => "__cos";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new CosResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://bc08ilmh2crkt

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class CrossResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Cross";
protected override string PropertyNamePrefix => "__cross";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new CrossResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://cpu33vntj1c34

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class DegToRadResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "DegToRad";
protected override string PropertyNamePrefix => "__degtorad";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new DegToRadResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://c14mxc32u4rrh

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class DistanceResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Distance";
protected override string PropertyNamePrefix => "__distance";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new DistanceResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://bq8oi7lr3ome5

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class DistanceSquaredResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "DistanceSquared";
protected override string PropertyNamePrefix => "__dist2";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new DistanceSquaredResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://bort1qclaick7

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class DivideResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Divide";
protected override string PropertyNamePrefix => "__divide";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new DivideResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://dchlcihlglcdc

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class DotCoordinateResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "DotCoordinate";
protected override string PropertyNamePrefix => "__dotcoordinate";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new DotCoordinateResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://rsttqpktx8kc

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class DotNormalResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "DotNormal";
protected override string PropertyNamePrefix => "__dotnormal";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new DotNormalResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://cajc2qaswbj6u

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class DotResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Dot";
protected override string PropertyNamePrefix => "__dot";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new DotResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://bw03e7dkf852b

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using System;
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class EResolverResource : TypedConstantResolverResourceBase
{
public override string ResolverTypeId => "E";
protected override string PropertyNamePrefix => "__e";
protected override IPropertyResolver CreateResolver(Type valueType)
{
return new EResolver(valueType);
}
}

View File

@@ -0,0 +1 @@
uid://q18fgodpw1nh

View File

@@ -0,0 +1,28 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
using ForgeEulerOrder = Gamesmiths.Forge.Statescript.Properties.EulerOrder;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class EulerAnglesFromQuaternionResolverResource : UnaryNestedResolverResourceBase
{
[Export]
public ForgeEulerOrder Order { get; set; } = ForgeEulerOrder.XYZ;
public override string ResolverTypeId => "EulerAnglesFromQuaternion";
protected override string PropertyNamePrefix => "__eulerfromquat";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new EulerAnglesFromQuaternionResolver(
operandResolver,
new VariantResolver(new Variant128((int)Order), typeof(int)));
}
}

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ExpResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Exp";
protected override string PropertyNamePrefix => "__exp";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new ExpResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://c5t6w3pvhedbw

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class FloorResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Floor";
protected override string PropertyNamePrefix => "__floor";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
operandResolver = PromoteIntegralResolverToFloatingPoint(
operandResolver,
GetPreferredFloatingPointType(operandResolver));
return new FloorResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://yfw58s1q18vm

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class InverseResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Inverse";
protected override string PropertyNamePrefix => "__inverse";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new InverseResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://bkgn2wskesfre

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class LengthResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Length";
protected override string PropertyNamePrefix => "__length";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new LengthResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://diqyhlprfb1yn

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class LengthSquaredResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "LengthSquared";
protected override string PropertyNamePrefix => "__length2";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new LengthSquaredResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://dc60ghgb0kgth

View File

@@ -0,0 +1,39 @@
// Copyright © Gamesmiths Guild.
using System;
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class LerpResolverResource : TernaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Lerp";
protected override string PropertyNamePrefix => "__lerp";
protected override IPropertyResolver CreateResolver(
IPropertyResolver firstResolver,
IPropertyResolver secondResolver,
IPropertyResolver thirdResolver,
Graph graph)
{
if (IsVectorOrQuaternionType(firstResolver.ValueType) || IsVectorOrQuaternionType(secondResolver.ValueType))
{
thirdResolver = AdaptResolverForExpectedType(thirdResolver, typeof(float));
}
else
{
Type preferredFloatingType = GetPreferredFloatingPointType(firstResolver, secondResolver, thirdResolver);
firstResolver = PromoteIntegralResolverToFloatingPoint(firstResolver, preferredFloatingType);
secondResolver = PromoteIntegralResolverToFloatingPoint(secondResolver, preferredFloatingType);
thirdResolver = PromoteIntegralResolverToFloatingPoint(thirdResolver, preferredFloatingType);
}
return new LerpResolver(firstResolver, secondResolver, thirdResolver);
}
}

View File

@@ -0,0 +1 @@
uid://dc3avdnhexa2q

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class Log10ResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Log10";
protected override string PropertyNamePrefix => "__log10";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new Log10Resolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://coqk8brmbdtdb

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class Log2ResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Log2";
protected override string PropertyNamePrefix => "__log2";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new Log2Resolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://bgnylfxdn6q57

View File

@@ -0,0 +1,22 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class LogResolverResource : UnaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Log";
protected override string PropertyNamePrefix => "__log";
protected override IPropertyResolver CreateResolver(IPropertyResolver operandResolver, Graph graph)
{
return new LogResolver(operandResolver);
}
}

View File

@@ -0,0 +1 @@
uid://c47kw60drqkla

View File

@@ -0,0 +1,26 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class LookAtResolverResource : TernaryNestedResolverResourceBase
{
public override string ResolverTypeId => "LookAt";
protected override string PropertyNamePrefix => "__lookat";
protected override IPropertyResolver CreateResolver(
IPropertyResolver firstResolver,
IPropertyResolver secondResolver,
IPropertyResolver thirdResolver,
Graph graph)
{
return new LookAtResolver(firstResolver, secondResolver, thirdResolver);
}
}

View File

@@ -0,0 +1 @@
uid://cx7fcmcwooyuf

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class MaxResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Max";
protected override string PropertyNamePrefix => "__max";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new MaxResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://qwceer0fwycl

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class MinResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Min";
protected override string PropertyNamePrefix => "__min";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new MinResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://eifyl705u3gv

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class ModuloResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Modulo";
protected override string PropertyNamePrefix => "__modulo";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new ModuloResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://uff681gfceto

View File

@@ -0,0 +1,34 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class MoveTowardsResolverResource : TernaryNestedResolverResourceBase
{
public override string ResolverTypeId => "MoveTowards";
protected override string PropertyNamePrefix => "__movetowards";
protected override IPropertyResolver CreateResolver(
IPropertyResolver firstResolver,
IPropertyResolver secondResolver,
IPropertyResolver thirdResolver,
Graph graph)
{
if (StatescriptNumericCompatibility.IsNumericType(firstResolver.ValueType)
&& StatescriptNumericCompatibility.IsNumericType(secondResolver.ValueType))
{
firstResolver = AdaptResolverForExpectedType(firstResolver, typeof(float));
secondResolver = AdaptResolverForExpectedType(secondResolver, typeof(float));
}
thirdResolver = AdaptResolverForExpectedType(thirdResolver, typeof(float));
return new MoveTowardsResolver(firstResolver, secondResolver, thirdResolver);
}
}

View File

@@ -0,0 +1 @@
uid://b8h5iv8btpf2m

View File

@@ -0,0 +1,25 @@
// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers.Bases;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class MultiplyResolverResource : BinaryNestedResolverResourceBase
{
public override string ResolverTypeId => "Multiply";
protected override string PropertyNamePrefix => "__multiply";
protected override IPropertyResolver CreateResolver(
IPropertyResolver leftResolver,
IPropertyResolver rightResolver,
Graph graph)
{
return new MultiplyResolver(leftResolver, rightResolver);
}
}

View File

@@ -0,0 +1 @@
uid://bls6qlyxbp0wo

Some files were not shown because too many files have changed in this diff Show More