Add cactus renderer

Unlike Minecraft, however, our cactus has no bottom face. Who cares.
This commit is contained in:
Drew DeVault 2015-09-27 23:36:40 -04:00
parent 8f0a1f3d57
commit 9fb289f3a7
3 changed files with 100 additions and 1 deletions

View File

@ -0,0 +1,98 @@
using System;
using TrueCraft.API.Logic;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;
using TrueCraft.Core.Logic.Blocks;
namespace TrueCraft.Client.Rendering.Blocks
{
public class CactusRenderer : BlockRenderer
{
static CactusRenderer()
{
BlockRenderer.RegisterRenderer(CactusBlock.BlockID, new CactusRenderer());
for (int j = 0; j < Texture.Length; j++)
Texture[j] *= new Vector2(16f / 256f);
for (int j = 0; j < TopTexture.Length; j++)
TopTexture[j] *= new Vector2(16f / 256f);
}
private static Vector2 TextureMap = new Vector2(6, 4);
private static Vector2[] Texture =
{
TextureMap + Vector2.UnitX + Vector2.UnitY,
TextureMap + Vector2.UnitY,
TextureMap,
TextureMap + Vector2.UnitX
};
private static Vector2 TopTextureMap = new Vector2(6, 4);
private static Vector2[] TopTexture =
{
TopTextureMap + Vector2.UnitX + Vector2.UnitY,
TopTextureMap + Vector2.UnitY,
TopTextureMap,
TopTextureMap + Vector2.UnitX
};
public override VertexPositionNormalColorTexture[] Render(BlockDescriptor descriptor, Vector3 offset,
VisibleFaces faces, Tuple<int, int> textureMap, int indiciesOffset, out int[] indicies)
{
// This is similar to how wheat is rendered
indicies = new int[5 * 6];
var verticies = new VertexPositionNormalColorTexture[5 * 6];
int[] _indicies;
var center = new Vector3(-0.5f, -0.5f, -0.5f);
CubeFace side;
VertexPositionNormalColorTexture[] quad;
for (int _side = 0; _side < 4; _side++)
{
side = (CubeFace)_side;
quad = CreateQuad(side, center, 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 *= 14f / 16f;
quad[i].Position += offset;
}
}
else
{
for (int i = 0; i < quad.Length; i++)
{
quad[i].Position.Z *= 14f / 16f;
quad[i].Position += offset;
}
}
Array.Copy(quad, 0, verticies, _side * 4, 4);
Array.Copy(_indicies, 0, indicies, _side * 6, 6);
}
side = CubeFace.PositiveY;
quad = CreateQuad(side, center, TopTexture, 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 *= 14f / 16f;
quad[i].Position += offset;
}
}
else
{
for (int i = 0; i < quad.Length; i++)
{
quad[i].Position.Z *= 14f / 16f;
quad[i].Position += offset;
}
}
Array.Copy(quad, 0, verticies, (int)side * 4, 4);
Array.Copy(_indicies, 0, indicies, (int)side * 6, 6);
for (int i = 0; i < verticies.Length; i++)
{
verticies[i].Position.Y -= 1 / 16f;
verticies[i].Position -= center;
}
return verticies;
}
}
}

View File

@ -4,7 +4,7 @@ using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using TrueCraft.Core.Logic.Blocks; using TrueCraft.Core.Logic.Blocks;
namespace TrueCraft.Client.Rendering namespace TrueCraft.Client.Rendering.Blocks
{ {
public class WheatRenderer : BlockRenderer public class WheatRenderer : BlockRenderer
{ {

View File

@ -134,6 +134,7 @@
<Compile Include="Modules\PlayerControlModule.cs" /> <Compile Include="Modules\PlayerControlModule.cs" />
<Compile Include="Modules\DebugInfoModule.cs" /> <Compile Include="Modules\DebugInfoModule.cs" />
<Compile Include="Modules\HUDModule.cs" /> <Compile Include="Modules\HUDModule.cs" />
<Compile Include="Rendering\Blocks\CactusRenderer.cs" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup> <ItemGroup>