Removed "Cricle" and "Line" structs (and their extension methods) to conserve only raylib types. Added "Dimensions" property to "Texture2D" Added another "Load" overload for the "Texture2D" extensions (load from memory) New overloads for the "LoadFileData" and "SaveFileData" methods
435 lines
14 KiB
C#
435 lines
14 KiB
C#
using System.Collections.Generic;
|
|
using static Raylib_cs.Raylib;
|
|
using System.Numerics;
|
|
|
|
namespace Raylib_cs;
|
|
|
|
public static class RaylibExtensions
|
|
{
|
|
public static unsafe void SaveFileText(string fileName, string text)
|
|
{
|
|
using AnsiBuffer fileBuffer = fileName.ToAnsiBuffer();
|
|
using AnsiBuffer textBuffer = text.ToAnsiBuffer();
|
|
Raylib.SaveFileText(fileBuffer.AsPointer(), textBuffer.AsPointer());
|
|
}
|
|
|
|
public static unsafe string LoadFileText(string fileName)
|
|
{
|
|
using AnsiBuffer nameBuffer = fileName.ToAnsiBuffer();
|
|
sbyte* data = Raylib.LoadFileText(nameBuffer.AsPointer());
|
|
//string text = new string(data);
|
|
string text = System.Runtime.InteropServices.Marshal.PtrToStringUTF8((System.IntPtr)data);
|
|
Raylib.UnloadFileText(data);
|
|
return text;
|
|
}
|
|
|
|
#region Rectangle
|
|
|
|
public static void Draw(this Rectangle rectangle, Color color)
|
|
{
|
|
DrawRectangleRec(rectangle, color);
|
|
}
|
|
|
|
public static void Draw(this Rectangle rec, Vector2 origin, Color color)
|
|
{
|
|
rec.Draw(origin, 0.0f, color);
|
|
}
|
|
|
|
public static void Draw(this Rectangle rec, Vector2 origin, float rotation, Color color)
|
|
{
|
|
DrawRectanglePro(rec, origin, rotation, color);
|
|
}
|
|
|
|
public static void GetIntegerPosition(this Rectangle rec, out int x, out int y)
|
|
{
|
|
x = (int)rec.X;
|
|
y = (int)rec.Y;
|
|
}
|
|
|
|
public static void GetIntegerDimentions(this Rectangle rec, out int width, out int height)
|
|
{
|
|
width = (int)rec.Width;
|
|
height = (int)rec.Height;
|
|
}
|
|
|
|
public static void GetIntegerValues(this Rectangle rec, out int x, out int y, out int width, out int height)
|
|
{
|
|
x = (int)rec.X;
|
|
y = (int)rec.Y;
|
|
width = (int)rec.Width;
|
|
height = (int)rec.Height;
|
|
}
|
|
|
|
public static void DrawLines(this Rectangle rectangle, Color color)
|
|
{
|
|
rectangle.GetIntegerValues(out int x, out int y, out int w, out int h);
|
|
DrawRectangleLines(x, y, w, h, color);
|
|
}
|
|
|
|
public static void DrawLines(this Rectangle rectangle, float thickness, Color color)
|
|
{
|
|
DrawRectangleLinesEx(rectangle, thickness, color);
|
|
}
|
|
|
|
public static void DrawGradient(this Rectangle rec, Color topLeft, Color bottomLeft, Color topRight, Color bottomRight)
|
|
{
|
|
DrawRectangleGradientEx(rec, topLeft, bottomLeft, topRight, bottomRight);
|
|
}
|
|
|
|
public static void DrawGradientV(this Rectangle rectangle, Color top, Color bottom)
|
|
{
|
|
rectangle.GetIntegerValues(out int x, out int y, out int w, out int h);
|
|
DrawRectangleGradientV(x, y, w, h, top, bottom);
|
|
}
|
|
|
|
public static void DrawGradientH(this Rectangle rec, Color left, Color right)
|
|
{
|
|
rec.GetIntegerValues(out int x, out int y, out int w, out int h);
|
|
DrawRectangleGradientH(x, y, w, h, left, right);
|
|
}
|
|
|
|
public static void DrawRounded(this Rectangle rec, float roundness, Color color)
|
|
{
|
|
DrawRectangleRounded(rec, roundness, 10, color);
|
|
}
|
|
|
|
public static void DrawRounded(this Rectangle rec, float roundness, int segments, Color color)
|
|
{
|
|
DrawRectangleRounded(rec, roundness, segments, color);
|
|
}
|
|
|
|
public static void DrawRoundedLines(this Rectangle rec, float roundness, Color color)
|
|
{
|
|
DrawRectangleRoundedLines(rec, roundness, 10, color);
|
|
}
|
|
|
|
public static void DrawRoundedLines(this Rectangle rec, float roundness, int segments, Color color)
|
|
{
|
|
DrawRectangleRoundedLines(rec, roundness, segments, color);
|
|
}
|
|
|
|
public static void DrawRoundedLines(this Rectangle rec, float roundness, float thickness, Color color)
|
|
{
|
|
DrawRectangleRoundedLinesEx(rec, roundness, 10, thickness, color);
|
|
}
|
|
|
|
public static void DrawRoundedLines(this Rectangle rec, float roundness, int segments, float thickness, Color color)
|
|
{
|
|
DrawRectangleRoundedLinesEx(rec, roundness, segments, thickness, color);
|
|
}
|
|
|
|
public static CBool CheckCollision(this Rectangle rec, Rectangle rectangle)
|
|
{
|
|
return CheckCollisionRecs(rec, rectangle);
|
|
}
|
|
|
|
public static CBool CheckCollision(this Rectangle rec, Vector2 point)
|
|
{
|
|
return CheckCollisionPointRec(point, rec);
|
|
}
|
|
|
|
public static CBool CheckCircleCollision(this Rectangle rec, Vector2 center, float radius)
|
|
{
|
|
return CheckCollisionCircleRec(center, radius, rec);
|
|
}
|
|
|
|
public static CBool CheckColllisionCircle(this Rectangle rec, Vector2 position, float radius)
|
|
{
|
|
return CheckCollisionCircleRec(position, radius, rec);
|
|
}
|
|
|
|
public static Rectangle GetCollisionRectangle(this Rectangle rectangle, Rectangle rectangle2)
|
|
{
|
|
return GetCollisionRec(rectangle, rectangle2);
|
|
}
|
|
|
|
#endregion
|
|
|
|
public static void DrawLines(this IEnumerable<Vector2> points, Color color)
|
|
{
|
|
Vector2[] pointArray = System.Linq.Enumerable.ToArray<Vector2>(points);
|
|
DrawLineStrip(pointArray, pointArray.Length, color);
|
|
}
|
|
|
|
#region Image
|
|
|
|
public static void Load(this ref Image image, string fileName)
|
|
{
|
|
image = LoadImage(fileName);
|
|
}
|
|
|
|
public static void Load(this ref Image image, string fileType, byte[] data)
|
|
{
|
|
image = LoadImageFromMemory(fileType, data);
|
|
}
|
|
|
|
public static void Load(this ref Image image, Texture2D texture)
|
|
{
|
|
image = LoadImageFromTexture(texture);
|
|
}
|
|
|
|
public static void Load(this ref Image image, string fileName, int width, int height, PixelFormat format, int headerSize)
|
|
{
|
|
image = LoadImageRaw(fileName, width, height, format, headerSize);
|
|
}
|
|
|
|
public static void Unload(this Image image)
|
|
{
|
|
UnloadImage(image);
|
|
}
|
|
|
|
public static unsafe Color[] GetPalette(this Image image, int maxPaletteSize)
|
|
{
|
|
int colorCount = 0;
|
|
Color* colors = LoadImagePalette(image, maxPaletteSize, &colorCount);
|
|
Color[] palette = new Color[colorCount];
|
|
for (int i = 0; i < colorCount; i++)
|
|
{
|
|
palette[i] = colors[i];
|
|
}
|
|
UnloadImagePalette(colors);
|
|
return palette;
|
|
}
|
|
|
|
public static void LoadFromScreen(this ref Image image)
|
|
{
|
|
image = LoadImageFromScreen();
|
|
}
|
|
|
|
public static void DrawLine(this ref Image image, Vector2 start, Vector2 end, Color color)
|
|
{
|
|
ImageDrawLineV(ref image, start, end, color);
|
|
}
|
|
|
|
public static void DrawLine(this ref Image image, Vector2 start, Vector2 end, int thickness, Color color)
|
|
{
|
|
ImageDrawLineEx(ref image, start, end, thickness, color);
|
|
}
|
|
|
|
public static void DrawCircle(this ref Image image, Vector2 position, float radius, Color color)
|
|
{
|
|
ImageDrawCircle(ref image, (int)position.X, (int)position.Y, (int)radius, color);
|
|
}
|
|
|
|
public static void Draw(this ref Image image, Rectangle rectangle, Color color)
|
|
{
|
|
ImageDrawRectangleRec(ref image, rectangle, color);
|
|
}
|
|
|
|
public static void Draw(this ref Image image, string text, Vector2 position, int fontSize, Color color)
|
|
{
|
|
ImageDrawText(ref image, text, (int)position.X, (int)position.Y, fontSize, color);
|
|
}
|
|
|
|
public static void Draw(this ref Image image, Font font, string text, Vector2 position, int fontSize, float spacing, Color color)
|
|
{
|
|
ImageDrawTextEx(ref image, font, text, position, fontSize, spacing, color);
|
|
}
|
|
|
|
public static unsafe void DrawCircleLines(this ref Image image, Vector2 position, float radius, Color color)
|
|
{
|
|
ImageDrawCircleLinesV(ref image, position, (int)radius, color);
|
|
}
|
|
|
|
public static void DrawTriangle(this ref Image image, Vector2 p1, Vector2 p2, Vector2 p3, Color color)
|
|
{
|
|
ImageDrawTriangle(ref image, p1, p2, p3, color);
|
|
}
|
|
|
|
public static void DrawTriangle(this ref Image image, Vector2 p1, Vector2 p2, Vector2 p3, Color c1, Color c2, Color c3)
|
|
{
|
|
ImageDrawTriangleEx(ref image, p1, p2, p3, c1, c2, c3);
|
|
}
|
|
|
|
public static void DrawLines(this ref Image image, Rectangle rectangle, Color color)
|
|
{
|
|
ImageDrawRectangleLines(ref image, rectangle, 1, color);
|
|
}
|
|
|
|
public static void DrawLines(this ref Image image, Rectangle rectangle, int thickness, Color color)
|
|
{
|
|
ImageDrawRectangleLines(ref image, rectangle, thickness, color);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Texture2D
|
|
|
|
public static void Load(this ref Texture2D texture, string fileName)
|
|
{
|
|
texture = LoadTexture(fileName);
|
|
}
|
|
|
|
public static void Load(this ref Texture2D texture, Image image)
|
|
{
|
|
texture = LoadTextureFromImage(image);
|
|
}
|
|
|
|
public static void Load(this ref Texture2D texture, string fileType, byte[] fileData)
|
|
{
|
|
Image img = LoadImageFromMemory(fileType, fileData);
|
|
texture.Load(img);
|
|
UnloadImage(img);
|
|
}
|
|
|
|
public static void Unload(this Texture2D texture)
|
|
{
|
|
UnloadTexture(texture);
|
|
}
|
|
|
|
public static void SetFilter(this Texture2D texture, TextureFilter filter)
|
|
{
|
|
SetTextureFilter(texture, filter);
|
|
}
|
|
|
|
public static void SetWrap(this Texture2D texture, TextureWrap wrap)
|
|
{
|
|
SetTextureWrap(texture, wrap);
|
|
}
|
|
|
|
public static void Update<T>(this Texture2D texture, T[] pixels) where T : unmanaged
|
|
{
|
|
UpdateTexture(texture, pixels);
|
|
}
|
|
|
|
public static Rectangle GetSourceRectangle(this Texture2D texture)
|
|
{
|
|
return new Rectangle(Vector2.Zero, texture.Width, texture.Height);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, int x, int y)
|
|
{
|
|
DrawTexture(texture, x, y, Color.White);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, int x, int y, Color color)
|
|
{
|
|
DrawTexture(texture, x, y, color);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, Vector2 position)
|
|
{
|
|
DrawTexture(texture, (int)position.X, (int)position.Y, Color.White);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, Vector2 position, Vector2 origin)
|
|
{
|
|
Vector2 size = texture.Dimensions;
|
|
Rectangle source = new Rectangle(Vector2.Zero, size);
|
|
Rectangle target = new Rectangle(position, size);
|
|
DrawTexturePro(texture, source, target, origin, 0, Color.White);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, Vector2 position, Vector2 origin, Color color)
|
|
{
|
|
Vector2 size = texture.Dimensions;
|
|
Rectangle source = new Rectangle(Vector2.Zero, size);
|
|
Rectangle target = new Rectangle(position, size);
|
|
DrawTexturePro(texture, source, target, origin, 0, color);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, Vector2 position, Color color)
|
|
{
|
|
DrawTexture(texture, (int)position.X, (int)position.Y, color);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, Vector2 position, float rotation, float scale)
|
|
{
|
|
DrawTextureEx(texture, position, rotation, scale, Color.White);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, Vector2 position, float rotation, float scale, Color color)
|
|
{
|
|
DrawTextureEx(texture, position, rotation, scale, color);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, Vector2 position, float rotation, Vector2 scale)
|
|
{
|
|
Draw(texture, position, rotation, scale, Color.White);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, Vector2 position, float rotation, Vector2 scale, Color color)
|
|
{
|
|
Vector2 size = new Vector2(texture.Width, texture.Height);
|
|
Rectangle source = new Rectangle(Vector2.Zero, size);
|
|
Rectangle target = new Rectangle(position, size);
|
|
target.Size *= scale;
|
|
DrawTexturePro(texture, source, target, Vector2.Zero, rotation, color);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, Rectangle source, Rectangle dest)
|
|
{
|
|
DrawTexturePro(texture, source, dest, Vector2.Zero, 0, Color.White);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin)
|
|
{
|
|
DrawTexturePro(texture, source, dest, origin, 0, Color.White);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation)
|
|
{
|
|
DrawTexturePro(texture, source, dest, origin, rotation, Color.White);
|
|
}
|
|
|
|
public static void Draw(this Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color color)
|
|
{
|
|
DrawTexturePro(texture, source, dest, origin, rotation, color);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Vector
|
|
|
|
public static void Normalize(this ref Vector2 vector)
|
|
{
|
|
vector = Raymath.Vector2Normalize(vector);
|
|
}
|
|
|
|
public static void Normalize(this ref Vector3 vector)
|
|
{
|
|
vector = Raymath.Vector3Normalize(vector);
|
|
}
|
|
|
|
public static void Add(this ref Vector2 vector, float value)
|
|
{
|
|
vector = Raymath.Vector2AddValue(vector, value);
|
|
}
|
|
|
|
public static void Add(this ref Vector3 vector, float value)
|
|
{
|
|
vector = Raymath.Vector3AddValue(vector, value);
|
|
}
|
|
|
|
public static void Add(this ref Vector2 vector, Vector2 value)
|
|
{
|
|
vector = Raymath.Vector2Add(vector, value);
|
|
}
|
|
|
|
public static void Add(this ref Vector3 vector, Vector3 value)
|
|
{
|
|
vector = Raymath.Vector3Add(vector, value);
|
|
}
|
|
|
|
public static float GetDistance(this Vector2 v1, Vector2 v2)
|
|
{
|
|
return Raymath.Vector2Distance(v1, v2);
|
|
}
|
|
|
|
public static float GetDistance(this Vector3 v1, Vector3 v2)
|
|
{
|
|
return Raymath.Vector3Distance(v1, v2);
|
|
}
|
|
|
|
public static Vector2 Lerp(this Vector2 v1, Vector2 v2, float amount)
|
|
{
|
|
return Raymath.Vector2Lerp(v1, v2, amount);
|
|
}
|
|
|
|
public static Vector3 Lerp(this Vector3 v1, Vector3 v2, float amount)
|
|
{
|
|
return Raymath.Vector3Lerp(v1, v2, amount);
|
|
}
|
|
|
|
#endregion
|
|
}
|