Watch
2
0
Fork
You've already forked raylib-cs
0

Extensions and explicit types

Added a new "RaylibExtensions" static class that gives overloaded extension methods to types so you can use them directly instead of calling the raylib class for everything.

Two new types: "Circle" and "Line"

All the "var" variables were changed to explicit types on the raylib class.

"MakeDirectory" overload, and string version of "GetApplicationDirectory" and "GetWorkingDirectory" methods.
This commit is contained in:
Matorio 2025-06-20 18:41:16 -05:00
commit d723905f5c
5 changed files with 751 additions and 77 deletions

View file

@ -0,0 +1,545 @@
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());
return new string(data);
}
#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 CheckColllision(this Rectangle rec, Circle circle)
{
return CheckCollisionCircleRec(circle.position, circle.radius, rec);
}
public static Rectangle GetCollisionRectangle(this Rectangle rectangle, Rectangle rectangle2)
{
return GetCollisionRec(rectangle, rectangle2);
}
#endregion
#region Circle
public static void Draw(this Circle circle)
{
DrawCircleV(circle.position, circle.radius, circle.color);
}
public static void Draw(this Circle circle, Color colorOverride)
{
DrawCircleV(circle.position, circle.radius, colorOverride);
}
public static void DrawLines(this Circle circle)
{
DrawCircleLinesV(circle.position, circle.radius, circle.color);
}
public static void DrawLines(this Circle circle, Color colorOverride)
{
DrawCircleLinesV(circle.position, circle.radius, colorOverride);
}
public static void DrawGradient(this Circle circle, Color innerColor, Color outerColor)
{
int x = (int)circle.position.X;
int y = (int)circle.position.Y;
DrawCircleGradient(x, y, circle.radius, innerColor, outerColor);
}
public static void DrawSector(this Circle circle, float startAngle, float endAngle)
{
circle.DrawSector(startAngle, endAngle, 36);
}
public static void DrawSector(this Circle circle, float startAngle, float endAngle, int segments)
{
circle.DrawSector(startAngle, endAngle, segments, circle.color);
}
public static void DrawSector(this Circle circle, float startAngle, float endAngle, int segments, Color colorOverride)
{
DrawCircleSector(circle.position, circle.radius, startAngle, endAngle, segments, colorOverride);
}
public static void DrawSectorLines(this Circle circle, float startAngle, float endAngle)
{
circle.DrawSectorLines(startAngle, endAngle, 36);
}
public static void DrawSectorLines(this Circle circle, float startAngle, float endAngle, int segments)
{
circle.DrawSectorLines(startAngle, endAngle, segments, circle.color);
}
public static void DrawSectorLines(this Circle circle, float startAngle, float endAngle, int segments, Color colorOverride)
{
DrawCircleSectorLines(circle.position, circle.radius, startAngle, endAngle, segments, colorOverride);
}
public static CBool CheckCollision(this Circle circle, Circle circle2)
{
return CheckCollisionCircles(circle.position, circle.radius, circle2.position, circle2.radius);
}
public static CBool CheckCollision(this Circle circle, Rectangle rec)
{
return CheckCollisionCircleRec(circle.position, circle.radius, rec);
}
public static CBool CheckCollision(this Circle circle, Vector2 point)
{
return CheckCollisionPointCircle(point, circle.position, circle.radius);
}
public static CBool CheckCollision(this Circle circle, Line line)
{
return CheckCollisionCircleLine(circle.position, circle.radius, line.pointA, line.pointB);
}
#endregion
#region Line
public static CBool CheckCollision(this Line line1, Line line2, ref Vector2 collisionPoint)
{
return CheckCollisionLines(line1.pointA, line1.pointB, line2.pointA, line2.pointB, ref collisionPoint);
}
public static CBool CheckCollision(this Line line, Circle circle)
{
return CheckCollisionCircleLine(circle.position, circle.radius, line.pointA, line.pointB);
}
public static CBool CheckCollision(this Line line, Vector2 point, int threshold)
{
return CheckCollisionPointLine(point, line.pointA, line.pointB, threshold);
}
public static void Draw(this Line line, Color color)
{
DrawLineV(line.pointA, line.pointB, color);
}
public static void DrawBezier(this Line line, Color color)
{
line.DrawBezier(1, color);
}
public static void DrawBezier(this Line line, float thick, Color color)
{
DrawLineBezier(line.pointA, line.pointB, thick, color);
}
public static void DrawBezierCubic(this Line line, Line control, Color color)
{
line.DrawBezierCubic(control, 1, color);
}
public static void DrawBezierCubic(this Line line, Line control, float thick, Color color)
{
DrawLineBezierCubic(line.pointA, line.pointB, control.pointA, control.pointB, thick, color);
}
public static void DrawBezierQuad(this Line line, Vector2 control, Color color)
{
line.DrawBezierQuad(control, 1, color);
}
public static void DrawBezierQuad(this Line line, Vector2 control, float thick, Color color)
{
DrawLineBezierQuad(line.pointA, line.pointB, control, thick, color);
}
public static float GetDistance(this Line line)
{
return Vector2.Distance(line.pointA, line.pointB);
}
public static void SwapPoints(this Line line)
{
Vector2 temp = line.pointA;
line.pointA = line.pointB;
line.pointB = temp;
}
public static void DrawLines(this IEnumerable<Line> lines, Color color)
{
Line[] linesArray = System.Linq.Enumerable.ToArray<Line>(lines);
Vector2[] points = new Vector2[linesArray.Length * 2];
for (int i = 0; i < linesArray.Length; i++)
{
Line l = linesArray[i];
points[i * 2] = l.pointA;
points[i * 2 + 1] = l.pointB;
}
DrawLineStrip(points, points.Length, color);
}
public static void DrawLines(this IEnumerable<Vector2> points, Color color)
{
Vector2[] pointArray = System.Linq.Enumerable.ToArray<Vector2>(points);
DrawLineStrip(pointArray, pointArray.Length, color);
}
#endregion
#region Image
public static unsafe Image* GetPointer(this ref Image image)
{
fixed (Image* ptr = &image)
{
return ptr;
}
}
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 Draw(this ref Image image, Line line, Color color)
{
ImageDrawLineV(ref image, line.pointA, line.pointB, color);
}
public static void Draw(this ref Image image, Line line, int thickness, Color color)
{
ImageDrawLineEx(ref image, line.pointA, line.pointB, thickness, color);
}
public static void Draw(this ref Image image, Circle circle)
{
ImageDrawCircle(ref image, (int)circle.X, (int)circle.Y, (int)circle.radius, circle.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 DrawLines(this ref Image image, Circle circle)
{
ImageDrawCircleLinesV(ref image, circle.position, (int)circle.radius, circle.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 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 Vector2 GetDimensions(this Texture2D texture)
{
return new Vector2(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.GetDimensions();
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.GetDimensions();
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
}