omfg
unknown
csharp
2 months ago
5.1 kB
5
Indexable
Camera _camera; int _lastBoundTexture; Target TextureTarget; Texture[] _textures; Dimension[] _textureDimensions; Shader _shader; void CertainUnclearedMethod(int indexOffset, int y, int x, int textureIndex, out IEnumerable<float> vertices, out IEnumerable<int> indices) { var textureDims = _textureDimensions[textureIndex]; float texWidth = textureDims.width; float texHeight = textureDims.height; GetVertices(y, x, texWidth, texHeight, out vertices); indices = new[] { indexOffset, indexOffset + 1, indexOffset + 2, indexOffset + 2, indexOffset + 1, indexOffset + 3 }; } void GetVertices(int y, int x, float texWidth, float texHeight, out IEnumerable<float> vertices) { const int someSize = 128; //magic numbers GTFO float cellWidth = .1f, //why is this here? cellHeight = .1f, startX = -1f + x * cellWidth, startY = .5f - y * cellHeight; float u0, v0; u0 = v0 = 0; float u1 = someSize / texWidth; float v1 = someSize / texHeight; vertices = Enumerable.Empty<float>(); //might be overkill vertices = AddVerticesBlock(vertices, startX, startY, u0, v0); vertices = AddVerticesBlock(vertices, startX + cellWidth, startY, u1, v0); vertices = AddVerticesBlock(vertices, startX, startY + cellHeight, u0, v1); vertices = AddVerticesBlock(vertices, startX + cellWidth, startY + cellHeight, u1, v1); } IEnumerable<float> AddVerticesBlock(IEnumerable<float> floats, float x, float y, float u, float v) => floats.Append(x) .Append(y) .Append(0) .Append(u) .Append(v); static void NotLastBoundTextureMethod(Target TextureTarget, Texture[] _textures, int textureIndex) { GL.BindTexture(TextureTarget.Texture2D, _textures[textureIndex]); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest); } void Render(int[,] grid) { IEnumerable<float> vertices = Enumerable.Empty<float>(); IEnumerable<int> indices = Enumerable.Empty<int>(); int xLimit, yLimit; _shader.Use(); _shader.SetUniform("view", _camera.View); xLimit = grid.GetLength(1); yLimit = grid.GetLength(0); int indexOffset = 0; for (int y = 0; y < yLimit; y++) { GetInformationFromX(y, xLimit, grid, ref indexOffset, ref vertices, ref indices); } Mesh mesh = new(vertices, indices); mesh.Draw(indices.Count()); mesh.Cleanup(); DrawCursor(); } void GetInformationFromX(int currentY, int limit, int[,] grid, ref int indexOffset, ref IEnumerable<float> vertices, ref IEnumerable<int> indices) { for (int x = 0; x < limit; x++) { int textureIndex = grid[currentY, x]; if (textureIndex != _lastBoundTexture) { _lastBoundTexture = textureIndex; NotLastBoundTextureMethod(TextureTarget, _textures, textureIndex); } CertainUnclearedMethod(indexOffset, currentY, x, textureIndex, out var verticesX, out var indicesX); vertices = vertices.Concat(verticesX); indices = indices.Concat(indicesX); indexOffset += 4; } } void DrawCursor() { throw new NotImplementedException(); } internal class Camera { public object View { get; internal set; } } internal class Dimension { internal float height; internal float width; } internal class GL { internal static void BindTexture(object texture2D, object value) { throw new NotImplementedException(); } internal static void TexParameter(object texture2D, object textureMinFilter, int nearest) { throw new NotImplementedException(); } } internal class Mesh { public Mesh(float[] floats, int[] ints) { } public Mesh(IEnumerable<float> vertices, IEnumerable<int> indices) { } internal void Cleanup() { throw new NotImplementedException(); } internal void Draw(int count) { throw new NotImplementedException(); } } internal class Target { public object Texture2D { get; internal set; } } internal class Texture { } internal class TextureMagFilter { public static object Nearest { get; internal set; } } internal class TextureMinFilter { public static object Nearest { get; internal set; } } internal class TextureParameterName { public static object TextureMagFilter { get; internal set; } public static object TextureMinFilter { get; internal set; } }
Editor is loading...
Leave a Comment