From f3fc43fbf9103432ad3a9242c412ebb68cda0d90 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Fri, 19 Jun 2015 17:36:39 -0400 Subject: [PATCH 1/4] Implement biome coloring for grass/vegitation/etc Fixes #147 --- TrueCraft.Client/Content/terrain.png | Bin 64006 -> 63804 bytes TrueCraft.Client/Rendering/BlockRenderer.cs | 20 +++--- .../Rendering/Blocks/CraftingTableRenderer.cs | 4 +- .../Rendering/Blocks/GrassRenderer.cs | 12 +++- .../Rendering/Blocks/LadderRenderer.cs | 14 ++-- .../Rendering/Blocks/LeavesRenderer.cs | 8 +-- .../Rendering/Blocks/LogRenderer.cs | 8 +-- .../Rendering/Blocks/SnowRenderer.cs | 4 +- .../Rendering/Blocks/TNTRenderer.cs | 4 +- .../Rendering/Blocks/TorchRenderer.cs | 4 +- .../Rendering/Blocks/VegitationRenderer.cs | 12 ++-- TrueCraft.Client/Rendering/ChunkMesh.cs | 6 +- TrueCraft.Client/Rendering/ChunkRenderer.cs | 2 +- .../Rendering/FlatQuadRenderer.cs | 20 +++--- TrueCraft.Client/Rendering/Mesh.cs | 10 +-- .../VertexPositionNormalColorTexture.cs | 67 ++++++++++++++++++ TrueCraft.Client/TrueCraft.Client.csproj | 1 + TrueCraft.Client/TrueCraftGame.cs | 2 + 18 files changed, 138 insertions(+), 60 deletions(-) create mode 100644 TrueCraft.Client/Rendering/VertexPositionNormalColorTexture.cs diff --git a/TrueCraft.Client/Content/terrain.png b/TrueCraft.Client/Content/terrain.png index 1328d7241b5d51bb64005359c4549a7b99bc5082..d8d1dce8a61fd6385113f7a47645347a9e19e7aa 100644 GIT binary patch literal 63804 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

