Update tests and dll resolver
This commit is contained in:
parent
709a0c1c3d
commit
eb48e471d8
5 changed files with 45 additions and 94 deletions
|
|
@ -31,10 +31,16 @@ public static class Bunnymark
|
||||||
private record struct Bunny()
|
private record struct Bunny()
|
||||||
{
|
{
|
||||||
public Vector2 Position { get; set; } = GetMousePosition();
|
public Vector2 Position { get; set; } = GetMousePosition();
|
||||||
public Vector2 Speed { get; set; } = new(
|
public Vector2 Speed
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
} = new(
|
||||||
GetRandomValue(-250, 250) / (float)TARGET_FPS,
|
GetRandomValue(-250, 250) / (float)TARGET_FPS,
|
||||||
GetRandomValue(-250, 250) / (float)TARGET_FPS);
|
GetRandomValue(-250, 250) / (float)TARGET_FPS);
|
||||||
public Color Color { get; } = new(
|
public Color Color
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
} = new(
|
||||||
GetRandomValue(50, 240),
|
GetRandomValue(50, 240),
|
||||||
GetRandomValue(80, 240),
|
GetRandomValue(80, 240),
|
||||||
GetRandomValue(100, 240), 255);
|
GetRandomValue(100, 240), 255);
|
||||||
|
|
@ -68,7 +74,7 @@ public static class Bunnymark
|
||||||
if (IsMouseButtonDown(MouseButton.Left) && bunniesCount < MaxBunnies)
|
if (IsMouseButtonDown(MouseButton.Left) && bunniesCount < MaxBunnies)
|
||||||
{
|
{
|
||||||
// Add a range of new bunnies
|
// Add a range of new bunnies
|
||||||
foreach (ref var bunny in bunnies[bunniesCount..(bunniesCount+BunnyIncrement)])
|
foreach (ref var bunny in bunnies[bunniesCount..(bunniesCount + BunnyIncrement)])
|
||||||
{
|
{
|
||||||
bunny = new();
|
bunny = new();
|
||||||
}
|
}
|
||||||
|
|
@ -79,7 +85,7 @@ public static class Bunnymark
|
||||||
// Remove the oldest bunnies, shifting them back in the span
|
// Remove the oldest bunnies, shifting them back in the span
|
||||||
if (bunniesCount > BunnyDecrement)
|
if (bunniesCount > BunnyDecrement)
|
||||||
{
|
{
|
||||||
bunnies[BunnyDecrement .. bunniesCount].CopyTo(bunnies);
|
bunnies[BunnyDecrement..bunniesCount].CopyTo(bunnies);
|
||||||
}
|
}
|
||||||
bunniesCount = Math.Max(0, bunniesCount - BunnyDecrement);
|
bunniesCount = Math.Max(0, bunniesCount - BunnyDecrement);
|
||||||
}
|
}
|
||||||
|
|
@ -93,9 +99,9 @@ public static class Bunnymark
|
||||||
// Bounce bunnies off the screen borders
|
// Bounce bunnies off the screen borders
|
||||||
bunny.Speed *= (bunny.Position + halfSize) switch
|
bunny.Speed *= (bunny.Position + halfSize) switch
|
||||||
{
|
{
|
||||||
{ X: < 0 or > screenWidth, Y: < 40 or > screenHeight} => new(-1, -1),
|
{ X: < 0 or > screenWidth, Y: < 40 or > screenHeight } => new(-1, -1),
|
||||||
{ X: < 0 or > screenWidth} => new(-1, 1),
|
{ X: < 0 or > screenWidth } => new(-1, 1),
|
||||||
{ Y: < 40 or > screenHeight} => new(1,-1),
|
{ Y: < 40 or > screenHeight } => new(1, -1),
|
||||||
_ => Vector2.One,
|
_ => Vector2.One,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
namespace Raylib_cs.Native
|
namespace Raylib_cs.Native;
|
||||||
|
|
||||||
|
internal class Native
|
||||||
{
|
{
|
||||||
internal class Native { }
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,69 +0,0 @@
|
||||||
// For more information see the blog post: https://aakinshin.net/posts/blittable/
|
|
||||||
// Original code derived from: https://github.com/AndreyAkinshin/BlittableStructs/blob/master/BlittableStructs/BlittableHelper.cs
|
|
||||||
|
|
||||||
/*
|
|
||||||
The MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2015 Andrey Akinshin
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Runtime.Serialization;
|
|
||||||
|
|
||||||
namespace Raylib_cs.Tests;
|
|
||||||
|
|
||||||
public static class BlittableHelper
|
|
||||||
{
|
|
||||||
public static bool IsBlittable<T>()
|
|
||||||
{
|
|
||||||
return IsBlittableCache<T>.VALUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool IsBlittable(this Type type)
|
|
||||||
{
|
|
||||||
if (type == typeof(decimal))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (type.IsArray)
|
|
||||||
{
|
|
||||||
var elementType = type.GetElementType();
|
|
||||||
return elementType != null && elementType.IsValueType && IsBlittable(elementType);
|
|
||||||
}
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var instance = FormatterServices.GetUninitializedObject(type);
|
|
||||||
GCHandle.Alloc(instance, GCHandleType.Pinned).Free();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class IsBlittableCache<T>
|
|
||||||
{
|
|
||||||
public static readonly bool VALUE = IsBlittable(typeof(T));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +1,18 @@
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Raylib_cs.Tests;
|
namespace Raylib_cs.Tests;
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
public static class BlittableHelper
|
||||||
|
{
|
||||||
|
public static bool IsBlittable<T>()
|
||||||
|
{
|
||||||
|
return !RuntimeHelpers.IsReferenceOrContainsReferences<T>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class RaylibTests
|
public class RaylibTests
|
||||||
{
|
{
|
||||||
private unsafe void CheckType<T>() where T : unmanaged
|
private unsafe void CheckType<T>() where T : unmanaged
|
||||||
|
|
|
||||||
|
|
@ -26,25 +26,27 @@ public static unsafe partial class Raylib
|
||||||
|
|
||||||
static Raylib()
|
static Raylib()
|
||||||
{
|
{
|
||||||
NativeLibrary.SetDllImportResolver(Assembly.GetExecutingAssembly(), (libraryName, assembly, searchPath) =>
|
NativeLibrary.SetDllImportResolver(Assembly.GetExecutingAssembly(), ResolveDllImport);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IntPtr ResolveDllImport(string libraryName, Assembly assembly, DllImportSearchPath? searchPath)
|
||||||
{
|
{
|
||||||
IntPtr handle = IntPtr.Zero;
|
IntPtr handle = IntPtr.Zero;
|
||||||
string libraryPath = GetLibraryPath(libraryName);
|
string libraryPath = GetLibraryPath(libraryName);
|
||||||
|
|
||||||
if (NativeLibrary.TryLoad(libraryPath, out handle))
|
|
||||||
{
|
|
||||||
return handle;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NativeLibrary.TryLoad(libraryName, assembly, searchPath, out handle))
|
if (NativeLibrary.TryLoad(libraryName, assembly, searchPath, out handle))
|
||||||
{
|
{
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (NativeLibrary.TryLoad(libraryPath, out handle))
|
||||||
|
{
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
throw new DllNotFoundException(
|
throw new DllNotFoundException(
|
||||||
$"Failed to load {libraryName} using {libraryPath}."
|
$"Failed to load {libraryName}."
|
||||||
);
|
);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GetLibraryPath(string libraryName)
|
public static string GetLibraryPath(string libraryName)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue