static LUtfNode DefaultMaterialNode(LUtfNode parent, string name, int i) { var matnode = new LUtfNode() { Name = name, Parent = parent }; matnode.Children = new List <LUtfNode>(); matnode.Children.Add(new LUtfNode() { Name = "Type", Parent = matnode, Data = Encoding.ASCII.GetBytes("DcDt") }); matnode.Children.Add(new LUtfNode() { Name = "Dc", Parent = matnode, Data = UnsafeHelpers.CastArray(matColors[i % matColors.Length]) }); matnode.Children.Add(new LUtfNode() { Name = "Dt_name", Parent = matnode, Data = Encoding.ASCII.GetBytes(name + ".dds") }); matnode.Children.Add(new LUtfNode() { Name = "Dt_flags", Parent = matnode, Data = BitConverter.GetBytes(64) }); return(matnode); }
static LUtfNode DefaultMaterialNode(LUtfNode parent, ColladaMaterial mat, int i) { var matnode = new LUtfNode() { Name = mat.Name, Parent = parent }; matnode.Children = new List <LUtfNode>(); matnode.Children.Add(new LUtfNode() { Name = "Type", Parent = matnode, Data = Encoding.ASCII.GetBytes("DcDt") }); var arr = new float[] { mat.Dc.R, mat.Dc.G, mat.Dc.B }; matnode.Children.Add(new LUtfNode() { Name = "Dc", Parent = matnode, Data = UnsafeHelpers.CastArray(arr) }); matnode.Children.Add(new LUtfNode() { Name = "Dt_name", Parent = matnode, Data = Encoding.ASCII.GetBytes(mat.Name + ".dds") }); matnode.Children.Add(new LUtfNode() { Name = "Dt_flags", Parent = matnode, Data = BitConverter.GetBytes(64) }); return(matnode); }
static void Export3DB(string mdlName, LUtfNode node3db, OutModel mdl, LUtfNode vmeshlibrary = null) { var vms = vmeshlibrary ?? new LUtfNode() { Name = "VMeshLibrary", Parent = node3db, Children = new List<LUtfNode>() }; for (int i = 0; i < mdl.LODs.Count; i++) { var n = new LUtfNode() { Name = string.Format("{0}-{1}.lod{2}.{3}.vms", mdlName, mdl.Name, i, (int)mdl.LODs[i].Geometry.FVF), Parent = vms }; n.Children = new List<LUtfNode>(); n.Children.Add(new LUtfNode() { Name = "VMeshData", Parent = n, Data = mdl.LODs[i].Geometry.VMeshData() }); vms.Children.Add(n); } if(vmeshlibrary == null) node3db.Children.Add(vms); if (mdl.LODs.Count > 1) { var multilevel = new LUtfNode() { Name = "MultiLevel", Parent = node3db }; multilevel.Children = new List<LUtfNode>(); var switch2 = new LUtfNode() { Name = "Switch2", Parent = multilevel }; multilevel.Children.Add(switch2); for (int i = 0; i < mdl.LODs.Count; i++) { var n = new LUtfNode() { Name = "Level" + i, Parent = multilevel }; n.Children = new List<LUtfNode>(); n.Children.Add(new LUtfNode() { Name = "VMeshPart", Parent = n, Children = new List<LUtfNode>() }); n.Children[0].Children.Add(new LUtfNode() { Name = "VMeshRef", Parent = n.Children[0], Data = mdl.LODs[i].Geometry.VMeshRef(string.Format("{0}-{1}.lod{2}.{3}.vms", mdlName, mdl.Name, i, (int)mdl.LODs[i].Geometry.FVF)) }); multilevel.Children.Add(n); } //Generate Switch2: TODO - Be more intelligent about this var mlfloats = new float[multilevel.Children.Count]; mlfloats[0] = 0; float cutOff = 2250; for (int i = 1; i < mlfloats.Length - 1; i++) { mlfloats[i] = cutOff; cutOff *= 2; } mlfloats[mlfloats.Length - 1] = 1000000; switch2.Data = UnsafeHelpers.CastArray(mlfloats); node3db.Children.Add(multilevel); } else { var part = new LUtfNode() { Name = "VMeshPart", Parent = node3db }; part.Children = new List<LUtfNode>(); part.Children.Add(new LUtfNode() { Name = "VMeshRef", Parent = part, Data = mdl.LODs[0].Geometry.VMeshRef(string.Format("{0}-{1}.lod0.{2}.vms", mdlName, mdl.Name, (int)mdl.LODs[0].Geometry.FVF)) }); node3db.Children.Add(part); } }
public void HardpointsToNodes(List <Hardpoint> hardpoints) { if (hardpoints.Count == 0) { if (HardpointsNode != null) { Node.Children.Remove(HardpointsNode); HardpointsNode = null; } return; } if (HardpointsNode == null) { HardpointsNode = new LUtfNode() { Name = "Hardpoints", Parent = Node }; Node.Children.Add(HardpointsNode); } HardpointsNode.Children = new List <LUtfNode>(); LUtfNode fix = null; LUtfNode rev = null; var hps = hardpoints.Select(x => x.Definition); if (hps.Any((x) => x is FixedHardpointDefinition)) { fix = new LUtfNode() { Name = "Fixed", Parent = Node }; fix.Children = new List <LUtfNode>(); HardpointsNode.Children.Add(fix); } if (hps.Any((x) => x is RevoluteHardpointDefinition)) { rev = new LUtfNode() { Name = "Revolute", Parent = Node }; rev.Children = new List <LUtfNode>(); HardpointsNode.Children.Add(rev); } foreach (var hp in hps) { var node = new LUtfNode() { Name = hp.Name, Children = new List <LUtfNode>() }; node.Children.Add(new LUtfNode() { Name = "Orientation", Parent = node, Data = UnsafeHelpers.CastArray(new float[] { hp.Orientation.M11, hp.Orientation.M21, hp.Orientation.M31, hp.Orientation.M12, hp.Orientation.M22, hp.Orientation.M32, hp.Orientation.M13, hp.Orientation.M23, hp.Orientation.M33 }) }); node.Children.Add(new LUtfNode() { Name = "Position", Parent = node, Data = UnsafeHelpers.CastArray(new float[] { hp.Position.X, hp.Position.Y, hp.Position.Z }) }); if (hp is FixedHardpointDefinition) { node.Parent = fix; fix.Children.Add(node); } else { var revolute = (RevoluteHardpointDefinition)hp; node.Children.Add(new LUtfNode() { Name = "Axis", Parent = node, Data = UnsafeHelpers.CastArray(new float[] { revolute.Axis.X, revolute.Axis.Y, revolute.Axis.Z }) }); node.Children.Add(new LUtfNode() { Name = "Min", Parent = node, Data = BitConverter.GetBytes(revolute.Min) }); node.Children.Add(new LUtfNode() { Name = "Max", Parent = node, Data = BitConverter.GetBytes(revolute.Max) }); node.Parent = rev; rev.Children.Add(node); } } }
static void Export3DB(LUtfNode node3db, OutModel mdl) { var vms = new LUtfNode() { Name = "VMeshLibrary", Parent = node3db }; vms.Children = new List <LUtfNode>(); for (int i = 0; i < mdl.LODs.Count; i++) { var n = new LUtfNode() { Name = string.Format("{0}.level{1}.vms", mdl.Name, i), Parent = vms }; n.Children = new List <LUtfNode>(); n.Children.Add(new LUtfNode() { Name = "VMeshData", Parent = n, Data = mdl.LODs[i].Geometry.VMeshData() }); vms.Children.Add(n); } node3db.Children.Add(vms); if (mdl.LODs.Count > 1) { var multilevel = new LUtfNode() { Name = "MultiLevel", Parent = node3db }; multilevel.Children = new List <LUtfNode>(); var switch2 = new LUtfNode() { Name = "Switch2", Parent = multilevel }; switch2.Data = UnsafeHelpers.CastArray(new float[] { 0, 4000 }); multilevel.Children.Add(switch2); for (int i = 0; i < mdl.LODs.Count; i++) { var n = new LUtfNode() { Name = "Level" + i, Parent = multilevel }; n.Children = new List <LUtfNode>(); n.Children.Add(new LUtfNode() { Name = "VMeshPart", Parent = n, Children = new List <LUtfNode>() }); n.Children[0].Children.Add(new LUtfNode() { Name = "VMeshRef", Parent = n.Children[0], Data = mdl.LODs[i].Geometry.VMeshRef(string.Format("{0}.level{1}.vms", mdl.Name, i)) }); multilevel.Children.Add(n); } node3db.Children.Add(multilevel); } else { var part = new LUtfNode() { Name = "VMeshPart", Parent = node3db }; part.Children = new List <LUtfNode>(); part.Children.Add(new LUtfNode() { Name = "VMeshRef", Parent = part, Data = mdl.LODs[0].Geometry.VMeshRef(string.Format("{0}.level0.vms", mdl.Name)) }); node3db.Children.Add(part); } }