lQo?Oru*jZPjkHNxj3SCbksHoG3J_ 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 Y4^9;zvD4)&pa1{>07*qoM6N<$f}&XQn*aa+ literal 64006 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 textureMap, int indiciesOffset, out int[] indicies) { var texCoords = new Vector2(textureMap.Item1, textureMap.Item2); @@ -39,19 +39,19 @@ namespace TrueCraft.Client.Rendering }; for (int i = 0; i < texture.Length; i++) texture[i] *= new Vector2(16f / 256f); - return CreateUniformCube(offset, texture, indiciesOffset, out indicies); + return CreateUniformCube(offset, texture, indiciesOffset, out indicies, Color.White); } - protected VertexPositionNormalTexture[] CreateUniformCube(Vector3 offset, Vector2[] texture, int indiciesOffset, out int[] indicies) + protected VertexPositionNormalColorTexture[] CreateUniformCube(Vector3 offset, Vector2[] texture, int indiciesOffset, out int[] indicies, Color color) { indicies = new int[6 * 6]; - var verticies = new VertexPositionNormalTexture[4 * 6]; + var verticies = new VertexPositionNormalColorTexture[4 * 6]; int[] _indicies; int textureIndex = 0; for (int _side = 0; _side < 6; _side++) { var side = (CubeFace)_side; - var quad = CreateQuad(side, offset, texture, textureIndex % texture.Length, indiciesOffset, out _indicies); + var quad = CreateQuad(side, offset, texture, textureIndex % texture.Length, indiciesOffset, out _indicies, color); Array.Copy(quad, 0, verticies, _side * 4, 4); Array.Copy(_indicies, 0, indicies, _side * 6, 6); textureIndex += 4; @@ -59,18 +59,18 @@ namespace TrueCraft.Client.Rendering return verticies; } - protected static VertexPositionNormalTexture[] CreateQuad(CubeFace face, Vector3 offset, Vector2[] texture, int textureOffset, - int indiciesOffset, out int[] indicies) + protected static VertexPositionNormalColorTexture[] CreateQuad(CubeFace face, Vector3 offset, Vector2[] texture, int textureOffset, + int indiciesOffset, out int[] indicies, Color color) { indicies = new[] { 0, 1, 3, 1, 2, 3 }; for (int i = 0; i < indicies.Length; i++) indicies[i] += ((int)face * 4) + indiciesOffset; - var quad = new VertexPositionNormalTexture[4]; + var quad = new VertexPositionNormalColorTexture[4]; var unit = CubeMesh[(int)face]; var normal = CubeNormals[(int)face]; for (int i = 0; i < 4; i++) { - quad[i] = new VertexPositionNormalTexture(offset + unit[i], normal, texture[textureOffset + i]); + quad[i] = new VertexPositionNormalColorTexture(offset + unit[i], normal, color, texture[textureOffset + i]); } return quad; } diff --git a/TrueCraft.Client/Rendering/Blocks/CraftingTableRenderer.cs b/TrueCraft.Client/Rendering/Blocks/CraftingTableRenderer.cs index 2897898..a93311a 100644 --- a/TrueCraft.Client/Rendering/Blocks/CraftingTableRenderer.cs +++ b/TrueCraft.Client/Rendering/Blocks/CraftingTableRenderer.cs @@ -53,10 +53,10 @@ namespace TrueCraft.Client.Rendering.Blocks BottomTexture + Vector2.UnitX, }; - public override VertexPositionNormalTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { - return CreateUniformCube(offset, Texture, indiciesOffset, out indicies); + return CreateUniformCube(offset, Texture, indiciesOffset, out indicies, Color.White); } } } \ No newline at end of file diff --git a/TrueCraft.Client/Rendering/Blocks/GrassRenderer.cs b/TrueCraft.Client/Rendering/Blocks/GrassRenderer.cs index 72cfb9d..b4923e8 100644 --- a/TrueCraft.Client/Rendering/Blocks/GrassRenderer.cs +++ b/TrueCraft.Client/Rendering/Blocks/GrassRenderer.cs @@ -52,10 +52,18 @@ namespace TrueCraft.Client.Rendering.Blocks EndsTexture + Vector2.UnitX, }; - public override VertexPositionNormalTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + public static readonly Color BiomeColor = new Color(105, 169, 63); + + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { - return CreateUniformCube(offset, Texture, indiciesOffset, out indicies); + var cube = CreateUniformCube(offset, Texture, indiciesOffset, out indicies, Color.White); + // Apply biome colors to top of cube + for (int i = (int)(CubeFace.PositiveY) * 4; i < (int)(CubeFace.PositiveY) * 4 + 4; i++) + { + cube[i].Color = BiomeColor; // TODO: Take this from biome + } + return cube; } } } \ No newline at end of file diff --git a/TrueCraft.Client/Rendering/Blocks/LadderRenderer.cs b/TrueCraft.Client/Rendering/Blocks/LadderRenderer.cs index c8d2afd..0f9b069 100644 --- a/TrueCraft.Client/Rendering/Blocks/LadderRenderer.cs +++ b/TrueCraft.Client/Rendering/Blocks/LadderRenderer.cs @@ -24,37 +24,37 @@ namespace TrueCraft.Client.Rendering.Blocks TextureMap + Vector2.UnitX }; - public override VertexPositionNormalTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { - VertexPositionNormalTexture[] verticies; + VertexPositionNormalColorTexture[] verticies; Vector3 correction; int faceCorrection = 0; switch ((LadderBlock.LadderDirection)descriptor.Metadata) { case LadderBlock.LadderDirection.North: - verticies = CreateQuad(CubeFace.PositiveZ, offset, Texture, 0, indiciesOffset, out indicies); + verticies = CreateQuad(CubeFace.PositiveZ, offset, Texture, 0, indiciesOffset, out indicies, Color.White); correction = Vector3.Forward; faceCorrection = (int)CubeFace.PositiveZ * 4; break; case LadderBlock.LadderDirection.South: - verticies = CreateQuad(CubeFace.NegativeZ, offset, Texture, 0, indiciesOffset, out indicies); + verticies = CreateQuad(CubeFace.NegativeZ, offset, Texture, 0, indiciesOffset, out indicies, Color.White); correction = Vector3.Backward; faceCorrection = (int)CubeFace.NegativeZ * 4; break; case LadderBlock.LadderDirection.East: - verticies = CreateQuad(CubeFace.NegativeX, offset, Texture, 0, indiciesOffset, out indicies); + verticies = CreateQuad(CubeFace.NegativeX, offset, Texture, 0, indiciesOffset, out indicies, Color.White); correction = Vector3.Right; faceCorrection = (int)CubeFace.NegativeX * 4; break; case LadderBlock.LadderDirection.West: - verticies = CreateQuad(CubeFace.PositiveX, offset, Texture, 0, indiciesOffset, out indicies); + verticies = CreateQuad(CubeFace.PositiveX, offset, Texture, 0, indiciesOffset, out indicies, Color.White); correction = Vector3.Left; faceCorrection = (int)CubeFace.PositiveX * 4; break; default: // Should never happen - verticies = CreateUniformCube(offset, Texture, indiciesOffset, out indicies); + verticies = CreateUniformCube(offset, Texture, indiciesOffset, out indicies, Color.White); correction = Vector3.Zero; break; } diff --git a/TrueCraft.Client/Rendering/Blocks/LeavesRenderer.cs b/TrueCraft.Client/Rendering/Blocks/LeavesRenderer.cs index 6236018..27dca06 100644 --- a/TrueCraft.Client/Rendering/Blocks/LeavesRenderer.cs +++ b/TrueCraft.Client/Rendering/Blocks/LeavesRenderer.cs @@ -35,18 +35,18 @@ namespace TrueCraft.Client.Rendering.Blocks SpruceTexture + Vector2.UnitX }; - public override VertexPositionNormalTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { switch ((WoodBlock.WoodType)descriptor.Metadata) { case WoodBlock.WoodType.Spruce: - return CreateUniformCube(offset, SpruceTextures, indiciesOffset, out indicies); + return CreateUniformCube(offset, SpruceTextures, indiciesOffset, out indicies, GrassRenderer.BiomeColor); case WoodBlock.WoodType.Birch: - return CreateUniformCube(offset, BaseTextures, indiciesOffset, out indicies); // NOTE: Minecraft adjusts the hue a bit + return CreateUniformCube(offset, BaseTextures, indiciesOffset, out indicies, GrassRenderer.BiomeColor); case WoodBlock.WoodType.Oak: default: - return CreateUniformCube(offset, BaseTextures, indiciesOffset, out indicies); + return CreateUniformCube(offset, BaseTextures, indiciesOffset, out indicies, GrassRenderer.BiomeColor); } } } diff --git a/TrueCraft.Client/Rendering/Blocks/LogRenderer.cs b/TrueCraft.Client/Rendering/Blocks/LogRenderer.cs index 3a8edbf..96ac09c 100644 --- a/TrueCraft.Client/Rendering/Blocks/LogRenderer.cs +++ b/TrueCraft.Client/Rendering/Blocks/LogRenderer.cs @@ -123,18 +123,18 @@ namespace TrueCraft.Client.Rendering.Blocks BaseEndsTexture + Vector2.UnitX, }; - public override VertexPositionNormalTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { switch ((WoodBlock.WoodType)descriptor.Metadata) { case WoodBlock.WoodType.Spruce: - return CreateUniformCube(offset, SpruceTexture, indiciesOffset, out indicies); + return CreateUniformCube(offset, SpruceTexture, indiciesOffset, out indicies, Color.White); case WoodBlock.WoodType.Birch: - return CreateUniformCube(offset, BirchTexture, indiciesOffset, out indicies); + return CreateUniformCube(offset, BirchTexture, indiciesOffset, out indicies, Color.White); case WoodBlock.WoodType.Oak: default: - return CreateUniformCube(offset, BaseTexture, indiciesOffset, out indicies); + return CreateUniformCube(offset, BaseTexture, indiciesOffset, out indicies, Color.White); } } } diff --git a/TrueCraft.Client/Rendering/Blocks/SnowRenderer.cs b/TrueCraft.Client/Rendering/Blocks/SnowRenderer.cs index e159ed9..b90a19f 100644 --- a/TrueCraft.Client/Rendering/Blocks/SnowRenderer.cs +++ b/TrueCraft.Client/Rendering/Blocks/SnowRenderer.cs @@ -24,11 +24,11 @@ namespace TrueCraft.Client.Rendering.Blocks TextureMap + Vector2.UnitX, }; - public override VertexPositionNormalTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { var overhead = new Vector3(0.5f, 0.5f, 0.5f); - var cube = CreateUniformCube(overhead, Texture, indiciesOffset, out indicies); + var cube = CreateUniformCube(overhead, Texture, indiciesOffset, out indicies, Color.White); var heightMultiplier = new Vector3(1, ((descriptor.Metadata + 1) / 16f), 1); for (int i = 0; i < cube.Length; i++) { diff --git a/TrueCraft.Client/Rendering/Blocks/TNTRenderer.cs b/TrueCraft.Client/Rendering/Blocks/TNTRenderer.cs index 50648e5..ea07cf6 100644 --- a/TrueCraft.Client/Rendering/Blocks/TNTRenderer.cs +++ b/TrueCraft.Client/Rendering/Blocks/TNTRenderer.cs @@ -52,10 +52,10 @@ namespace TrueCraft.Client.Rendering.Blocks BottomTexture + Vector2.UnitX, }; - public override VertexPositionNormalTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { - return CreateUniformCube(offset, Texture, indiciesOffset, out indicies); + return CreateUniformCube(offset, Texture, indiciesOffset, out indicies, Color.White); } } } \ No newline at end of file diff --git a/TrueCraft.Client/Rendering/Blocks/TorchRenderer.cs b/TrueCraft.Client/Rendering/Blocks/TorchRenderer.cs index 9fbcf93..31c4f06 100644 --- a/TrueCraft.Client/Rendering/Blocks/TorchRenderer.cs +++ b/TrueCraft.Client/Rendering/Blocks/TorchRenderer.cs @@ -50,12 +50,12 @@ namespace TrueCraft.Client.Rendering.Blocks TextureMap + new Vector2(2, 2), }; - public override VertexPositionNormalTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { var overhead = new Vector3(0.5f, 0.5f, 0.5f); var centerized = new Vector3(7f / 16f, 0, 7f / 16f); - var cube = CreateUniformCube(overhead, Texture, indiciesOffset, out indicies); + var cube = CreateUniformCube(overhead, Texture, indiciesOffset, out indicies, Color.White); for (int i = 0; i < cube.Length; i++) { cube[i].Position.X *= 1f / 8f; diff --git a/TrueCraft.Client/Rendering/Blocks/VegitationRenderer.cs b/TrueCraft.Client/Rendering/Blocks/VegitationRenderer.cs index be51f87..b731ac9 100644 --- a/TrueCraft.Client/Rendering/Blocks/VegitationRenderer.cs +++ b/TrueCraft.Client/Rendering/Blocks/VegitationRenderer.cs @@ -71,24 +71,24 @@ namespace TrueCraft.Client.Rendering.Blocks } } - public override VertexPositionNormalTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { if (descriptor.ID == RoseBlock.BlockID) - return RenderQuads(descriptor, offset, RoseTexture, indiciesOffset, out indicies); + return RenderQuads(descriptor, offset, RoseTexture, indiciesOffset, out indicies, Color.White); else if (descriptor.ID == DandelionBlock.BlockID) - return RenderQuads(descriptor, offset, DandelionTexture, indiciesOffset, out indicies); + return RenderQuads(descriptor, offset, DandelionTexture, indiciesOffset, out indicies, Color.White); else { switch ((TallGrassBlock.TallGrassType)descriptor.Metadata) { case TallGrassBlock.TallGrassType.DeadBush: - return RenderQuads(descriptor, offset, DeadBushTexture, indiciesOffset, out indicies); + return RenderQuads(descriptor, offset, DeadBushTexture, indiciesOffset, out indicies, Color.White); case TallGrassBlock.TallGrassType.Fern: - return RenderQuads(descriptor, offset, FernTexture, indiciesOffset, out indicies); + return RenderQuads(descriptor, offset, FernTexture, indiciesOffset, out indicies, GrassRenderer.BiomeColor); case TallGrassBlock.TallGrassType.TallGrass: default: - return RenderQuads(descriptor, offset, TallGrassTexture, indiciesOffset, out indicies); + return RenderQuads(descriptor, offset, TallGrassTexture, indiciesOffset, out indicies, GrassRenderer.BiomeColor); } } } diff --git a/TrueCraft.Client/Rendering/ChunkMesh.cs b/TrueCraft.Client/Rendering/ChunkMesh.cs index 05080f7..3930ca3 100644 --- a/TrueCraft.Client/Rendering/ChunkMesh.cs +++ b/TrueCraft.Client/Rendering/ChunkMesh.cs @@ -22,7 +22,7 @@ namespace TrueCraft.Client.Rendering /// /// /// - public ChunkMesh(ReadOnlyChunk chunk, TrueCraftGame game, VertexPositionNormalTexture[] vertices, int[] indices) + public ChunkMesh(ReadOnlyChunk chunk, TrueCraftGame game, VertexPositionNormalColorTexture[] vertices, int[] indices) : base(game, 1, true) { Chunk = chunk; @@ -38,7 +38,7 @@ namespace TrueCraft.Client.Rendering /// /// /// - public ChunkMesh(ReadOnlyChunk chunk, TrueCraftGame game, VertexPositionNormalTexture[] vertices, int[] opaqueIndices, int[] transparentIndices) + public ChunkMesh(ReadOnlyChunk chunk, TrueCraftGame game, VertexPositionNormalColorTexture[] vertices, int[] opaqueIndices, int[] transparentIndices) : base(game, 2, true) { Chunk = chunk; @@ -52,7 +52,7 @@ namespace TrueCraft.Client.Rendering /// /// /// - protected override BoundingBox RecalculateBounds(VertexPositionNormalTexture[] vertices) + protected override BoundingBox RecalculateBounds(VertexPositionNormalColorTexture[] vertices) { return new BoundingBox( new Vector3(Chunk.X * TrueCraft.Core.World.Chunk.Width, 0, Chunk.Z * TrueCraft.Core.World.Chunk.Depth), diff --git a/TrueCraft.Client/Rendering/ChunkRenderer.cs b/TrueCraft.Client/Rendering/ChunkRenderer.cs index 1a82dc8..f6174ca 100644 --- a/TrueCraft.Client/Rendering/ChunkRenderer.cs +++ b/TrueCraft.Client/Rendering/ChunkRenderer.cs @@ -73,7 +73,7 @@ namespace TrueCraft.Client.Rendering private class RenderState { - public readonly List Verticies = new List(); + public readonly List Verticies = new List(); public readonly List OpaqueIndicies = new List(); public readonly List TransparentIndicies = new List(); public readonly HashSet DrawableCoordinates = new HashSet(); diff --git a/TrueCraft.Client/Rendering/FlatQuadRenderer.cs b/TrueCraft.Client/Rendering/FlatQuadRenderer.cs index dc321c1..1fffa19 100644 --- a/TrueCraft.Client/Rendering/FlatQuadRenderer.cs +++ b/TrueCraft.Client/Rendering/FlatQuadRenderer.cs @@ -23,22 +23,22 @@ namespace TrueCraft.Client.Rendering Texture[i] *= new Vector2(16f / 256f); } - public override VertexPositionNormalTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { - return RenderQuads(descriptor, offset, Texture, indiciesOffset, out indicies); + return RenderQuads(descriptor, offset, Texture, indiciesOffset, out indicies, Color.White); } - protected VertexPositionNormalTexture[] RenderQuads(BlockDescriptor descriptor, Vector3 offset, - Vector2[] textureMap, int indiciesOffset, out int[] indicies) + protected VertexPositionNormalColorTexture[] RenderQuads(BlockDescriptor descriptor, Vector3 offset, + Vector2[] textureMap, int indiciesOffset, out int[] indicies, Color color) { indicies = new int[6 * 4]; - var verticies = new VertexPositionNormalTexture[4 * 4]; + var verticies = new VertexPositionNormalColorTexture[4 * 4]; int[] _indicies; int textureIndex = 0; for (int side = 0; side < 4; side++) { - var quad = CreateAngledQuad(side, offset, textureMap, textureIndex % textureMap.Length, indiciesOffset, out _indicies); + var quad = CreateAngledQuad(side, offset, textureMap, textureIndex % textureMap.Length, indiciesOffset, out _indicies, color); Array.Copy(quad, 0, verticies, side * 4, 4); Array.Copy(_indicies, 0, indicies, side * 6, 6); textureIndex += 4; @@ -46,18 +46,18 @@ namespace TrueCraft.Client.Rendering return verticies; } - protected static VertexPositionNormalTexture[] CreateAngledQuad(int face, Vector3 offset, Vector2[] texture, int textureOffset, - int indiciesOffset, out int[] indicies) + protected static VertexPositionNormalColorTexture[] CreateAngledQuad(int face, Vector3 offset, Vector2[] texture, int textureOffset, + int indiciesOffset, out int[] indicies, Color color) { indicies = new[] { 0, 1, 3, 1, 2, 3 }; for (int i = 0; i < indicies.Length; i++) indicies[i] += (face * 4) + indiciesOffset; - var quad = new VertexPositionNormalTexture[4]; + var quad = new VertexPositionNormalColorTexture[4]; var unit = QuadMesh[face]; var normal = CubeNormals[face]; for (int i = 0; i < 4; i++) { - quad[i] = new VertexPositionNormalTexture(offset + unit[i], normal, texture[textureOffset + i]); + quad[i] = new VertexPositionNormalColorTexture(offset + unit[i], normal, color, texture[textureOffset + i]); } return quad; } diff --git a/TrueCraft.Client/Rendering/Mesh.cs b/TrueCraft.Client/Rendering/Mesh.cs index 11a30a3..c4695df 100644 --- a/TrueCraft.Client/Rendering/Mesh.cs +++ b/TrueCraft.Client/Rendering/Mesh.cs @@ -29,7 +29,7 @@ namespace TrueCraft.Client.Rendering ///

/// Gets or sets the vertices in this mesh. /// - public VertexPositionNormalTexture[] Vertices + public VertexPositionNormalColorTexture[] Vertices { set { @@ -38,7 +38,7 @@ namespace TrueCraft.Client.Rendering _game.PendingMainThreadActions.Add(() => { - _vertices = new VertexBuffer(_graphicsDevice, VertexPositionNormalTexture.VertexDeclaration, + _vertices = new VertexBuffer(_graphicsDevice, VertexPositionNormalColorTexture.VertexDeclaration, (value.Length + 1), BufferUsage.WriteOnly); _vertices.SetData(value); }); @@ -82,7 +82,7 @@ namespace TrueCraft.Client.Rendering /// The vertices in the mesh. /// The number of submeshes in the mesh. /// Whether the mesh should recalculate its bounding box when changed. - public Mesh(TrueCraftGame game, VertexPositionNormalTexture[] vertices, int submeshes = 1, bool recalculateBounds = true) + public Mesh(TrueCraftGame game, VertexPositionNormalColorTexture[] vertices, int submeshes = 1, bool recalculateBounds = true) : this(game, submeshes, recalculateBounds) { Vertices = vertices; @@ -95,7 +95,7 @@ namespace TrueCraft.Client.Rendering /// The vertices in the mesh. /// The first (and only) submesh in the mesh. /// Whether the mesh should recalculate its bounding box when changed. - public Mesh(TrueCraftGame game, VertexPositionNormalTexture[] vertices, int[] indices, bool recalculateBounds = true) + public Mesh(TrueCraftGame game, VertexPositionNormalColorTexture[] vertices, int[] indices, bool recalculateBounds = true) : this(game, 1, recalculateBounds) { Vertices = vertices; @@ -198,7 +198,7 @@ namespace TrueCraft.Client.Rendering /// /// The vertices in this mesh. /// - protected virtual BoundingBox RecalculateBounds(VertexPositionNormalTexture[] vertices) + protected virtual BoundingBox RecalculateBounds(VertexPositionNormalColorTexture[] vertices) { return new BoundingBox( vertices.Select(v => v.Position).OrderBy(v => v.Length()).First(), diff --git a/TrueCraft.Client/Rendering/VertexPositionNormalColorTexture.cs b/TrueCraft.Client/Rendering/VertexPositionNormalColorTexture.cs new file mode 100644 index 0000000..2c953f7 --- /dev/null +++ b/TrueCraft.Client/Rendering/VertexPositionNormalColorTexture.cs @@ -0,0 +1,67 @@ +using System; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework; +using System.Runtime.InteropServices; + +namespace TrueCraft.Client.Rendering +{ + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct VertexPositionNormalColorTexture : IVertexType + { + public Vector3 Position, Normal; + public Color Color; + public Vector2 Texture; + + public static readonly VertexDeclaration VertexDeclaration = new VertexDeclaration( + new[] + { + new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), + new VertexElement(12, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0), + new VertexElement(24, VertexElementFormat.Color, VertexElementUsage.Color, 0), + new VertexElement(28, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0) + } + ); + + VertexDeclaration IVertexType.VertexDeclaration + { + get { return VertexDeclaration; } + } + + public VertexPositionNormalColorTexture(Vector3 position, Vector3 normal, Color color, Vector2 texture) + { + Position = position; + Normal = normal; + Color = color; + Texture = texture; + } + + public static bool operator ==(VertexPositionNormalColorTexture value1, VertexPositionNormalColorTexture value2) + { + return value1.Equals(value2); + } + + public static bool operator !=(VertexPositionNormalColorTexture value1, VertexPositionNormalColorTexture value2) + { + return !value1.Equals(value2); + } + + public bool Equals(VertexPositionNormalColorTexture other) + { + return Position == other.Position && Normal == other.Normal && + Color == other.Color && Texture == other.Texture; + } + + public override bool Equals(object obj) + { + if (obj == null || GetType() != obj.GetType()) return false; + + return Equals((VertexPositionNormalColorTexture)obj); + } + + public override int GetHashCode() + { + return Position.GetHashCode() ^ Normal.GetHashCode() ^ + Color.GetHashCode() ^ Texture.GetHashCode(); + } + } +} \ No newline at end of file diff --git a/TrueCraft.Client/TrueCraft.Client.csproj b/TrueCraft.Client/TrueCraft.Client.csproj index 8d6402a..da9b770 100644 --- a/TrueCraft.Client/TrueCraft.Client.csproj +++ b/TrueCraft.Client/TrueCraft.Client.csproj @@ -100,6 +100,7 @@ + diff --git a/TrueCraft.Client/TrueCraftGame.cs b/TrueCraft.Client/TrueCraftGame.cs index bbb2962..adcc4de 100644 --- a/TrueCraft.Client/TrueCraftGame.cs +++ b/TrueCraft.Client/TrueCraftGame.cs @@ -148,11 +148,13 @@ namespace TrueCraft.Client OpaqueEffect.FogStart = 512f; OpaqueEffect.FogEnd = 1000f; OpaqueEffect.FogColor = Color.CornflowerBlue.ToVector3(); + OpaqueEffect.VertexColorEnabled = true; TransparentEffect = new AlphaTestEffect(GraphicsDevice); TransparentEffect.AlphaFunction = CompareFunction.Greater; TransparentEffect.ReferenceAlpha = 127; TransparentEffect.Texture = TextureMapper.GetTexture("terrain.png"); + TransparentEffect.VertexColorEnabled = true; base.LoadContent(); } -- 2.47.2 From 939a6dc79c7786498e6f5d69b3bcc6f726362c50 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sat, 20 Jun 2015 11:01:07 -0400 Subject: [PATCH 2/4] Render snow variation of grass blocks This also increases the average rainfall everywhere so that fucking deserts are less common --- TrueCraft.API/Logic/BlockDescriptor.cs | 4 ++ .../Rendering/Blocks/GrassRenderer.cs | 50 ++++++++++++++++++- TrueCraft.Client/Rendering/ChunkRenderer.cs | 3 +- TrueCraft.Client/TrueCraft.Client.csproj | 1 + TrueCraft.Core/Logic/Blocks/SnowBlock.cs | 4 +- TrueCraft.Core/World/BiomeMap.cs | 2 +- 6 files changed, 59 insertions(+), 5 deletions(-) diff --git a/TrueCraft.API/Logic/BlockDescriptor.cs b/TrueCraft.API/Logic/BlockDescriptor.cs index 5d6db36..bac09a7 100644 --- a/TrueCraft.API/Logic/BlockDescriptor.cs +++ b/TrueCraft.API/Logic/BlockDescriptor.cs @@ -1,4 +1,5 @@ using System; +using TrueCraft.API.World; namespace TrueCraft.API.Logic { @@ -8,6 +9,9 @@ namespace TrueCraft.API.Logic public byte Metadata; public byte BlockLight; public byte SkyLight; + // Optional public Coordinates3D Coordinates; + // Optional + public IChunk Chunk; } } \ No newline at end of file diff --git a/TrueCraft.Client/Rendering/Blocks/GrassRenderer.cs b/TrueCraft.Client/Rendering/Blocks/GrassRenderer.cs index b4923e8..f16572d 100644 --- a/TrueCraft.Client/Rendering/Blocks/GrassRenderer.cs +++ b/TrueCraft.Client/Rendering/Blocks/GrassRenderer.cs @@ -3,6 +3,8 @@ using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework; using TrueCraft.Core.Logic.Blocks; using TrueCraft.API.Logic; +using TrueCraft.Core.World; +using TrueCraft.API; namespace TrueCraft.Client.Rendering.Blocks { @@ -13,11 +15,14 @@ namespace TrueCraft.Client.Rendering.Blocks BlockRenderer.RegisterRenderer(GrassBlock.BlockID, new GrassRenderer()); for (int i = 0; i < Texture.Length; i++) Texture[i] *= new Vector2(16f / 256f); + for (int i = 0; i < Texture.Length; i++) + SnowTexture[i] *= new Vector2(16f / 256f); } private static Vector2 TextureMap = new Vector2(0, 0); private static Vector2 EndsTexture = new Vector2(2, 0); private static Vector2 SideTexture = new Vector2(3, 0); + private static Vector2 SideTextureSnow = new Vector2(4, 4); private static Vector2[] Texture = { // Positive Z @@ -51,13 +56,54 @@ namespace TrueCraft.Client.Rendering.Blocks EndsTexture, EndsTexture + Vector2.UnitX, }; + private static Vector2[] SnowTexture = + { + // Positive Z + SideTextureSnow + Vector2.UnitX + Vector2.UnitY, + SideTextureSnow + Vector2.UnitY, + SideTextureSnow, + SideTextureSnow + Vector2.UnitX, + // Negative Z + SideTextureSnow + Vector2.UnitX + Vector2.UnitY, + SideTextureSnow + Vector2.UnitY, + SideTextureSnow, + SideTextureSnow + Vector2.UnitX, + // Positive X + SideTextureSnow + Vector2.UnitX + Vector2.UnitY, + SideTextureSnow + Vector2.UnitY, + SideTextureSnow, + SideTextureSnow + Vector2.UnitX, + // Negative X + SideTextureSnow + Vector2.UnitX + Vector2.UnitY, + SideTextureSnow + Vector2.UnitY, + SideTextureSnow, + SideTextureSnow + Vector2.UnitX, + // Positive Y + TextureMap + Vector2.UnitX + Vector2.UnitY, + TextureMap + Vector2.UnitY, + TextureMap, + TextureMap + Vector2.UnitX, + // Negative Y + EndsTexture + Vector2.UnitX + Vector2.UnitY, + EndsTexture + Vector2.UnitY, + EndsTexture, + EndsTexture + Vector2.UnitX, + }; public static readonly Color BiomeColor = new Color(105, 169, 63); - public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Microsoft.Xna.Framework.Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { - var cube = CreateUniformCube(offset, Texture, indiciesOffset, out indicies, Color.White); + var texture = Texture; + if (descriptor.Coordinates.Y < World.Height) + { + if (descriptor.Chunk.GetBlockID(descriptor.Coordinates + Coordinates3D.Up) == SnowfallBlock.BlockID) + { + texture = SnowTexture; + } + } + var cube = CreateUniformCube(offset, texture, indiciesOffset, out indicies, Color.White); // Apply biome colors to top of cube for (int i = (int)(CubeFace.PositiveY) * 4; i < (int)(CubeFace.PositiveY) * 4 + 4; i++) { diff --git a/TrueCraft.Client/Rendering/ChunkRenderer.cs b/TrueCraft.Client/Rendering/ChunkRenderer.cs index f6174ca..a59352c 100644 --- a/TrueCraft.Client/Rendering/ChunkRenderer.cs +++ b/TrueCraft.Client/Rendering/ChunkRenderer.cs @@ -131,7 +131,8 @@ namespace TrueCraft.Client.Rendering Metadata = chunk.GetMetadata(coords), BlockLight = chunk.GetBlockLight(coords), SkyLight = chunk.GetSkyLight(coords), - Coordinates = coords + Coordinates = coords, + Chunk = chunk.Chunk }; var provider = BlockRepository.GetBlockProvider(descriptor.ID); if (provider.RenderOpaque) diff --git a/TrueCraft.Client/TrueCraft.Client.csproj b/TrueCraft.Client/TrueCraft.Client.csproj index da9b770..cb19bac 100644 --- a/TrueCraft.Client/TrueCraft.Client.csproj +++ b/TrueCraft.Client/TrueCraft.Client.csproj @@ -101,6 +101,7 @@ + diff --git a/TrueCraft.Core/Logic/Blocks/SnowBlock.cs b/TrueCraft.Core/Logic/Blocks/SnowBlock.cs index 52ac989..f82b7fd 100644 --- a/TrueCraft.Core/Logic/Blocks/SnowBlock.cs +++ b/TrueCraft.Core/Logic/Blocks/SnowBlock.cs @@ -71,6 +71,8 @@ namespace TrueCraft.Core.Logic.Blocks public override string DisplayName { get { return "Snow"; } } + public override TrueCraft.API.BoundingBox? BoundingBox { get { return null; } } + public override Tuple GetTextureMap(byte metadata) { return new Tuple(2, 4); @@ -81,4 +83,4 @@ namespace TrueCraft.Core.Logic.Blocks return new[] { new ItemStack(SnowballItem.ItemID) }; } } -} \ No newline at end of file +} diff --git a/TrueCraft.Core/World/BiomeMap.cs b/TrueCraft.Core/World/BiomeMap.cs index 7ebebe2..4894f54 100644 --- a/TrueCraft.Core/World/BiomeMap.cs +++ b/TrueCraft.Core/World/BiomeMap.cs @@ -24,7 +24,7 @@ namespace TrueCraft.Core.World TempNoise.Octaves = 2; TempNoise.Lacunarity = 1.3; RainNoise.Frequency = 0.03; - RainNoise.Octaves = 2; + RainNoise.Octaves = 3; RainNoise.Amplitude = 5; RainNoise.Lacunarity = 1.7; TempNoise.Seed = seed; -- 2.47.2 From 86979947372063c7459ee65bc70057bb86b59c49 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sat, 20 Jun 2015 13:56:57 -0400 Subject: [PATCH 3/4] Add wheat and farmland renderers --- .../Rendering/Blocks/FarmlandRenderer.cs | 44 ++++++++ .../Rendering/Blocks/WaterRenderer.cs | 46 ++++++++ .../Rendering/Blocks/WheatRenderer.cs | 105 ++++++++++++++++++ TrueCraft.Client/TrueCraft.Client.csproj | 2 + TrueCraft.Client/TrueCraftGame.cs | 2 +- TrueCraft.Core/Logic/Blocks/CropsBlock.cs | 4 +- TrueCraft/Program.cs | 2 +- 7 files changed, 202 insertions(+), 3 deletions(-) create mode 100644 TrueCraft.Client/Rendering/Blocks/FarmlandRenderer.cs create mode 100644 TrueCraft.Client/Rendering/Blocks/WaterRenderer.cs create mode 100644 TrueCraft.Client/Rendering/Blocks/WheatRenderer.cs diff --git a/TrueCraft.Client/Rendering/Blocks/FarmlandRenderer.cs b/TrueCraft.Client/Rendering/Blocks/FarmlandRenderer.cs new file mode 100644 index 0000000..9165a22 --- /dev/null +++ b/TrueCraft.Client/Rendering/Blocks/FarmlandRenderer.cs @@ -0,0 +1,44 @@ +using System; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework; +using TrueCraft.Core.Logic.Blocks; +using TrueCraft.API.Logic; + +namespace TrueCraft.Client.Rendering.Blocks +{ + public class FarmlandRenderer : BlockRenderer + { + static FarmlandRenderer() + { + BlockRenderer.RegisterRenderer(FarmlandBlock.BlockID, new FarmlandRenderer()); + for (int i = 0; i < Texture.Length; i++) + Texture[i] *= new Vector2(16f / 256f); + } + + private static Vector2 TextureMap = new Vector2(7, 5); + private static Vector2[] Texture = + { + TextureMap + Vector2.UnitX + Vector2.UnitY, + TextureMap + Vector2.UnitY, + TextureMap, + TextureMap + Vector2.UnitX, + }; + + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + Tuple textureMap, int indiciesOffset, out int[] indicies) + { + var overhead = new Vector3(0.5f, 0.5f, 0.5f); + var cube = CreateUniformCube(overhead, Texture, indiciesOffset, out indicies, Color.White); + for (int i = 0; i < cube.Length; i++) + { + if (cube[i].Position.Y > 0) + { + cube[i].Position.Y *= 15f / 16f; + } + cube[i].Position += offset; + cube[i].Position -= overhead; + } + return cube; + } + } +} \ No newline at end of file diff --git a/TrueCraft.Client/Rendering/Blocks/WaterRenderer.cs b/TrueCraft.Client/Rendering/Blocks/WaterRenderer.cs new file mode 100644 index 0000000..92fd4d5 --- /dev/null +++ b/TrueCraft.Client/Rendering/Blocks/WaterRenderer.cs @@ -0,0 +1,46 @@ +using System; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework; +using TrueCraft.Core.Logic.Blocks; +using TrueCraft.API.Logic; + +namespace TrueCraft.Client.Rendering.Blocks +{ + public class WaterRenderer : BlockRenderer + { + static WaterRenderer() + { + BlockRenderer.RegisterRenderer(WaterBlock.BlockID, new WaterRenderer()); + BlockRenderer.RegisterRenderer(StationaryWaterBlock.BlockID, new WaterRenderer()); + for (int i = 0; i < Texture.Length; i++) + Texture[i] *= new Vector2(16f / 256f); + } + + private static Vector2 TextureMap = new Vector2(13, 12); + private static Vector2[] Texture = + { + TextureMap + Vector2.UnitX + Vector2.UnitY, + TextureMap + Vector2.UnitY, + TextureMap, + TextureMap + Vector2.UnitX, + }; + + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + Tuple textureMap, int indiciesOffset, out int[] indicies) + { + // TODO: Rest of water rendering (shape and level and so on) + var overhead = new Vector3(0.5f, 0.5f, 0.5f); + var cube = CreateUniformCube(overhead, Texture, indiciesOffset, out indicies, Color.White); + for (int i = 0; i < cube.Length; i++) + { + if (cube[i].Position.Y > 0) + { + cube[i].Position.Y *= 15f / 16f; + } + cube[i].Position += offset; + cube[i].Position -= overhead; + } + return cube; + } + } +} \ No newline at end of file diff --git a/TrueCraft.Client/Rendering/Blocks/WheatRenderer.cs b/TrueCraft.Client/Rendering/Blocks/WheatRenderer.cs new file mode 100644 index 0000000..c3b7bd8 --- /dev/null +++ b/TrueCraft.Client/Rendering/Blocks/WheatRenderer.cs @@ -0,0 +1,105 @@ +using System; +using TrueCraft.API.Logic; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework; +using TrueCraft.Core.Logic.Blocks; + +namespace TrueCraft.Client.Rendering +{ + public class WheatRenderer : BlockRenderer + { + static WheatRenderer() + { + BlockRenderer.RegisterRenderer(CropsBlock.BlockID, new WheatRenderer()); + } + + private Vector2[][] Textures; + + public WheatRenderer() + { + var textureMap = new Vector2(8, 5); + Textures = new Vector2[8][]; + for (int i = 0; i < 8; i++) + { + Textures[i] = new[] + { + textureMap + Vector2.UnitX + Vector2.UnitY, + textureMap + Vector2.UnitY, + textureMap, + textureMap + Vector2.UnitX, + }; + for (int j = 0; j < Textures[i].Length; j++) + Textures[i][j] *= new Vector2(16f / 256f); + textureMap += new Vector2(1, 0); + } + } + + public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, + Tuple textureMap, int indiciesOffset, out int[] indicies) + { + // Wheat is rendered by rendering the four vertical faces of a cube, then moving them + // towards the middle. We also render a second set of four faces so that you can see + // each face from the opposite side (to avoid culling) + var texture = Textures[0]; + if (descriptor.Metadata < Textures.Length) + texture = Textures[descriptor.Metadata]; + indicies = new int[4 * 2 * 6]; + var verticies = new VertexPositionNormalColorTexture[4 * 2 * 6]; + int[] _indicies; + for (int _side = 0; _side < 4; _side++) // Y faces are the last two in the CubeFace enum, so we can just iterate to 4 + { + var side = (CubeFace)_side; + var quad = CreateQuad(side, Vector3.Zero, texture, 0, indiciesOffset, out _indicies, Color.White); + if (side == CubeFace.NegativeX || side == CubeFace.PositiveX) + { + for (int i = 0; i < quad.Length; i++) + { + quad[i].Position.X *= 0.5f; + quad[i].Position += offset; + } + } + else + { + for (int i = 0; i < quad.Length; i++) + { + quad[i].Position.Z *= 0.5f; + quad[i].Position += offset; + } + } + Array.Copy(quad, 0, verticies, _side * 4, 4); + Array.Copy(_indicies, 0, indicies, _side * 6, 6); + } + indiciesOffset += 4 * 6; + for (int _side = 0; _side < 4; _side++) + { + var side = (CubeFace)_side; + var quad = CreateQuad(side, Vector3.Zero, texture, 0, indiciesOffset, out _indicies, Color.White); + if (side == CubeFace.NegativeX || side == CubeFace.PositiveX) + { + for (int i = 0; i < quad.Length; i++) + { + quad[i].Position.X *= 0.5f; + quad[i].Position.X = -quad[i].Position.X; + quad[i].Position += offset; + } + } + else + { + for (int i = 0; i < quad.Length; i++) + { + quad[i].Position.Z *= 0.5f; + quad[i].Position.Z = -quad[i].Position.Z; + quad[i].Position += offset; + } + } + Array.Copy(quad, 0, verticies, _side * 4 + 4 * 4, 4); + Array.Copy(_indicies, 0, indicies, _side * 6 + 6 * 4, 6); + } + for (int i = 0; i < verticies.Length; i++) + { + verticies[i].Position.Y -= 1 / 16f; + } + return verticies; + } + } +} \ No newline at end of file diff --git a/TrueCraft.Client/TrueCraft.Client.csproj b/TrueCraft.Client/TrueCraft.Client.csproj index cb19bac..6c8e685 100644 --- a/TrueCraft.Client/TrueCraft.Client.csproj +++ b/TrueCraft.Client/TrueCraft.Client.csproj @@ -102,6 +102,8 @@ + + diff --git a/TrueCraft.Client/TrueCraftGame.cs b/TrueCraft.Client/TrueCraftGame.cs index adcc4de..8935bd6 100644 --- a/TrueCraft.Client/TrueCraftGame.cs +++ b/TrueCraft.Client/TrueCraftGame.cs @@ -78,7 +78,7 @@ namespace TrueCraft.Client base.Initialize(); // (calls LoadContent) ChunkConverter = new ChunkRenderer(this, Client.World.World.BlockRepository); Client.ChunkLoaded += (sender, e) => ChunkConverter.Enqueue(e.Chunk); - Client.ChunkModified += (sender, e) => ChunkConverter.Enqueue(e.Chunk, true); + //Client.ChunkModified += (sender, e) => ChunkConverter.Enqueue(e.Chunk, true); ChunkConverter.MeshCompleted += ChunkConverter_MeshGenerated; ChunkConverter.Start(); Client.PropertyChanged += HandleClientPropertyChanged; diff --git a/TrueCraft.Core/Logic/Blocks/CropsBlock.cs b/TrueCraft.Core/Logic/Blocks/CropsBlock.cs index a14a477..2ac2713 100644 --- a/TrueCraft.Core/Logic/Blocks/CropsBlock.cs +++ b/TrueCraft.Core/Logic/Blocks/CropsBlock.cs @@ -24,6 +24,8 @@ namespace TrueCraft.Core.Logic.Blocks public override string DisplayName { get { return "Crops"; } } + public override TrueCraft.API.BoundingBox? BoundingBox { get { return null; } } + public override Tuple GetTextureMap(byte metadata) { return new Tuple(8, 5); @@ -66,4 +68,4 @@ namespace TrueCraft.Core.Logic.Blocks (server) => GrowBlock(server, world, descriptor.Coordinates + MathHelper.BlockFaceToCoordinates(face))); } } -} \ No newline at end of file +} diff --git a/TrueCraft/Program.cs b/TrueCraft/Program.cs index 9b514a1..57c9cd8 100644 --- a/TrueCraft/Program.cs +++ b/TrueCraft/Program.cs @@ -51,7 +51,7 @@ namespace TrueCraft } catch { - world = new World("default", new StandardGenerator()); + world = new World("default", new FlatlandGenerator()); world.BlockRepository = Server.BlockRepository; world.Save("world"); Server.AddWorld(world); -- 2.47.2 From 25a82eee0d752a82cd0d00c9be6f8ea44548d4df Mon Sep 17 00:00:00 2001 From: manio143 Date: Sat, 20 Jun 2015 22:32:23 +0200 Subject: [PATCH 4/4] Query - Fixed to be compatible with `mcstatus` --- TrueCraft/QueryProtocol.cs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/TrueCraft/QueryProtocol.cs b/TrueCraft/QueryProtocol.cs index 8e1495b..e73facf 100644 --- a/TrueCraft/QueryProtocol.cs +++ b/TrueCraft/QueryProtocol.cs @@ -49,6 +49,8 @@ namespace TrueCraft var clientEP = new IPEndPoint(IPAddress.Any, Port); byte[] buffer = Udp.EndReceive(ar, ref clientEP); + DoReverseEndian(buffer); + if (CheckVersion(buffer)) { if (buffer[2] == Type_Handshake) @@ -124,12 +126,13 @@ namespace TrueCraft var stats = GetStats(); var response = GetStream(); WriteHead(Type_Stat, user, response); - WriteStringToStream("SPLITNUM", response.BaseStream); + WriteStringToStream("SPLITNUM\0\0", response.BaseStream); foreach (var pair in stats) { WriteStringToStream(pair.Key, response.BaseStream); WriteStringToStream(pair.Value, response.BaseStream); } + response.Write((byte)0x00); response.Write((byte)0x01); WriteStringToStream("player_\0", response.BaseStream); var players = GetPlayers(); @@ -198,6 +201,25 @@ namespace TrueCraft names.Add(client.Username); return names; } + private void DoReverseEndian(byte[] buffer) + { + if (buffer.Length >= 7) + { + Swap(ref buffer[3], ref buffer[6]); + Swap(ref buffer[4], ref buffer[5]); + } + if (buffer.Length >= 11) + { + Swap(ref buffer[7], ref buffer[10]); + Swap(ref buffer[8], ref buffer[9]); + } + } + private void Swap(ref byte a, ref byte b) + { + byte c = a; + a = b; + b = c; + } public void Stop() { -- 2.47.2