Skip to content

Commit

Permalink
This is why you should always "rescan changes" ...
Browse files Browse the repository at this point in the history
  • Loading branch information
fubeca committed Aug 17, 2010
1 parent 4740a9f commit a11602c
Show file tree
Hide file tree
Showing 10 changed files with 363 additions and 275 deletions.
4 changes: 3 additions & 1 deletion TerrainDisplay/MPQ/ITerrainManager.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Collections.Generic;
using TerrainDisplay.Collision;
using WCell.Util.Graphics;
using TerrainDisplay.MPQ.ADT;
using TerrainDisplay.MPQ.M2;
Expand All @@ -14,6 +15,7 @@ public interface ITerrainManager
IWMOManager WMOManager { get; }
IM2Manager M2Manager { get; }
NavMeshManager MeshManager { get; }
SelectedTriangleManager SelectedTriangleManager { get; }
WDTFile WDT { get; }

void LoadTile(TileIdentifier tileId);
Expand Down
6 changes: 4 additions & 2 deletions TerrainDisplay/MPQ/M2/M2Manager.cs
Expand Up @@ -114,8 +114,10 @@ private void Process(MapDoodadDefinition doodadDefinition)
tempIndices.Add(tri[0]);
}

var currentM2 = Transform(model, tempIndices, doodadDefinition);

var currentM2 = Transform(model, tempIndices, doodadDefinition);

// Ignore models with no bounding volumes
if (currentM2.Vertices.Count < 1) return;
M2s.Add(currentM2);
}

Expand Down
2 changes: 1 addition & 1 deletion TerrainDisplay/MPQ/M2/M2Renderer.cs
Expand Up @@ -16,7 +16,7 @@ private static Color M2Color

public M2Renderer(Game game, IM2Manager manager) : base(game)
{
_manager = manager;
_manager = manager;
}

protected override void BuildVerticiesAndIndicies()
Expand Down
14 changes: 11 additions & 3 deletions TerrainDisplay/MPQ/MpqTerrainManager.cs
@@ -1,7 +1,8 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using System.Windows.Forms;
using TerrainDisplay.Collision;
using WCell.Util.Graphics;
using TerrainDisplay.MPQ.ADT;
using TerrainDisplay.MPQ.M2;
Expand Down Expand Up @@ -40,8 +41,14 @@ public IM2Manager M2Manager
public NavMeshManager MeshManager
{
get { return _meshManager; }
}

}

private readonly SelectedTriangleManager _selectedTriangleManager;
public SelectedTriangleManager SelectedTriangleManager
{
get { return _selectedTriangleManager; }
}

private readonly WDTFile _wdtFile;
public WDTFile WDT
{
Expand Down Expand Up @@ -74,6 +81,7 @@ public MpqTerrainManager(string baseFileDirectory, TileIdentifier tileId)
_wmoManager = new WMOManager(baseFileDirectory);
_m2Manager = new M2Manager(baseFileDirectory);
_meshManager = new NavMeshManager();
_selectedTriangleManager = new SelectedTriangleManager(_adtManager);
}

public void LoadTile(TileIdentifier tileId)
Expand Down
9 changes: 1 addition & 8 deletions TerrainDisplay/MPQ/WMO/WMOGroup.cs
Expand Up @@ -5,14 +5,7 @@
using TerrainDisplay.MPQ.WMO.Components;

