Merge pull request #159 from mrpimpunicorn/master

Added rendering support for moist farmland
This commit is contained in:
Drew DeVault 2015-06-22 18:55:42 -06:00
commit 988fec61d9
2 changed files with 88 additions and 9 deletions

View File

@ -11,24 +11,94 @@ namespace TrueCraft.Client.Rendering.Blocks
static FarmlandRenderer() static FarmlandRenderer()
{ {
BlockRenderer.RegisterRenderer(FarmlandBlock.BlockID, new FarmlandRenderer()); BlockRenderer.RegisterRenderer(FarmlandBlock.BlockID, new FarmlandRenderer());
for (int i = 0; i < Texture.Length; i++) for (int i = 0; i < DryTexture.Length; i++)
Texture[i] *= new Vector2(16f / 256f); {
DryTexture[i] *= new Vector2(16f / 256f);
MoistTexture[i] *= new Vector2(16f / 256f);
}
} }
private static Vector2 TextureMap = new Vector2(7, 5); private static Vector2 DryTopTexture = new Vector2(7, 5);
private static Vector2[] Texture = 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, // Positive Z
TextureMap + Vector2.UnitY, SideTexture + Vector2.UnitX + Vector2.UnitY,
TextureMap, SideTexture + Vector2.UnitY,
TextureMap + Vector2.UnitX, 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, public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset,
Tuple<int, int> textureMap, int indiciesOffset, out int[] indicies) Tuple<int, int> 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 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++) for (int i = 0; i < cube.Length; i++)
{ {
if (cube[i].Position.Y > 0) if (cube[i].Position.Y > 0)

View File

@ -9,6 +9,15 @@ namespace TrueCraft.Core.Logic.Blocks
{ {
public class FarmlandBlock : BlockProvider 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 int UpdateIntervalSeconds = 30;
public static readonly byte BlockID = 0x3C; public static readonly byte BlockID = 0x3C;