Files
Physics-Engine/PhysicsEngine/UI/DrawHelper.cs
2026-09-03 17:27:52 +02:00

58 lines
2.5 KiB
C#

using System;
using System.Numerics;
using Raylib_cs;
namespace PhysicsEngine
{
public static class DrawHelper
{
public static Color GetDarkerColor(Color color, float factor = 0.5f)
{
return new Color(
(byte)(color.R * factor),
(byte)(color.G * factor),
(byte)(color.B * factor),
color.A
);
}
public static void DrawRotatedBox(Vector2 position, Vector2 size, float rotationRadians, Color fillColor, float pixelsPerMeter = 100.0f, float outlineThickness = 3.0f)
{
Vector2 sizePixels = size * pixelsPerMeter;
Vector2 positionPixels = position * pixelsPerMeter;
float rotationDegrees = rotationRadians * (180.0f / MathF.PI);
Color outlineColor = GetDarkerColor(fillColor);
Vector2 outerSizePixels = sizePixels;
Vector2 outerOrigin = outerSizePixels * 0.5f;
Rectangle outerRec = new Rectangle(positionPixels.X, positionPixels.Y, outerSizePixels.X, outerSizePixels.Y);
Raylib.DrawRectanglePro(outerRec, outerOrigin, rotationDegrees, outlineColor);
Vector2 innerSizePixels = new Vector2(
MathF.Max(0, sizePixels.X - outlineThickness),
MathF.Max(0, sizePixels.Y - outlineThickness)
);
Vector2 innerOrigin = innerSizePixels * 0.5f;
Rectangle innerRec = new Rectangle(positionPixels.X, positionPixels.Y, innerSizePixels.X, innerSizePixels.Y);
Raylib.DrawRectanglePro(innerRec, innerOrigin, rotationDegrees, fillColor);
}
public static void DrawCircleBody(Vector2 position, float radius, float rotationRadians, Color fillColor, float pixelsPerMeter = 100.0f, float outlineThickness = 3.0f)
{
Vector2 positionPixels = position * pixelsPerMeter;
float radiusPixels = radius * pixelsPerMeter;
Color outlineColor = GetDarkerColor(fillColor);
Raylib.DrawCircleV(positionPixels, radiusPixels, outlineColor);
float innerRadius = MathF.Max(0, radiusPixels - outlineThickness);
Raylib.DrawCircleV(positionPixels, innerRadius, fillColor);
float cos = MathF.Cos(rotationRadians);
float sin = MathF.Sin(rotationRadians);
Vector2 edge = positionPixels + new Vector2(cos, sin) * innerRadius;
Raylib.DrawLineEx(positionPixels, edge, 2.0f, outlineColor);
}
}
}