namespace TerrainDisplay.MPQ.WMO
{
public struct Index3
{
public short Index0;
public short Index1;
public short Index2;
}

{
public class WMOGroup
{
public uint Version;
Expand Down
112 changes: 84 additions & 28 deletions TerrainDisplay/MPQ/WMO/WMOManager.cs
Expand Up @@ -144,15 +144,15 @@ private void GenerateRenderVerticesAndIndices()

var offset = 0;
foreach (var wmo in WMOs)
{
for (var v = 0; v < wmo.WmoVertices.Count; v++)
{
wmoVertices.Add(wmo.WmoVertices[v]);
}

for (var i = 0; i < wmo.WmoIndices.Count; i++)
{
wmoIndices.Add(wmo.WmoIndices[i] + offset);
{
for (var v = 0; v < wmo.WmoVertices.Count; v++)
{
wmoVertices.Add(wmo.WmoVertices[v]);
}

for (var i = 0; i < wmo.WmoIndices.Count; i++)
{
wmoIndices.Add(wmo.WmoIndices[i] + offset);
}
offset = wmoVertices.Count;
}
Expand Down Expand Up @@ -248,32 +248,88 @@ private static void TransformWMO(MapObjectDefinition currentMODF, WMORoot curren
//var rotateX = Matrix.CreateRotationX(currentMODF.OrientationC * RadiansPerDegree);
//var rotateY = Matrix.CreateRotationY(currentMODF.OrientationA * RadiansPerDegree);

int offset;
int offset;


foreach (var currentGroup in currentWMO.Groups)
{
if (currentGroup == null) continue;
//if (!currentGroup.Header.HasMLIQ) continue;
//if (!currentGroup.Header.HasMLIQ) continue;

var usedTris = new Dictionary<Index3, int>();
var wmoTrisUnique = new List<Index3>();

foreach (var node in currentGroup.BSPNodes)
{
if (node.TriIndices == null) continue;
foreach (var index3 in node.TriIndices)
{
if (usedTris.ContainsKey(index3)) continue;

usedTris.Add(index3, 0);
wmoTrisUnique.Add(index3);
}
}

var newIndices = new Dictionary<int, int>();
foreach (var tri in wmoTrisUnique)
{
int newIndex;
if (!newIndices.TryGetValue(tri.Index0, out newIndex))
{
newIndex = currentWMO.WmoVertices.Count;
newIndices.Add(tri.Index0, newIndex);

var basePosVec = currentGroup.Vertices[tri.Index0];
var rotatedPosVec = Vector3.Transform(basePosVec, rotateZ);
var finalPosVector = rotatedPosVec + origin;
currentWMO.WmoVertices.Add(finalPosVector);
}
currentWMO.WmoIndices.Add(newIndex);

if (!newIndices.TryGetValue(tri.Index1, out newIndex))
{
newIndex = currentWMO.WmoVertices.Count;
newIndices.Add(tri.Index1, newIndex);

var basePosVec = currentGroup.Vertices[tri.Index1];
var rotatedPosVec = Vector3.Transform(basePosVec, rotateZ);
var finalPosVector = rotatedPosVec + origin;
currentWMO.WmoVertices.Add(finalPosVector);
}
currentWMO.WmoIndices.Add(newIndex);

if (!newIndices.TryGetValue(tri.Index2, out newIndex))
{
newIndex = currentWMO.WmoVertices.Count;
newIndices.Add(tri.Index2, newIndex);

var basePosVec = currentGroup.Vertices[tri.Index2];
var rotatedPosVec = Vector3.Transform(basePosVec, rotateZ);
var finalPosVector = rotatedPosVec + origin;
currentWMO.WmoVertices.Add(finalPosVector);
}
currentWMO.WmoIndices.Add(newIndex);
}

offset = currentWMO.WmoVertices.Count;
for (var i = 0; i < currentGroup.Vertices.Count; i++)
{
var basePosVector = currentGroup.Vertices[i];
var rotatedPosVector = Vector3.Transform(basePosVector, rotateZ);
var finalPosVector = rotatedPosVector + origin;
//for (var i = 0; i < currentGroup.Vertices.Count; i++)
//{
// var basePosVector = currentGroup.Vertices[i];
// var rotatedPosVector = Vector3.Transform(basePosVector, rotateZ);
// var finalPosVector = rotatedPosVector + origin;

//var baseNormVector = currentGroup.Normals[i];
//var rotatedNormVector = Vector3.Transform(baseNormVector, rotateZ);
// //var baseNormVector = currentGroup.Normals[i];
// //var rotatedNormVector = Vector3.Transform(baseNormVector, rotateZ);

currentWMO.WmoVertices.Add(finalPosVector);
}

for (var index = 0; index < currentGroup.Indices.Count; index++)
{
currentWMO.WmoIndices.Add(currentGroup.Indices[index].Index0 + offset);
currentWMO.WmoIndices.Add(currentGroup.Indices[index].Index1 + offset);
currentWMO.WmoIndices.Add(currentGroup.Indices[index].Index2 + offset);
}
// currentWMO.WmoVertices.Add(finalPosVector);
//}

//for (var index = 0; index < currentGroup.Indices.Count; index++)
//{
// currentWMO.WmoIndices.Add(currentGroup.Indices[index].Index0 + offset);
// currentWMO.WmoIndices.Add(currentGroup.Indices[index].Index1 + offset);
// currentWMO.WmoIndices.Add(currentGroup.Indices[index].Index2 + offset);
//}

// WMO Liquids
if (!currentGroup.Header.HasMLIQ) continue;
Expand Down
10 changes: 7 additions & 3 deletions TerrainDisplay/RendererBase.cs
@@ -1,7 +1,8 @@
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using TerrainDisplay.MPQ.WMO;

using TerrainDisplay.MPQ.WMO;
using TerrainDisplay.Util;

namespace TerrainDisplay
{
public abstract class RendererBase : DrawableGameComponent
Expand Down Expand Up @@ -50,7 +51,10 @@ private int[] RenderingIndices
public override void Draw(GameTime gameTime)
{
var vertices = RenderingVerticies;
var indices = RenderingIndices;
var indices = RenderingIndices;

if (vertices.IsNullOrEmpty()) return;
if (indices.IsNullOrEmpty()) return;

GraphicsDevice.DrawUserIndexedPrimitives(
PrimitiveType.TriangleList,
Expand Down

0 comments on commit a11602c

Please sign in to comment.