You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

62 lines
1.8 KiB

using System.Drawing;
using System.Numerics;
using gaemstone.ECS;
using Silk.NET.OpenGL;
namespace gaemstone.Client.Components;
[Module]
public class RenderingComponents
{
[Symbol, Component]
public readonly struct MeshHandle
{
public uint Handle { get; }
public int Count { get; }
public bool IsIndexed { get; }
public MeshHandle(uint handle, int count, bool indexed = true)
{ Handle = handle; Count = count; IsIndexed = indexed; }
}
[Symbol, Component]
public readonly struct TextureHandle
{
public TextureTarget Target { get; }
public uint Handle { get; }
public TextureHandle(TextureTarget target, uint handle)
=> (Target, Handle) = (target, handle);
}
[Symbol, Component]
public readonly struct TextureCoords4
{
public Vector2 TopLeft { get; }
public Vector2 TopRight { get; }
public Vector2 BottomLeft { get; }
public Vector2 BottomRight { get; }
public TextureCoords4(float x1, float y1, float x2, float y2)
{
TopLeft = new(x1, y1);
TopRight = new(x2, y1);
BottomLeft = new(x1, y2);
BottomRight = new(x2, y2);
}
public static TextureCoords4 FromIntCoords(Size textureSize, Point origin, Size size)
=> FromIntCoords(textureSize, origin.X, origin.Y, size.Width, size.Height);
public static TextureCoords4 FromIntCoords(Size textureSize, int x, int y, int width, int height) => new(
x / (float)textureSize.Width + 0.001f,
y / (float)textureSize.Height + 0.001f,
(x + width) / (float)textureSize.Width - 0.001f,
(y + height) / (float)textureSize.Height - 0.001f);
public static TextureCoords4 FromGrid(int numCellsX, int numCellsY, int cellX, int cellY) => new(
cellX / (float)numCellsX + 0.001f,
cellY / (float)numCellsY + 0.001f,
(cellX + 1) / (float)numCellsX - 0.001f,
(cellY + 1) / (float)numCellsY - 0.001f);
}
}