Files
MovementTests/addons/forge/resources/statescript/resolvers/VectorFromValuesResolverResource.cs
Minimata e09714cf83
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
update forge
2026-05-17 00:06:44 +02:00

91 lines
2.7 KiB
C#

// Copyright © Gamesmiths Guild.
using Gamesmiths.Forge.Core;
using Gamesmiths.Forge.Statescript;
using Gamesmiths.Forge.Statescript.Properties;
using Godot;
using ForgeNode = Gamesmiths.Forge.Statescript.Node;
namespace Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
[Tool]
[GlobalClass]
public partial class VectorFromValuesResolverResource : StatescriptResolverResource
{
[Export]
public StatescriptVariableType ValueType { get; set; } = StatescriptVariableType.Vector3;
[Export]
public StatescriptResolverResource? X { get; set; }
[Export]
public StatescriptResolverResource? Y { get; set; }
[Export]
public StatescriptResolverResource? Z { get; set; }
[Export]
public StatescriptResolverResource? W { get; set; }
[Export]
public bool XFolded { get; set; }
[Export]
public bool YFolded { get; set; }
[Export]
public bool ZFolded { get; set; }
[Export]
public bool WFolded { get; set; }
public override string ResolverTypeId => "VectorFromValues";
public override void BindInput(Graph graph, ForgeNode runtimeNode, string nodeId, byte index)
{
IPropertyResolver resolver = BuildResolver(graph);
var propertyName = new StringKey($"__vectorfromvalues_{nodeId}_{index}");
graph.VariableDefinitions.DefineProperty(propertyName, resolver);
runtimeNode.BindInput(index, propertyName);
}
public override IPropertyResolver BuildResolver(Graph graph)
{
IPropertyResolver xResolver = AdaptResolverForExpectedType(
X?.BuildResolver(graph) ?? CreateDefaultComponentResolver(),
typeof(float));
IPropertyResolver yResolver = AdaptResolverForExpectedType(
Y?.BuildResolver(graph) ?? CreateDefaultComponentResolver(),
typeof(float));
IPropertyResolver zResolver = AdaptResolverForExpectedType(
Z?.BuildResolver(graph) ?? CreateDefaultComponentResolver(),
typeof(float));
IPropertyResolver wResolver = AdaptResolverForExpectedType(
W?.BuildResolver(graph) ?? CreateDefaultComponentResolver(),
typeof(float));
return GetNormalizedValueType() switch
{
StatescriptVariableType.Vector2 => new VectorFromValuesResolver(xResolver, yResolver),
StatescriptVariableType.Vector4 => new VectorFromValuesResolver(xResolver, yResolver, zResolver, wResolver),
_ => new VectorFromValuesResolver(xResolver, yResolver, zResolver),
};
}
private static VariantResolver CreateDefaultComponentResolver()
{
return new VariantResolver(default, typeof(float));
}
private StatescriptVariableType GetNormalizedValueType()
{
return ValueType switch
{
StatescriptVariableType.Vector2 => StatescriptVariableType.Vector2,
StatescriptVariableType.Vector4 => StatescriptVariableType.Vector4,
_ => StatescriptVariableType.Vector3,
};
}
}