From 5cdcb9288e0109a188c739adb46a6751dc9f1a6c Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Thu, 1 Feb 2024 13:51:38 +0100 Subject: [PATCH] Add NearEqual for vectors. --- Glamourer/Designs/ApplicationRules.cs | 2 +- Glamourer/GameData/CustomizeParameterValue.cs | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Glamourer/Designs/ApplicationRules.cs b/Glamourer/Designs/ApplicationRules.cs index 1852c7e..aaaf1a7 100644 --- a/Glamourer/Designs/ApplicationRules.cs +++ b/Glamourer/Designs/ApplicationRules.cs @@ -75,7 +75,7 @@ public readonly struct ApplicationRules( { var modelValue = model.Parameters[flag]; var gameValue = game.Parameters[flag]; - if ((modelValue.InternalQuadruple - gameValue.InternalQuadruple).LengthSquared() < 1e-9f) + if (modelValue.NearEqual(gameValue)) baseFlags &= ~flag; } diff --git a/Glamourer/GameData/CustomizeParameterValue.cs b/Glamourer/GameData/CustomizeParameterValue.cs index 0e22d18..3bfdf99 100644 --- a/Glamourer/GameData/CustomizeParameterValue.cs +++ b/Glamourer/GameData/CustomizeParameterValue.cs @@ -48,3 +48,18 @@ public readonly struct CustomizeParameterValue public override string ToString() => _data.ToString(); } + +public static class VectorExtensions +{ + [MethodImpl(MethodImplOptions.AggressiveOptimization | MethodImplOptions.AggressiveInlining)] + public static bool NearEqual(this Vector3 lhs, Vector3 rhs, float eps = 1e-9f) + => (lhs - rhs).LengthSquared() < eps; + + [MethodImpl(MethodImplOptions.AggressiveOptimization | MethodImplOptions.AggressiveInlining)] + public static bool NearEqual(this Vector4 lhs, Vector4 rhs, float eps = 1e-9f) + => (lhs - rhs).LengthSquared() < eps; + + [MethodImpl(MethodImplOptions.AggressiveOptimization | MethodImplOptions.AggressiveInlining)] + public static bool NearEqual(this CustomizeParameterValue lhs, CustomizeParameterValue rhs, float eps = 1e-9f) + => NearEqual(lhs.InternalQuadruple, rhs.InternalQuadruple, eps); +}