mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-25 22:18:34 +01:00
Added Range extension methods GetPercentage and FromPercentage
This commit is contained in:
parent
5906278091
commit
6ac2ba6151
5 changed files with 93 additions and 8 deletions
|
@ -84,6 +84,9 @@ Removals
|
||||||
- Marked DynamicEnum as obsolete due to its reimplementation in [DynamicEnums](https://www.nuget.org/packages/DynamicEnums)
|
- Marked DynamicEnum as obsolete due to its reimplementation in [DynamicEnums](https://www.nuget.org/packages/DynamicEnums)
|
||||||
|
|
||||||
## MLEM.Extended
|
## MLEM.Extended
|
||||||
|
Additions
|
||||||
|
- Added Range extension methods GetPercentage and FromPercentage
|
||||||
|
|
||||||
Improvements
|
Improvements
|
||||||
- Multi-target net452, making MLEM compatible with MonoGame for consoles
|
- Multi-target net452, making MLEM compatible with MonoGame for consoles
|
||||||
- Added trimming and AOT annotations and made MLEM.Extended trimmable
|
- Added trimming and AOT annotations and made MLEM.Extended trimmable
|
||||||
|
|
|
@ -40,5 +40,53 @@ namespace MLEM.Extended.Extensions {
|
||||||
return rect.ToMlem().Penetrate(other.ToMlem(), out normal, out penetration);
|
return rect.ToMlem().Penetrate(other.ToMlem(), out normal, out penetration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns how far between the given <paramref name="range"/>'s <see cref="Range{T}.Min"/> and <see cref="Range{T}.Max"/> value the given <paramref name="value"/> is, as a number between 0 and 1.
|
||||||
|
/// Note that, if the <paramref name="value"/> is outside the given <paramref name="range"/>, a correct proportional value outside the 0 to 1 range will still be returned.
|
||||||
|
/// This method is the reverse action of <see cref="FromPercentage(MonoGame.Extended.Range{float},float)"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="range">The range to query.</param>
|
||||||
|
/// <param name="value">The value to query.</param>
|
||||||
|
/// <returns>The percentage.</returns>
|
||||||
|
public static float GetPercentage(this Range<float> range, float value) {
|
||||||
|
return (value - range.Min) / (range.Max - range.Min);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns how far between the given <paramref name="range"/>'s <see cref="Range{T}.Min"/> and <see cref="Range{T}.Max"/> value the given <paramref name="value"/> is, as a number between 0 and 1.
|
||||||
|
/// Note that, if the <paramref name="value"/> is outside the given <paramref name="range"/>, a correct proportional value outside the 0 to 1 range will still be returned.
|
||||||
|
/// This method is the reverse action of <see cref="FromPercentage(MonoGame.Extended.Range{int},float)"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="range">The range to query.</param>
|
||||||
|
/// <param name="value">The value to query.</param>
|
||||||
|
/// <returns>The percentage.</returns>
|
||||||
|
public static float GetPercentage(this Range<int> range, float value) {
|
||||||
|
return (value - range.Min) / (range.Max - range.Min);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a value within the given <paramref name="range"/>'s <see cref="Range{T}.Min"/> and <see cref="Range{T}.Max"/> values based on the given <paramref name="percentage"/> into the range.
|
||||||
|
/// Note that, if the <paramref name="percentage"/> is outside the 0 to 1 range, a correct value outside the <paramref name="range"/> will still be returned.
|
||||||
|
/// This method is the reverse action of <see cref="GetPercentage(MonoGame.Extended.Range{float},float)"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="range">The range to query.</param>
|
||||||
|
/// <param name="percentage">The percentage to query.</param>
|
||||||
|
/// <returns>The value.</returns>
|
||||||
|
public static float FromPercentage(this Range<float> range, float percentage) {
|
||||||
|
return (range.Max - range.Min) * percentage + range.Min;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a value within the given <paramref name="range"/>'s <see cref="Range{T}.Min"/> and <see cref="Range{T}.Max"/> values based on the given <paramref name="percentage"/> into the range.
|
||||||
|
/// Note that, if the <paramref name="percentage"/> is outside the 0 to 1 range, a correct value outside the <paramref name="range"/> will still be returned.
|
||||||
|
/// This method is the reverse action of <see cref="GetPercentage(MonoGame.Extended.Range{int},float)"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="range">The range to query.</param>
|
||||||
|
/// <param name="percentage">The percentage to query.</param>
|
||||||
|
/// <returns>The value.</returns>
|
||||||
|
public static float FromPercentage(this Range<int> range, float percentage) {
|
||||||
|
return (range.Max - range.Min) * percentage + range.Min;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using MLEM.Extensions;
|
using MLEM.Extensions;
|
||||||
using MLEM.Misc;
|
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
using RectangleF = MLEM.Misc.RectangleF;
|
||||||
|
|
||||||
|
#if !FNA
|
||||||
|
using MonoGame.Extended;
|
||||||
|
using MLEM.Extended.Extensions;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace Tests;
|
namespace Tests;
|
||||||
|
|
||||||
|
@ -68,4 +73,28 @@ public class NumberTests {
|
||||||
Assert.AreEqual(penetration, 0);
|
Assert.AreEqual(penetration, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !FNA
|
||||||
|
[Test]
|
||||||
|
public void TestRangePercentage() {
|
||||||
|
Assert.AreEqual(0.5F, new Range<int>(1, 7).GetPercentage(4));
|
||||||
|
Assert.AreEqual(1, new Range<int>(1, 7).GetPercentage(7));
|
||||||
|
Assert.AreEqual(0, new Range<int>(1, 7).GetPercentage(1));
|
||||||
|
Assert.AreEqual(4, new Range<int>(1, 7).FromPercentage(0.5F));
|
||||||
|
Assert.AreEqual(7, new Range<int>(1, 7).FromPercentage(1));
|
||||||
|
Assert.AreEqual(1, new Range<int>(1, 7).FromPercentage(0));
|
||||||
|
|
||||||
|
Assert.AreEqual(0.5F, new Range<float>(-1, 1).GetPercentage(0));
|
||||||
|
Assert.AreEqual(0.25F, new Range<float>(-1, 1).GetPercentage(-0.5F));
|
||||||
|
Assert.AreEqual(0.75F, new Range<float>(-1, 1).GetPercentage(0.5F));
|
||||||
|
Assert.AreEqual(0, new Range<float>(-1, 1).FromPercentage(0.5F));
|
||||||
|
Assert.AreEqual(-0.5F, new Range<float>(-1, 1).FromPercentage(0.25F));
|
||||||
|
Assert.AreEqual(0.5F, new Range<float>(-1, 1).FromPercentage(0.75F));
|
||||||
|
|
||||||
|
Assert.AreEqual(1.5F, new Range<float>(8, 10).GetPercentage(11));
|
||||||
|
Assert.AreEqual(-0.5F, new Range<float>(8, 10).GetPercentage(7));
|
||||||
|
Assert.AreEqual(11, new Range<float>(8, 10).FromPercentage(1.5F));
|
||||||
|
Assert.AreEqual(7, new Range<float>(8, 10).FromPercentage(-0.5F));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\MLEM.Extended\MLEM.Extended.FNA.csproj" />
|
||||||
<ProjectReference Include="..\MLEM.Startup\MLEM.Startup.FNA.csproj" />
|
<ProjectReference Include="..\MLEM.Startup\MLEM.Startup.FNA.csproj" />
|
||||||
<ProjectReference Include="..\MLEM.Data\MLEM.Data.FNA.csproj" />
|
<ProjectReference Include="..\MLEM.Data\MLEM.Data.FNA.csproj" />
|
||||||
<ProjectReference Include="..\MLEM.Ui\MLEM.Ui.FNA.csproj" />
|
<ProjectReference Include="..\MLEM.Ui\MLEM.Ui.FNA.csproj" />
|
||||||
|
@ -17,12 +18,13 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\FNA\FNA.Core.csproj" />
|
<ProjectReference Include="..\FNA\FNA.Core.csproj" />
|
||||||
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||||
|
|
||||||
<PackageReference Include="coverlet.collector" Version="3.1.2">
|
<PackageReference Include="coverlet.collector" Version="3.1.2">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.1" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
|
||||||
<PackageReference Include="NUnit" Version="3.13.3" />
|
<PackageReference Include="NUnit" Version="3.13.3" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
|
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||||
<PackageReference Include="NunitXml.TestLogger" Version="3.0.117" />
|
<PackageReference Include="NunitXml.TestLogger" Version="3.0.117" />
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\MLEM.Extended\MLEM.Extended.csproj" />
|
||||||
<ProjectReference Include="..\MLEM.Startup\MLEM.Startup.csproj" />
|
<ProjectReference Include="..\MLEM.Startup\MLEM.Startup.csproj" />
|
||||||
<ProjectReference Include="..\MLEM.Data\MLEM.Data.csproj" />
|
<ProjectReference Include="..\MLEM.Data\MLEM.Data.csproj" />
|
||||||
<ProjectReference Include="..\MLEM.Ui\MLEM.Ui.csproj" />
|
<ProjectReference Include="..\MLEM.Ui\MLEM.Ui.csproj" />
|
||||||
|
@ -15,12 +16,14 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="MonoGame.Framework.DesktopGL" Version="3.8.0.1641" />
|
<PackageReference Include="MonoGame.Framework.DesktopGL" Version="3.8.0.1641" />
|
||||||
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||||
|
<PackageReference Include="MonoGame.Extended" Version="3.8.0" />
|
||||||
|
|
||||||
<PackageReference Include="coverlet.collector" Version="3.1.2">
|
<PackageReference Include="coverlet.collector" Version="3.1.2">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.1" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.1" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
|
||||||
<PackageReference Include="NUnit" Version="3.13.3" />
|
<PackageReference Include="NUnit" Version="3.13.3" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
|
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||||
<PackageReference Include="NunitXml.TestLogger" Version="3.0.117" />
|
<PackageReference Include="NunitXml.TestLogger" Version="3.0.117" />
|
||||||
|
|
Loading…
Reference in a new issue