예제 #1
0
        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);
        }
예제 #3
0
 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);
     }
 }
예제 #4
0
        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);
                }
            }
        }
예제 #5
0
        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);
            }
        }