summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeki <treeki@gmail.com>2011-02-12 13:53:39 +0100
committerTreeki <treeki@gmail.com>2011-02-12 13:53:39 +0100
commitf809b701c4116fc993d449a8b36e395b55984f42 (patch)
tree5ee4417571b97dfcee4b17a8230ef16737a7382e
parent3b5195f442b263807dda1675b05e0301c902c58f (diff)
downloadnw4rtools-f809b701c4116fc993d449a8b36e395b55984f42.tar.gz
nw4rtools-f809b701c4116fc993d449a8b36e395b55984f42.zip
half-assed node support
-rw-r--r--NW4RTools.userprefs14
-rw-r--r--NW4RTools/BrresReader.cs2
-rw-r--r--NW4RTools/ColladaWriter.cs104
-rw-r--r--NW4RTools/NW4RTools.pidbbin525316 -> 525525 bytes
-rwxr-xr-xNW4RTools/bin/Debug/NW4RTools.dllbin157696 -> 158720 bytes
-rw-r--r--NW4RTools/bin/Debug/NW4RTools.dll.mdbbin87412 -> 87798 bytes
-rw-r--r--TestApp/Main.cs8
-rw-r--r--TestApp/TestApp.pidbbin3039 -> 3039 bytes
-rwxr-xr-xTestApp/bin/Debug/NW4RTools.dllbin157696 -> 158720 bytes
-rw-r--r--TestApp/bin/Debug/NW4RTools.dll.mdbbin87412 -> 87798 bytes
-rwxr-xr-xTestApp/bin/Debug/TestApp.exebin4096 -> 4096 bytes
-rw-r--r--TestApp/bin/Debug/TestApp.exe.mdbbin464 -> 479 bytes
12 files changed, 112 insertions, 16 deletions
diff --git a/NW4RTools.userprefs b/NW4RTools.userprefs
index 5529d07..895a11a 100644
--- a/NW4RTools.userprefs
+++ b/NW4RTools.userprefs
@@ -1,11 +1,11 @@
<Properties>
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
- <MonoDevelop.Ide.Workbench ActiveDocument="TestApp/Main.cs">
+ <MonoDevelop.Ide.Workbench ActiveDocument="NW4RTools/BrresReader.cs">
<Files>
- <File FileName="NW4RTools/ObjWriter.cs" Line="158" Column="7" />
- <File FileName="TestApp/Main.cs" Line="10" Column="27" />
- <File FileName="NW4RTools/BrresReader.cs" Line="657" Column="11" />
- <File FileName="NW4RTools/Models/Shape.cs" Line="18" Column="28" />
+ <File FileName="NW4RTools/ObjWriter.cs" Line="164" Column="3" />
+ <File FileName="TestApp/Main.cs" Line="10" Column="30" />
+ <File FileName="NW4RTools/BrresReader.cs" Line="652" Column="66" />
+ <File FileName="NW4RTools/Models/Shape.cs" Line="30" Column="1" />
<File FileName="NW4RTools/Models/Model.cs" Line="33" Column="39" />
<File FileName="NW4RTools/InputStream.cs" Line="1" Column="1" />
<File FileName="NW4RTools/Models/ByteCode.cs" Line="1" Column="1" />
@@ -13,6 +13,10 @@
<File FileName="NW4RTools/Logger.cs" Line="1" Column="1" />
<File FileName="NW4RTools/Enums.cs" Line="1" Column="1" />
<File FileName="NW4RTools/Models/VertexData.cs" Line="23" Column="6" />
+ <File FileName="NW4RTools/Models/Node.cs" Line="27" Column="1" />
+ <File FileName="NW4RTools/Models/Material.cs" Line="1" Column="1" />
+ <File FileName="NW4RTools/ColladaWriter.cs" Line="184" Column="15" />
+ <File FileName="NW4RTools/ResDict.cs" Line="1" Column="1" />
</Files>
</MonoDevelop.Ide.Workbench>
<MonoDevelop.Ide.DebuggingService.Breakpoints>
diff --git a/NW4RTools/BrresReader.cs b/NW4RTools/BrresReader.cs
index 288ff1e..fa3bf26 100644
--- a/NW4RTools/BrresReader.cs
+++ b/NW4RTools/BrresReader.cs
@@ -298,6 +298,8 @@ namespace NW4RTools {
loadInfo.Name = ins.At(startPos + nameOffset - 4).ReadName();
NodeLoadData[startPos] = loadInfo;
+ Int32 extraDataOffset = ins.ReadInt32();
+
n.NodeMatrix = ins.ReadMatrix();
n.NodeInvMatrix = ins.ReadMatrix();
diff --git a/NW4RTools/ColladaWriter.cs b/NW4RTools/ColladaWriter.cs
index 794226f..c9412d3 100644
--- a/NW4RTools/ColladaWriter.cs
+++ b/NW4RTools/ColladaWriter.cs
@@ -51,7 +51,7 @@ namespace NW4RTools {
}
LibGeometries.geometry = GeometryList.ToArray();
-
+
// SHAPES ARE DONE.
// Next up: Visual Scenes (I will just create one atm)
@@ -65,22 +65,108 @@ namespace NW4RTools {
mainScene.id = "RootNode";
mainScene.name = "RootNode";
var mainSceneNodeList = new List<node>();
-
- // Right now: just make a node for each shape.
+
+ // OK, so here's what's up: first off, we must create a definition for every node
+ var NodeDefs = new Dictionary<Node, node>();
+
+ foreach (var kv in CurrentModel.Nodes) {
+ string nodeName = kv.Key;
+ Node origNode = kv.Value;
+ var cNode = new node();
+
+ cNode.id = nodeName;
+ cNode.name = nodeName;
+ //cNode.type = NodeType.JOINT;
+ cNode.node1 = new node[0];
+
+ /*var origMatrix = origNode.NodeMatrix;
+ var nodeMatrix = new matrix();
+ nodeMatrix.Values = new double[] {
+ origMatrix.v00, origMatrix.v01, origMatrix.v02, origMatrix.v03,
+ origMatrix.v10, origMatrix.v11, origMatrix.v12, origMatrix.v13,
+ origMatrix.v20, origMatrix.v21, origMatrix.v22, origMatrix.v23,
+ 0.0, 0.0, 0.0, 1.0
+ };
+
+ cNode.Items = new object[] { nodeMatrix };
+ cNode.ItemsElementName = new ItemsChoiceType2[] { ItemsChoiceType2.matrix };*/
+
+ var tScale = new TargetableFloat3();
+ var tRotate = new rotate();
+ var tTranslate = new TargetableFloat3();
+
+ tScale.Values = new double[] {
+ origNode.Scale.x, origNode.Scale.y, origNode.Scale.z
+ };
+
+ tRotate.Values = new double[] {
+ 0, 0, 0, 0 // TODO
+ };
+
+ tTranslate.Values = new double[] {
+ origNode.Translation.x, origNode.Translation.y, origNode.Translation.z
+ };
+
+ cNode.Items = new object[] { tScale, tRotate, tTranslate };
+ cNode.ItemsElementName = new ItemsChoiceType2[] {
+ ItemsChoiceType2.scale, ItemsChoiceType2.rotate,
+ ItemsChoiceType2.translate
+ };
+
+ NodeDefs[origNode] = cNode;
+ }
+
+ // Now add them to the hierarchy
+ foreach (var kv in NodeDefs) {
+ Node origNode = kv.Key;
+ node cNode = kv.Value;
+
+ if (origNode.Parent == null) {
+ mainSceneNodeList.Add(cNode);
+ } else {
+ var parentNode = NodeDefs[origNode.Parent];
+
+ // this is stupid, thanks C#
+ node[] nodeArrayCopy = parentNode.node1;
+ Array.Resize<node>(ref nodeArrayCopy, nodeArrayCopy.Length + 1);
+ nodeArrayCopy[nodeArrayCopy.Length - 1] = cNode;
+ parentNode.node1 = nodeArrayCopy;
+ }
+ }
+
+ // Apply shapes to nodes
foreach (var kv in CurrentModel.Shapes) {
+ Shape shape = kv.Value;
+ Node origNode = CurrentModel.Nodes[CurrentModel.MatrixIDtoNodeID[shape.MatrixID]];
+ node cNode = NodeDefs[origNode];
+
+ var newGeoEntry = new instance_geometry();
+ newGeoEntry.name = kv.Key;
+ newGeoEntry.url = String.Format("#{0}-lib", kv.Key);
+
+ instance_geometry[] geoArrayCopy = cNode.instance_geometry;
+ if (geoArrayCopy == null)
+ geoArrayCopy = new instance_geometry[1];
+ else
+ Array.Resize<instance_geometry>(ref geoArrayCopy, geoArrayCopy.Length + 1);
+ geoArrayCopy[geoArrayCopy.Length - 1] = newGeoEntry;
+ cNode.instance_geometry = geoArrayCopy;
+ }
+
+ /*foreach (var kv in CurrentModel.Shapes) {
var thisNode = new node();
-
+
thisNode.id = kv.Key;
thisNode.name = kv.Key;
thisNode.instance_geometry = new instance_geometry[1];
thisNode.instance_geometry[0] = new instance_geometry();
thisNode.instance_geometry[0].url = String.Format("#{0}-lib", kv.Key);
-
+
mainSceneNodeList.Add(thisNode);
- }
+ }*/
mainScene.node = mainSceneNodeList.ToArray();
-
+
// Finally, create a scene
Collada.scene = new COLLADAScene();
@@ -192,7 +278,7 @@ namespace NW4RTools {
nrmArray.Values[dest++] = data[j];
}
}
-
+
nrmSource.Item = nrmArray;
// Write normal technique
@@ -368,7 +454,7 @@ namespace NW4RTools {
Console.WriteLine("UNIMPLEMENTED PRIMITIVE TYPE");
- return;
+ return geo;
}
}
diff --git a/NW4RTools/NW4RTools.pidb b/NW4RTools/NW4RTools.pidb
index d136108..c5ab445 100644
--- a/NW4RTools/NW4RTools.pidb
+++ b/NW4RTools/NW4RTools.pidb
Binary files differ
diff --git a/NW4RTools/bin/Debug/NW4RTools.dll b/NW4RTools/bin/Debug/NW4RTools.dll
index 85d9abd..1b431d2 100755
--- a/NW4RTools/bin/Debug/NW4RTools.dll
+++ b/NW4RTools/bin/Debug/NW4RTools.dll
Binary files differ
diff --git a/NW4RTools/bin/Debug/NW4RTools.dll.mdb b/NW4RTools/bin/Debug/NW4RTools.dll.mdb
index f87c22c..d635b92 100644
--- a/NW4RTools/bin/Debug/NW4RTools.dll.mdb
+++ b/NW4RTools/bin/Debug/NW4RTools.dll.mdb
Binary files differ
diff --git a/TestApp/Main.cs b/TestApp/Main.cs
index a4d9545..1196f08 100644
--- a/TestApp/Main.cs
+++ b/TestApp/Main.cs
@@ -7,9 +7,13 @@ namespace TestApp {
public static void Main(string[] args) {
string mdlPath = "/home/me/Games/Newer/ModelRev/";
- string mdlName = "CS_W1";
+ // NOTE: CS_W7 is broken!!
+
+ string mdlName = "CS_W7";
//string mdlName = "bgB_4502";
+ string whatever = (mdlName == "CS_W2" || mdlName == "CS_W3" || mdlName == "CS_W6") ? "a" : "";
+
byte[] file = File.ReadAllBytes(mdlPath + mdlName + ".brres");
ResFile rf = BrresReader.LoadFile(file);
@@ -17,7 +21,7 @@ namespace TestApp {
var objFile = File.Open(mdlPath + mdlName + ".dae", FileMode.OpenOrCreate);
//var sw = new StreamWriter(objFile);
//ObjWriter.WriteModel(sw, rf, mdlName);
- ColladaWriter.WriteModel(objFile, rf, mdlName);
+ ColladaWriter.WriteModel(objFile, rf, mdlName + whatever);
objFile.Close();
}
}
diff --git a/TestApp/TestApp.pidb b/TestApp/TestApp.pidb
index e277998..d59d1d6 100644
--- a/TestApp/TestApp.pidb
+++ b/TestApp/TestApp.pidb
Binary files differ
diff --git a/TestApp/bin/Debug/NW4RTools.dll b/TestApp/bin/Debug/NW4RTools.dll
index 85d9abd..1b431d2 100755
--- a/TestApp/bin/Debug/NW4RTools.dll
+++ b/TestApp/bin/Debug/NW4RTools.dll
Binary files differ
diff --git a/TestApp/bin/Debug/NW4RTools.dll.mdb b/TestApp/bin/Debug/NW4RTools.dll.mdb
index f87c22c..d635b92 100644
--- a/TestApp/bin/Debug/NW4RTools.dll.mdb
+++ b/TestApp/bin/Debug/NW4RTools.dll.mdb
Binary files differ
diff --git a/TestApp/bin/Debug/TestApp.exe b/TestApp/bin/Debug/TestApp.exe
index c53c4cf..7dc9d18 100755
--- a/TestApp/bin/Debug/TestApp.exe
+++ b/TestApp/bin/Debug/TestApp.exe
Binary files differ
diff --git a/TestApp/bin/Debug/TestApp.exe.mdb b/TestApp/bin/Debug/TestApp.exe.mdb
index 6f4ba2c..1e26877 100644
--- a/TestApp/bin/Debug/TestApp.exe.mdb
+++ b/TestApp/bin/Debug/TestApp.exe.mdb
Binary files differ