Guest User

Untitled

a guest
Oct 27th, 2012
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.05 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using Microsoft.Xna.Framework;
  7.  
  8. namespace XDreamWarcraft.Tools.ADT
  9. {
  10.     public class MapChunk
  11.     {
  12.         public ChunkStream Stream { get; set; }
  13.         public MCNK Header { get; set; }
  14.         public BinaryReader Reader { get; set; }
  15.         public Vector3[] Vertices { get; private set; }
  16.         public List<Triangle<UInt32>> Triangles { get; set; }
  17.         public List<Vector3> VerticesList { get; private set; }
  18.  
  19.         public MapChunk(ChunkStream s, MCNK Header)
  20.         {
  21.             Stream = s;
  22.             this.Header = Header;
  23.             Reader = new BinaryReader(s);
  24.             VerticesList = new List<Vector3>();
  25.         }
  26.         private static bool HasHole(uint map, int x, int y)
  27.         {
  28.             return ((map & 0x0000FFFF) & ((1 << x) << (y << 2))) > 0;
  29.         }
  30.  
  31.         public void GenerateVertices()
  32.         {
  33.             int vertIndex = 0;
  34.             Vertices = new Vector3[145]; //8x8 + 9x9
  35.  
  36.             for (int j = 0; j < 17; j++)
  37.             {
  38.                 int values = j % 2 != 0 ? 8 : 9; // if j gerade -> 9 else 8
  39.                 for (int i = 0; i < values; i++)
  40.                 {
  41.                     var vertice = new Vector3
  42.                     {
  43.                         X = Header.position.X - (j * (Constant.UnitSize * 0.5f)),
  44.                         Y = Header.position.Y - (i * Constant.UnitSize),
  45.                         Z = Header.position.Z + Reader.ReadSingle()
  46.                     };
  47.  
  48.                     if (values == 8)
  49.                         vertice.Y -= Constant.UnitSize * 0.5f;
  50.  
  51.                     Vertices[vertIndex++] = vertice;
  52.                 }
  53.             }
  54.  
  55.             foreach (Vector3 v in Vertices)
  56.                 VerticesList.Add(v);
  57.         }
  58.  
  59.         public void GenerateTriangles()
  60.         {
  61.             Triangles = new List<Triangle<UInt32>>(64 * 4);
  62.             for (int y = 0; y < 8; y++)
  63.             {
  64.                 for (int x = 0; x < 8; x++)
  65.                 {
  66.                     if (HasHole(Header.holes, x / 2, y / 2))
  67.                         continue;
  68.  
  69.                     var topLeft = (UInt32)((17 * y) + x);
  70.                     var topRight = (UInt32)((17 * y) + x + 1);
  71.                     var bottomLeft = (UInt32)((17 * (y + 1)) + x);
  72.                     var bottomRight = (UInt32)((17 * (y + 1) + x + 1));
  73.                     var center = (UInt32)((17 * y) + 9 + x);
  74.  
  75.                     var triangleType = TriangleType.Terrain;
  76.  
  77.                     // No Liquid Handler vorhanden ;)
  78.  
  79.                     Triangles.Add(new Triangle<UInt32>(triangleType, topRight, topLeft, center));
  80.                     Triangles.Add(new Triangle<UInt32>(triangleType, topLeft, bottomLeft, center));
  81.                     Triangles.Add(new Triangle<UInt32>(triangleType, bottomLeft, bottomRight, center));
  82.                     Triangles.Add(new Triangle<UInt32>(triangleType, bottomRight, topRight, center));
  83.                 }
  84.             }
  85.         }
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment