Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- using Microsoft.Xna.Framework;
- namespace XDreamWarcraft.Tools.ADT
- {
- public class MapChunk
- {
- public ChunkStream Stream { get; set; }
- public MCNK Header { get; set; }
- public BinaryReader Reader { get; set; }
- public Vector3[] Vertices { get; private set; }
- public List<Triangle<UInt32>> Triangles { get; set; }
- public List<Vector3> VerticesList { get; private set; }
- public MapChunk(ChunkStream s, MCNK Header)
- {
- Stream = s;
- this.Header = Header;
- Reader = new BinaryReader(s);
- VerticesList = new List<Vector3>();
- }
- private static bool HasHole(uint map, int x, int y)
- {
- return ((map & 0x0000FFFF) & ((1 << x) << (y << 2))) > 0;
- }
- public void GenerateVertices()
- {
- int vertIndex = 0;
- Vertices = new Vector3[145]; //8x8 + 9x9
- for (int j = 0; j < 17; j++)
- {
- int values = j % 2 != 0 ? 8 : 9; // if j gerade -> 9 else 8
- for (int i = 0; i < values; i++)
- {
- var vertice = new Vector3
- {
- X = Header.position.X - (j * (Constant.UnitSize * 0.5f)),
- Y = Header.position.Y - (i * Constant.UnitSize),
- Z = Header.position.Z + Reader.ReadSingle()
- };
- if (values == 8)
- vertice.Y -= Constant.UnitSize * 0.5f;
- Vertices[vertIndex++] = vertice;
- }
- }
- foreach (Vector3 v in Vertices)
- VerticesList.Add(v);
- }
- public void GenerateTriangles()
- {
- Triangles = new List<Triangle<UInt32>>(64 * 4);
- for (int y = 0; y < 8; y++)
- {
- for (int x = 0; x < 8; x++)
- {
- if (HasHole(Header.holes, x / 2, y / 2))
- continue;
- var topLeft = (UInt32)((17 * y) + x);
- var topRight = (UInt32)((17 * y) + x + 1);
- var bottomLeft = (UInt32)((17 * (y + 1)) + x);
- var bottomRight = (UInt32)((17 * (y + 1) + x + 1));
- var center = (UInt32)((17 * y) + 9 + x);
- var triangleType = TriangleType.Terrain;
- // No Liquid Handler vorhanden ;)
- Triangles.Add(new Triangle<UInt32>(triangleType, topRight, topLeft, center));
- Triangles.Add(new Triangle<UInt32>(triangleType, topLeft, bottomLeft, center));
- Triangles.Add(new Triangle<UInt32>(triangleType, bottomLeft, bottomRight, center));
- Triangles.Add(new Triangle<UInt32>(triangleType, bottomRight, topRight, center));
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment