add TileMeshCollection
This commit is contained in:
parent
5a8217f9e3
commit
3b146aa99f
|
@ -199,6 +199,7 @@
|
||||||
<Compile Include="TileMap\TileRawDataContainer.cs" />
|
<Compile Include="TileMap\TileRawDataContainer.cs" />
|
||||||
<Compile Include="TileMap\Meshes\TileMesh.cs" />
|
<Compile Include="TileMap\Meshes\TileMesh.cs" />
|
||||||
<Compile Include="TileMap\Meshes\CubeTileMesh.cs" />
|
<Compile Include="TileMap\Meshes\CubeTileMesh.cs" />
|
||||||
|
<Compile Include="TileMap\Meshes\TileMeshCollection.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -35,12 +35,12 @@ namespace Blarg.GameFramework.TileMap.Meshes
|
||||||
}
|
}
|
||||||
|
|
||||||
public CubeTileMesh(
|
public CubeTileMesh(
|
||||||
TextureRegion topTexture,
|
TextureRegion? topTexture,
|
||||||
TextureRegion bottomTexture,
|
TextureRegion? bottomTexture,
|
||||||
TextureRegion frontTexture,
|
TextureRegion? frontTexture,
|
||||||
TextureRegion backTexture,
|
TextureRegion? backTexture,
|
||||||
TextureRegion leftTexture,
|
TextureRegion? leftTexture,
|
||||||
TextureRegion rightTexture,
|
TextureRegion? rightTexture,
|
||||||
byte faces,
|
byte faces,
|
||||||
byte opaqueSides,
|
byte opaqueSides,
|
||||||
byte lightValue,
|
byte lightValue,
|
||||||
|
@ -105,7 +105,13 @@ namespace Blarg.GameFramework.TileMap.Meshes
|
||||||
else
|
else
|
||||||
RightFaceVertexOffset = 0;
|
RightFaceVertexOffset = 0;
|
||||||
|
|
||||||
SetupFaceVertices(numVertices, topTexture, bottomTexture, frontTexture, backTexture, leftTexture, rightTexture);
|
SetupFaceVertices(numVertices,
|
||||||
|
topTexture,
|
||||||
|
bottomTexture,
|
||||||
|
frontTexture,
|
||||||
|
backTexture,
|
||||||
|
leftTexture,
|
||||||
|
rightTexture);
|
||||||
SetupCollisionVertices();
|
SetupCollisionVertices();
|
||||||
_bounds = UNIT_BOUNDS;
|
_bounds = UNIT_BOUNDS;
|
||||||
}
|
}
|
||||||
|
@ -117,12 +123,12 @@ namespace Blarg.GameFramework.TileMap.Meshes
|
||||||
|
|
||||||
private void SetupFaceVertices(
|
private void SetupFaceVertices(
|
||||||
int numVertices,
|
int numVertices,
|
||||||
TextureRegion topTexture,
|
TextureRegion? topTexture,
|
||||||
TextureRegion bottomTexture,
|
TextureRegion? bottomTexture,
|
||||||
TextureRegion frontTexture,
|
TextureRegion? frontTexture,
|
||||||
TextureRegion backTexture,
|
TextureRegion? backTexture,
|
||||||
TextureRegion leftTexture,
|
TextureRegion? leftTexture,
|
||||||
TextureRegion rightTexture
|
TextureRegion? rightTexture
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
|
@ -138,32 +144,32 @@ namespace Blarg.GameFramework.TileMap.Meshes
|
||||||
_vertices.SetPosition3D(pos, a.X, b.Y, b.Z);
|
_vertices.SetPosition3D(pos, a.X, b.Y, b.Z);
|
||||||
_vertices.SetColor(pos, Color);
|
_vertices.SetColor(pos, Color);
|
||||||
_vertices.SetNormal(pos, Vector3.Up);
|
_vertices.SetNormal(pos, Vector3.Up);
|
||||||
_vertices.SetTexCoord(pos, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 1.0f), topTexture));
|
_vertices.SetTexCoord(pos, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 1.0f), topTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 1, b.X, b.Y, b.Z);
|
_vertices.SetPosition3D(pos + 1, b.X, b.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 1, Color);
|
_vertices.SetColor(pos + 1, Color);
|
||||||
_vertices.SetNormal(pos + 1, Vector3.Up);
|
_vertices.SetNormal(pos + 1, Vector3.Up);
|
||||||
_vertices.SetTexCoord(pos + 1, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), topTexture));
|
_vertices.SetTexCoord(pos + 1, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), topTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 2, a.X, b.Y, a.Z);
|
_vertices.SetPosition3D(pos + 2, a.X, b.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 2, Color);
|
_vertices.SetColor(pos + 2, Color);
|
||||||
_vertices.SetNormal(pos + 2, Vector3.Up);
|
_vertices.SetNormal(pos + 2, Vector3.Up);
|
||||||
_vertices.SetTexCoord(pos + 2, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), topTexture));
|
_vertices.SetTexCoord(pos + 2, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), topTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 3, b.X, b.Y, b.Z);
|
_vertices.SetPosition3D(pos + 3, b.X, b.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 3, Color);
|
_vertices.SetColor(pos + 3, Color);
|
||||||
_vertices.SetNormal(pos + 3, Vector3.Up);
|
_vertices.SetNormal(pos + 3, Vector3.Up);
|
||||||
_vertices.SetTexCoord(pos + 3, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), topTexture));
|
_vertices.SetTexCoord(pos + 3, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), topTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 4, b.X, b.Y, a.Z);
|
_vertices.SetPosition3D(pos + 4, b.X, b.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 4, Color);
|
_vertices.SetColor(pos + 4, Color);
|
||||||
_vertices.SetNormal(pos + 4, Vector3.Up);
|
_vertices.SetNormal(pos + 4, Vector3.Up);
|
||||||
_vertices.SetTexCoord(pos + 4, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 0.0f), topTexture));
|
_vertices.SetTexCoord(pos + 4, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 0.0f), topTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 5, a.X, b.Y, a.Z);
|
_vertices.SetPosition3D(pos + 5, a.X, b.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 5, Color);
|
_vertices.SetColor(pos + 5, Color);
|
||||||
_vertices.SetNormal(pos + 5, Vector3.Up);
|
_vertices.SetNormal(pos + 5, Vector3.Up);
|
||||||
_vertices.SetTexCoord(pos + 5, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), topTexture));
|
_vertices.SetTexCoord(pos + 5, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), topTexture.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasFace(SIDE_BOTTOM))
|
if (HasFace(SIDE_BOTTOM))
|
||||||
|
@ -173,32 +179,32 @@ namespace Blarg.GameFramework.TileMap.Meshes
|
||||||
_vertices.SetPosition3D(pos, b.X, a.Y, b.Z);
|
_vertices.SetPosition3D(pos, b.X, a.Y, b.Z);
|
||||||
_vertices.SetColor(pos, Color);
|
_vertices.SetColor(pos, Color);
|
||||||
_vertices.SetNormal(pos, Vector3.Down);
|
_vertices.SetNormal(pos, Vector3.Down);
|
||||||
_vertices.SetTexCoord(pos, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 1.0f), bottomTexture));
|
_vertices.SetTexCoord(pos, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 1.0f), bottomTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 1, a.X, a.Y, b.Z);
|
_vertices.SetPosition3D(pos + 1, a.X, a.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 1, Color);
|
_vertices.SetColor(pos + 1, Color);
|
||||||
_vertices.SetNormal(pos + 1, Vector3.Down);
|
_vertices.SetNormal(pos + 1, Vector3.Down);
|
||||||
_vertices.SetTexCoord(pos + 1, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), bottomTexture));
|
_vertices.SetTexCoord(pos + 1, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), bottomTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 2, b.X, a.Y, a.Z);
|
_vertices.SetPosition3D(pos + 2, b.X, a.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 2, Color);
|
_vertices.SetColor(pos + 2, Color);
|
||||||
_vertices.SetNormal(pos + 2, Vector3.Down);
|
_vertices.SetNormal(pos + 2, Vector3.Down);
|
||||||
_vertices.SetTexCoord(pos + 2, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), bottomTexture));
|
_vertices.SetTexCoord(pos + 2, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), bottomTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 3, a.X, a.Y, b.Z);
|
_vertices.SetPosition3D(pos + 3, a.X, a.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 3, Color);
|
_vertices.SetColor(pos + 3, Color);
|
||||||
_vertices.SetNormal(pos + 3, Vector3.Down);
|
_vertices.SetNormal(pos + 3, Vector3.Down);
|
||||||
_vertices.SetTexCoord(pos + 3, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), bottomTexture));
|
_vertices.SetTexCoord(pos + 3, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), bottomTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 4, a.X, a.Y, a.Z);
|
_vertices.SetPosition3D(pos + 4, a.X, a.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 4, Color);
|
_vertices.SetColor(pos + 4, Color);
|
||||||
_vertices.SetNormal(pos + 4, Vector3.Down);
|
_vertices.SetNormal(pos + 4, Vector3.Down);
|
||||||
_vertices.SetTexCoord(pos + 4, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 0.0f), bottomTexture));
|
_vertices.SetTexCoord(pos + 4, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 0.0f), bottomTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 5, b.X, a.Y, a.Z);
|
_vertices.SetPosition3D(pos + 5, b.X, a.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 5, Color);
|
_vertices.SetColor(pos + 5, Color);
|
||||||
_vertices.SetNormal(pos + 5, Vector3.Down);
|
_vertices.SetNormal(pos + 5, Vector3.Down);
|
||||||
_vertices.SetTexCoord(pos + 5, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), bottomTexture));
|
_vertices.SetTexCoord(pos + 5, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), bottomTexture.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasFace(SIDE_FRONT))
|
if (HasFace(SIDE_FRONT))
|
||||||
|
@ -208,32 +214,32 @@ namespace Blarg.GameFramework.TileMap.Meshes
|
||||||
_vertices.SetPosition3D(pos, b.X, a.Y, a.Z);
|
_vertices.SetPosition3D(pos, b.X, a.Y, a.Z);
|
||||||
_vertices.SetColor(pos, Color);
|
_vertices.SetColor(pos, Color);
|
||||||
_vertices.SetNormal(pos, Vector3.Forward);
|
_vertices.SetNormal(pos, Vector3.Forward);
|
||||||
_vertices.SetTexCoord(pos, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 1.0f), frontTexture));
|
_vertices.SetTexCoord(pos, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 1.0f), frontTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 1, a.X, a.Y, a.Z);
|
_vertices.SetPosition3D(pos + 1, a.X, a.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 1, Color);
|
_vertices.SetColor(pos + 1, Color);
|
||||||
_vertices.SetNormal(pos + 1, Vector3.Forward);
|
_vertices.SetNormal(pos + 1, Vector3.Forward);
|
||||||
_vertices.SetTexCoord(pos + 1, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), frontTexture));
|
_vertices.SetTexCoord(pos + 1, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), frontTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 2, b.X, b.Y, a.Z);
|
_vertices.SetPosition3D(pos + 2, b.X, b.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 2, Color);
|
_vertices.SetColor(pos + 2, Color);
|
||||||
_vertices.SetNormal(pos + 2, Vector3.Forward);
|
_vertices.SetNormal(pos + 2, Vector3.Forward);
|
||||||
_vertices.SetTexCoord(pos + 2, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), frontTexture));
|
_vertices.SetTexCoord(pos + 2, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), frontTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 3, a.X, a.Y, a.Z);
|
_vertices.SetPosition3D(pos + 3, a.X, a.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 3, Color);
|
_vertices.SetColor(pos + 3, Color);
|
||||||
_vertices.SetNormal(pos + 3, Vector3.Forward);
|
_vertices.SetNormal(pos + 3, Vector3.Forward);
|
||||||
_vertices.SetTexCoord(pos + 3, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), frontTexture));
|
_vertices.SetTexCoord(pos + 3, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), frontTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 4, a.X, b.Y, a.Z);
|
_vertices.SetPosition3D(pos + 4, a.X, b.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 4, Color);
|
_vertices.SetColor(pos + 4, Color);
|
||||||
_vertices.SetNormal(pos + 4, Vector3.Forward);
|
_vertices.SetNormal(pos + 4, Vector3.Forward);
|
||||||
_vertices.SetTexCoord(pos + 4, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 0.0f), frontTexture));
|
_vertices.SetTexCoord(pos + 4, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 0.0f), frontTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 5, b.X, b.Y, a.Z);
|
_vertices.SetPosition3D(pos + 5, b.X, b.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 5, Color);
|
_vertices.SetColor(pos + 5, Color);
|
||||||
_vertices.SetNormal(pos + 5, Vector3.Forward);
|
_vertices.SetNormal(pos + 5, Vector3.Forward);
|
||||||
_vertices.SetTexCoord(pos + 5, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), frontTexture));
|
_vertices.SetTexCoord(pos + 5, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), frontTexture.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasFace(SIDE_BACK))
|
if (HasFace(SIDE_BACK))
|
||||||
|
@ -243,32 +249,32 @@ namespace Blarg.GameFramework.TileMap.Meshes
|
||||||
_vertices.SetPosition3D(pos, a.X, a.Y, b.Z);
|
_vertices.SetPosition3D(pos, a.X, a.Y, b.Z);
|
||||||
_vertices.SetColor(pos, Color);
|
_vertices.SetColor(pos, Color);
|
||||||
_vertices.SetNormal(pos, Vector3.Backward);
|
_vertices.SetNormal(pos, Vector3.Backward);
|
||||||
_vertices.SetTexCoord(pos, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 1.0f), backTexture));
|
_vertices.SetTexCoord(pos, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 1.0f), backTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 1, b.X, a.Y, b.Z);
|
_vertices.SetPosition3D(pos + 1, b.X, a.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 1, Color);
|
_vertices.SetColor(pos + 1, Color);
|
||||||
_vertices.SetNormal(pos + 1, Vector3.Backward);
|
_vertices.SetNormal(pos + 1, Vector3.Backward);
|
||||||
_vertices.SetTexCoord(pos + 1, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), backTexture));
|
_vertices.SetTexCoord(pos + 1, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), backTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 2, a.X, b.Y, b.Z);
|
_vertices.SetPosition3D(pos + 2, a.X, b.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 2, Color);
|
_vertices.SetColor(pos + 2, Color);
|
||||||
_vertices.SetNormal(pos + 2, Vector3.Backward);
|
_vertices.SetNormal(pos + 2, Vector3.Backward);
|
||||||
_vertices.SetTexCoord(pos + 2, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), backTexture));
|
_vertices.SetTexCoord(pos + 2, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), backTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 3, b.X, a.Y, b.Z);
|
_vertices.SetPosition3D(pos + 3, b.X, a.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 3, Color);
|
_vertices.SetColor(pos + 3, Color);
|
||||||
_vertices.SetNormal(pos + 3, Vector3.Backward);
|
_vertices.SetNormal(pos + 3, Vector3.Backward);
|
||||||
_vertices.SetTexCoord(pos + 3, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), backTexture));
|
_vertices.SetTexCoord(pos + 3, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), backTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 4, b.X, b.Y, b.Z);
|
_vertices.SetPosition3D(pos + 4, b.X, b.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 4, Color);
|
_vertices.SetColor(pos + 4, Color);
|
||||||
_vertices.SetNormal(pos + 4, Vector3.Backward);
|
_vertices.SetNormal(pos + 4, Vector3.Backward);
|
||||||
_vertices.SetTexCoord(pos + 4, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 0.0f), backTexture));
|
_vertices.SetTexCoord(pos + 4, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 0.0f), backTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 5, a.X, b.Y, b.Z);
|
_vertices.SetPosition3D(pos + 5, a.X, b.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 5, Color);
|
_vertices.SetColor(pos + 5, Color);
|
||||||
_vertices.SetNormal(pos + 5, Vector3.Backward);
|
_vertices.SetNormal(pos + 5, Vector3.Backward);
|
||||||
_vertices.SetTexCoord(pos + 5, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), backTexture));
|
_vertices.SetTexCoord(pos + 5, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), backTexture.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasFace(SIDE_LEFT))
|
if (HasFace(SIDE_LEFT))
|
||||||
|
@ -278,32 +284,32 @@ namespace Blarg.GameFramework.TileMap.Meshes
|
||||||
_vertices.SetPosition3D(pos, a.X, a.Y, a.Z);
|
_vertices.SetPosition3D(pos, a.X, a.Y, a.Z);
|
||||||
_vertices.SetColor(pos, Color);
|
_vertices.SetColor(pos, Color);
|
||||||
_vertices.SetNormal(pos, Vector3.Left);
|
_vertices.SetNormal(pos, Vector3.Left);
|
||||||
_vertices.SetTexCoord(pos, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 1.0f), leftTexture));
|
_vertices.SetTexCoord(pos, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 1.0f), leftTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 1, a.X, a.Y, b.Z);
|
_vertices.SetPosition3D(pos + 1, a.X, a.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 1, Color);
|
_vertices.SetColor(pos + 1, Color);
|
||||||
_vertices.SetNormal(pos + 1, Vector3.Left);
|
_vertices.SetNormal(pos + 1, Vector3.Left);
|
||||||
_vertices.SetTexCoord(pos + 1, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), leftTexture));
|
_vertices.SetTexCoord(pos + 1, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), leftTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 2, a.X, b.Y, a.Z);
|
_vertices.SetPosition3D(pos + 2, a.X, b.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 2, Color);
|
_vertices.SetColor(pos + 2, Color);
|
||||||
_vertices.SetNormal(pos + 2, Vector3.Left);
|
_vertices.SetNormal(pos + 2, Vector3.Left);
|
||||||
_vertices.SetTexCoord(pos + 2, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), leftTexture));
|
_vertices.SetTexCoord(pos + 2, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), leftTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 3, a.X, a.Y, b.Z);
|
_vertices.SetPosition3D(pos + 3, a.X, a.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 3, Color);
|
_vertices.SetColor(pos + 3, Color);
|
||||||
_vertices.SetNormal(pos + 3, Vector3.Left);
|
_vertices.SetNormal(pos + 3, Vector3.Left);
|
||||||
_vertices.SetTexCoord(pos + 3, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), leftTexture));
|
_vertices.SetTexCoord(pos + 3, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), leftTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 4, a.X, b.Y, b.Z);
|
_vertices.SetPosition3D(pos + 4, a.X, b.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 4, Color);
|
_vertices.SetColor(pos + 4, Color);
|
||||||
_vertices.SetNormal(pos + 4, Vector3.Left);
|
_vertices.SetNormal(pos + 4, Vector3.Left);
|
||||||
_vertices.SetTexCoord(pos + 4, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 0.0f), leftTexture));
|
_vertices.SetTexCoord(pos + 4, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 0.0f), leftTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 5, a.X, b.Y, a.Z);
|
_vertices.SetPosition3D(pos + 5, a.X, b.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 5, Color);
|
_vertices.SetColor(pos + 5, Color);
|
||||||
_vertices.SetNormal(pos + 5, Vector3.Left);
|
_vertices.SetNormal(pos + 5, Vector3.Left);
|
||||||
_vertices.SetTexCoord(pos + 5, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), leftTexture));
|
_vertices.SetTexCoord(pos + 5, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), leftTexture.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasFace(SIDE_RIGHT))
|
if (HasFace(SIDE_RIGHT))
|
||||||
|
@ -313,32 +319,32 @@ namespace Blarg.GameFramework.TileMap.Meshes
|
||||||
_vertices.SetPosition3D(pos, b.X, a.Y, b.Z);
|
_vertices.SetPosition3D(pos, b.X, a.Y, b.Z);
|
||||||
_vertices.SetColor(pos, Color);
|
_vertices.SetColor(pos, Color);
|
||||||
_vertices.SetNormal(pos, Vector3.Right);
|
_vertices.SetNormal(pos, Vector3.Right);
|
||||||
_vertices.SetTexCoord(pos, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 1.0f), rightTexture));
|
_vertices.SetTexCoord(pos, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 1.0f), rightTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 1, b.X, a.Y, a.Z);
|
_vertices.SetPosition3D(pos + 1, b.X, a.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 1, Color);
|
_vertices.SetColor(pos + 1, Color);
|
||||||
_vertices.SetNormal(pos + 1, Vector3.Right);
|
_vertices.SetNormal(pos + 1, Vector3.Right);
|
||||||
_vertices.SetTexCoord(pos + 1, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), rightTexture));
|
_vertices.SetTexCoord(pos + 1, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), rightTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 2, b.X, b.Y, b.Z);
|
_vertices.SetPosition3D(pos + 2, b.X, b.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 2, Color);
|
_vertices.SetColor(pos + 2, Color);
|
||||||
_vertices.SetNormal(pos + 2, Vector3.Right);
|
_vertices.SetNormal(pos + 2, Vector3.Right);
|
||||||
_vertices.SetTexCoord(pos + 2, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), rightTexture));
|
_vertices.SetTexCoord(pos + 2, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), rightTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 3, b.X, a.Y, a.Z);
|
_vertices.SetPosition3D(pos + 3, b.X, a.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 3, Color);
|
_vertices.SetColor(pos + 3, Color);
|
||||||
_vertices.SetNormal(pos + 3, Vector3.Right);
|
_vertices.SetNormal(pos + 3, Vector3.Right);
|
||||||
_vertices.SetTexCoord(pos + 3, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), rightTexture));
|
_vertices.SetTexCoord(pos + 3, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 1.0f), rightTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 4, b.X, b.Y, a.Z);
|
_vertices.SetPosition3D(pos + 4, b.X, b.Y, a.Z);
|
||||||
_vertices.SetColor(pos + 4, Color);
|
_vertices.SetColor(pos + 4, Color);
|
||||||
_vertices.SetNormal(pos + 4, Vector3.Right);
|
_vertices.SetNormal(pos + 4, Vector3.Right);
|
||||||
_vertices.SetTexCoord(pos + 4, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 0.0f), rightTexture));
|
_vertices.SetTexCoord(pos + 4, GraphicsHelpers.ScaleTexCoord(new Vector2(1.0f, 0.0f), rightTexture.Value));
|
||||||
|
|
||||||
_vertices.SetPosition3D(pos + 5, b.X, b.Y, b.Z);
|
_vertices.SetPosition3D(pos + 5, b.X, b.Y, b.Z);
|
||||||
_vertices.SetColor(pos + 5, Color);
|
_vertices.SetColor(pos + 5, Color);
|
||||||
_vertices.SetNormal(pos + 5, Vector3.Right);
|
_vertices.SetNormal(pos + 5, Vector3.Right);
|
||||||
_vertices.SetTexCoord(pos + 5, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), rightTexture));
|
_vertices.SetTexCoord(pos + 5, GraphicsHelpers.ScaleTexCoord(new Vector2(0.0f, 0.0f), rightTexture.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
120
Blarg.GameFramework/TileMap/Meshes/TileMeshCollection.cs
Normal file
120
Blarg.GameFramework/TileMap/Meshes/TileMeshCollection.cs
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Blarg.GameFramework.Graphics;
|
||||||
|
using Blarg.GameFramework.Graphics.Atlas;
|
||||||
|
using Blarg.GameFramework.Support;
|
||||||
|
|
||||||
|
namespace Blarg.GameFramework.TileMap.Meshes
|
||||||
|
{
|
||||||
|
public class TileMeshCollection
|
||||||
|
{
|
||||||
|
List<TileMesh> _meshes;
|
||||||
|
|
||||||
|
public readonly TextureAtlas Atlas;
|
||||||
|
|
||||||
|
public int Count
|
||||||
|
{
|
||||||
|
get { return _meshes.Count; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public TileMesh this[int index]
|
||||||
|
{
|
||||||
|
get { return _meshes[index]; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public TileMeshCollection(TextureAtlas atlas)
|
||||||
|
{
|
||||||
|
if (atlas == null)
|
||||||
|
throw new ArgumentNullException("atlas");
|
||||||
|
|
||||||
|
Atlas = atlas;
|
||||||
|
_meshes = new List<TileMesh>();
|
||||||
|
|
||||||
|
// the first mesh (index = 0) should always be a null one as this has special meaning
|
||||||
|
// in other TileMap-related objects (basically, representing empty space)
|
||||||
|
AddMesh(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TileMesh Get(Tile tile)
|
||||||
|
{
|
||||||
|
if (tile == null)
|
||||||
|
throw new ArgumentNullException("tile");
|
||||||
|
return _meshes[tile.TileIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
public int AddCube(TextureRegion? topTexture,
|
||||||
|
TextureRegion? bottomTexture,
|
||||||
|
TextureRegion? frontTexture,
|
||||||
|
TextureRegion? backTexture,
|
||||||
|
TextureRegion? leftTexture,
|
||||||
|
TextureRegion? rightTexture,
|
||||||
|
byte opaqueSides,
|
||||||
|
byte lightValue,
|
||||||
|
bool alpha,
|
||||||
|
float translucency,
|
||||||
|
Color color
|
||||||
|
)
|
||||||
|
{
|
||||||
|
byte faces = 0;
|
||||||
|
if (topTexture != null)
|
||||||
|
faces = faces.SetBit(TileMesh.SIDE_TOP);
|
||||||
|
if (bottomTexture != null)
|
||||||
|
faces = faces.SetBit(TileMesh.SIDE_BOTTOM);
|
||||||
|
if (frontTexture != null)
|
||||||
|
faces = faces.SetBit(TileMesh.SIDE_FRONT);
|
||||||
|
if (backTexture != null)
|
||||||
|
faces = faces.SetBit(TileMesh.SIDE_BACK);
|
||||||
|
if (leftTexture != null)
|
||||||
|
faces = faces.SetBit(TileMesh.SIDE_LEFT);
|
||||||
|
if (rightTexture != null)
|
||||||
|
faces = faces.SetBit(TileMesh.SIDE_RIGHT);
|
||||||
|
|
||||||
|
return AddMesh(
|
||||||
|
new CubeTileMesh(topTexture,
|
||||||
|
bottomTexture,
|
||||||
|
frontTexture,
|
||||||
|
backTexture,
|
||||||
|
leftTexture,
|
||||||
|
rightTexture,
|
||||||
|
faces,
|
||||||
|
opaqueSides,
|
||||||
|
lightValue,
|
||||||
|
alpha,
|
||||||
|
translucency,
|
||||||
|
color
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public int AddCube(TextureRegion texture,
|
||||||
|
byte faces,
|
||||||
|
byte opaqueSides,
|
||||||
|
byte lightValue,
|
||||||
|
bool alpha,
|
||||||
|
float translucency,
|
||||||
|
Color color
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return AddMesh(
|
||||||
|
new CubeTileMesh(texture,
|
||||||
|
texture,
|
||||||
|
texture,
|
||||||
|
texture,
|
||||||
|
texture,
|
||||||
|
texture,
|
||||||
|
faces,
|
||||||
|
opaqueSides,
|
||||||
|
lightValue,
|
||||||
|
alpha,
|
||||||
|
translucency,
|
||||||
|
color
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
private int AddMesh(TileMesh mesh)
|
||||||
|
{
|
||||||
|
_meshes.Add(mesh);
|
||||||
|
return _meshes.Count - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Reference in a new issue