From 50c7e021a7cbf29ba7a3cdb8705be2de74bdfa41 Mon Sep 17 00:00:00 2001 From: William Moorehouse Date: Mon, 22 Jun 2015 18:34:34 -0400 Subject: [PATCH] Added rendering support for moist farmland --- .../Rendering/Blocks/FarmlandRenderer.cs | 88 +++++++++++++++++-- TrueCraft.Core/Logic/Blocks/FarmlandBlock.cs | 9 ++ 2 files changed, 88 insertions(+), 9 deletions(-) diff --git a/TrueCraft.Client/Rendering/Blocks/FarmlandRenderer.cs b/TrueCraft.Client/Rendering/Blocks/FarmlandRenderer.cs index 9165a22..aef7e5d 100644 --- a/TrueCraft.Client/Rendering/Blocks/FarmlandRenderer.cs +++ b/TrueCraft.Client/Rendering/Blocks/FarmlandRenderer.cs @@ -11,24 +11,94 @@ namespace TrueCraft.Client.Rendering.Blocks static FarmlandRenderer() { BlockRenderer.RegisterRenderer(FarmlandBlock.BlockID, new FarmlandRenderer()); - for (int i = 0; i < Texture.Length; i++) - Texture[i] *= new Vector2(16f / 256f); + for (int i = 0; i < DryTexture.Length; i++) + { + DryTexture[i] *= new Vector2(16f / 256f); + MoistTexture[i] *= new Vector2(16f / 256f); + } } - private static Vector2 TextureMap = new Vector2(7, 5); - private static Vector2[] Texture = + private static Vector2 DryTopTexture = new Vector2(7, 5); + private static Vector2 MoistTopTexture = new Vector2(6, 5); + private static Vector2 SideTexture = new Vector2(2, 0); + + private static Vector2[] DryTexture = { - TextureMap + Vector2.UnitX + Vector2.UnitY, - TextureMap + Vector2.UnitY, - TextureMap, - TextureMap + Vector2.UnitX, + // Positive Z + SideTexture + Vector2.UnitX + Vector2.UnitY, + SideTexture + Vector2.UnitY, + SideTexture, + SideTexture + Vector2.UnitX, + // Negative Z + SideTexture + Vector2.UnitX + Vector2.UnitY, + SideTexture + Vector2.UnitY, + SideTexture, + SideTexture + Vector2.UnitX, + // Positive X + SideTexture + Vector2.UnitX + Vector2.UnitY, + SideTexture + Vector2.UnitY, + SideTexture, + SideTexture + Vector2.UnitX, + // Negative X + SideTexture + Vector2.UnitX + Vector2.UnitY, + SideTexture + Vector2.UnitY, + SideTexture, + SideTexture + Vector2.UnitX, + // Positive Y + DryTopTexture + Vector2.UnitX + Vector2.UnitY, + DryTopTexture + Vector2.UnitY, + DryTopTexture, + DryTopTexture + Vector2.UnitX, + // Negative Y + SideTexture + Vector2.UnitX + Vector2.UnitY, + SideTexture + Vector2.UnitY, + SideTexture, + SideTexture + Vector2.UnitX, + }; + + private static Vector2[] MoistTexture = + { + // Positive Z + SideTexture + Vector2.UnitX + Vector2.UnitY, + SideTexture + Vector2.UnitY, + SideTexture, + SideTexture + Vector2.UnitX, + // Negative Z + SideTexture + Vector2.UnitX + Vector2.UnitY, + SideTexture + Vector2.UnitY, + SideTexture, + SideTexture + Vector2.UnitX, + // Positive X + SideTexture + Vector2.UnitX + Vector2.UnitY, + SideTexture + Vector2.UnitY, + SideTexture, + SideTexture + Vector2.UnitX, + // Negative X + SideTexture + Vector2.UnitX + Vector2.UnitY, + SideTexture + Vector2.UnitY, + SideTexture, + SideTexture + Vector2.UnitX, + // Positive Y + MoistTopTexture + Vector2.UnitX + Vector2.UnitY, + MoistTopTexture + Vector2.UnitY, + MoistTopTexture, + MoistTopTexture + Vector2.UnitX, + // Negative Y + SideTexture + Vector2.UnitX + Vector2.UnitY, + SideTexture + Vector2.UnitY, + SideTexture, + SideTexture + Vector2.UnitX, }; public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset, Tuple textureMap, int indiciesOffset, out int[] indicies) { + var texture = DryTexture; + if (descriptor.Metadata == (byte)FarmlandBlock.MoistureLevel.Moist) + texture = MoistTexture; + var overhead = new Vector3(0.5f, 0.5f, 0.5f); - var cube = CreateUniformCube(overhead, Texture, indiciesOffset, out indicies, Color.White); + var cube = CreateUniformCube(overhead, texture, indiciesOffset, out indicies, Color.White); for (int i = 0; i < cube.Length; i++) { if (cube[i].Position.Y > 0) diff --git a/TrueCraft.Core/Logic/Blocks/FarmlandBlock.cs b/TrueCraft.Core/Logic/Blocks/FarmlandBlock.cs index 6e20739..d6d1a67 100644 --- a/TrueCraft.Core/Logic/Blocks/FarmlandBlock.cs +++ b/TrueCraft.Core/Logic/Blocks/FarmlandBlock.cs @@ -9,6 +9,15 @@ namespace TrueCraft.Core.Logic.Blocks { public class FarmlandBlock : BlockProvider { + public enum MoistureLevel : byte + { + Dry = 0x0, + + // Any value less than 0x7 is considered 'dry' + + Moist = 0x7 + } + public static readonly int UpdateIntervalSeconds = 30; public static readonly byte BlockID = 0x3C;