コード例 #1
0
        private void LoadFile()
        {
            translokator = new TranslokatorLoader(file);
            TranslokatorTree.Nodes.Clear();

            TreeNode headerData = new TreeNode("Header Data");

            headerData.Tag = translokator;

            TreeNode gridNode = new TreeNode("Grids");

            for (int i = 0; i < translokator.Grids.Length; i++)
            {
                Grid     grid  = translokator.Grids[i];
                TreeNode child = new TreeNode("Grid " + i);
                child.Tag = grid;
                gridNode.Nodes.Add(child);
            }
            TreeNode ogNode = new TreeNode("Objects Groups");

            for (int i = 0; i < translokator.ObjectGroups.Length; i++)
            {
                ObjectGroup objectGroup     = translokator.ObjectGroups[i];
                TreeNode    objectGroupNode = new TreeNode("Object Group " + i);
                objectGroupNode.Tag = objectGroup;

                for (int y = 0; y < objectGroup.Objects.Length; y++)
                {
                    ResourceTypes.Translokator.Object obj = objectGroup.Objects[y];
                    TreeNode objNode = new TreeNode(obj.Name.ToString());
                    objNode.Tag = obj;
                    objectGroupNode.Nodes.Add(objNode);

                    for (int x = 0; x < obj.Instances.Length; x++)
                    {
                        Instance instance     = obj.Instances[x];
                        TreeNode instanceNode = new TreeNode(obj.Name + " " + x);
                        instanceNode.Tag = instance;
                        objNode.Nodes.Add(instanceNode);
                    }
                }

                ogNode.Nodes.Add(objectGroupNode);
            }
            TranslokatorTree.Nodes.Add(headerData);
            TranslokatorTree.Nodes.Add(gridNode);
            TranslokatorTree.Nodes.Add(ogNode);

            Text          = Language.GetString("$TRANSLOKATOR_EDITOR");
            bIsFileEdited = false;
        }
コード例 #2
0
        public SpatialGrid(GraphicsClass InGraphics, TranslokatorLoader translokator)
        {
            OwnGraphicsClass = InGraphics;

            bIsReady   = true;
            gridBounds = translokator.Bounds;
            width      = translokator.Grids[0].Width;
            height     = translokator.Grids[0].Height;
            cellSize   = new Vector2(gridBounds.GetWidth() / width, gridBounds.GetHeight() / height);
            cells      = new SpatialCell[width * height];
            origin     = gridBounds.Minimum;

            var index = 0;

            /*for (int i = 0; i < width; i++)
             * {
             *  for (int x = 0; x < height; x++)
             *  {
             *      var extents = new BoundingBox();
             *      extents.Minimum = new Vector3(origin.X + cellSize.X * x, origin.Y + cellSize.Y * i, 10.0f);
             *      extents.Maximum = new Vector3(origin.X + cellSize.X * (x + 1), origin.Y + cellSize.Y * (i + 1), 10.0f);
             *      cells[index++] = new SpatialCell(InGraphics, extents);
             *  }
             * }
             *
             * for (int i = 0; i != translokator.ObjectGroups.Length; i++)
             * {
             *  ObjectGroup objectGroup = translokator.ObjectGroups[i];
             *
             *  for (int x = 0; x != objectGroup.NumObjects; x++)
             *  {
             *      ResourceTypes.Translokator.Object obj = objectGroup.Objects[x];
             *
             *      for (int y = 0; y != obj.NumInstances; y++)
             *      {
             *          Instance instance = obj.Instances[y];
             *          var cell = GetCell(instance.Position);
             *          RenderBoundingBox box = new RenderBoundingBox();
             *          box.SetTransform(Matrix4x4.CreateTranslation(instance.Position));
             *          box.Init(new BoundingBox(-Vector3.One, Vector3.One));
             *          cells[cell].AddAsset(box, RefManager.GetNewRefID());
             *      }
             *  }
             * }*/
        }
コード例 #3
0
ファイル: SpatialGrid.cs プロジェクト: nptr/MafiaToolkit
        public SpatialGrid(TranslokatorLoader translokator)
        {
            bIsReady   = true;
            gridBounds = translokator.Bounds;
            width      = translokator.Grids[0].Width;
            height     = translokator.Grids[0].Height;
            cellSize   = new Vector2(gridBounds.Width / width, gridBounds.Height / height);
            cells      = new SpatialCell[width * height];
            origin     = gridBounds.Minimum;

            var index = 0;

            for (int i = 0; i < width; i++)
            {
                for (int x = 0; x < height; x++)
                {
                    var extents = new BoundingBox();
                    extents.Minimum = new Vector3(origin.X + cellSize.X * x, origin.Y + cellSize.Y * i, 10.0f);
                    extents.Maximum = new Vector3(origin.X + cellSize.X * (x + 1), origin.Y + cellSize.Y * (i + 1), 10.0f);
                    cells[index++]  = new SpatialCell(extents);
                }
            }

            for (int i = 0; i != translokator.ObjectGroups.Length; i++)
            {
                ObjectGroup objectGroup = translokator.ObjectGroups[i];

                for (int x = 0; x != objectGroup.NumObjects; x++)
                {
                    ResourceTypes.Translokator.Object obj = objectGroup.Objects[x];

                    for (int y = 0; y != obj.NumInstances; y++)
                    {
                        Instance          instance = obj.Instances[y];
                        var               cell     = GetCell(instance.Position);
                        RenderBoundingBox box      = new RenderBoundingBox();
                        box.SetTransform(Matrix.Translation(instance.Position));
                        box.Init(new BoundingBox(-Vector3.One, Vector3.One));
                        cells[cell].AddAsset(box, StringHelpers.GetNewRefID());
                    }
                }
            }
        }
コード例 #4
0
        public static void BuildData()
        {
            List <FileInfo>       vbps = new List <FileInfo>();
            List <FileInfo>       ibps = new List <FileInfo>();
            List <ItemDescLoader> ids  = new List <ItemDescLoader>();
            List <Actor>          act  = new List <Actor>();
            List <NAVData>        aiw  = new List <NAVData>();
            List <NAVData>        obj  = new List <NAVData>();

            DirectoryInfo dirInfo = new DirectoryInfo(ScenePath);

            FileInfo[] files = dirInfo.GetFiles("*", SearchOption.AllDirectories);

            XmlDocument document = new XmlDocument();

            document.Load(ScenePath + "/SDSContent.xml");
            XPathNavigator nav   = document.CreateNavigator();
            var            nodes = nav.Select("/SDSResource/ResourceEntry");

            while (nodes.MoveNext() == true)
            {
                string type;
                string name;

                nodes.Current.MoveToFirstChild();
                type = nodes.Current.Value;
                nodes.Current.MoveToNext();
                name = ScenePath + "/" + nodes.Current.Value;

                if (type == "IndexBufferPool")
                {
                    ibps.Add(new FileInfo(name));
                }
                else if (type == "VertexBufferPool")
                {
                    vbps.Add(new FileInfo(name));
                }
                else if (type == "Actors")
                {
                    try
                    {
                        act.Add(new Actor(name));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Failed to read actor {0}", name);
                    }
                }
                else if (type == "FrameResource")
                {
                    FrameResource = new FrameResource(name);
                }
                else if (type == "ItemDesc")
                {
                    ids.Add(new ItemDescLoader(name));
                }
                else if (type == "FrameNameTable")
                {
                    FrameNameTable = new FrameNameTable(name);
                }
                else if (type == "Collisions")
                {
                    Collisions = new Collision(name);
                }
                else if (type == "AnimalTrafficPaths")
                {
                    try
                    {
                        ATLoader = new AnimalTrafficLoader(new FileInfo(name));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Failed to read AnimalTrafficPaths {0}", ATLoader);
                    }
                }
                else if (nodes.Current.Value == "roadmap.gsd")
                {
                    roadMap = new Roadmap(new FileInfo(name));
                }
                else if (type == "NAV_OBJ_DATA")
                {
                    obj.Add(new NAVData(new FileInfo(name)));
                }
                else if (type == "Translokator")
                {
                    Translokator = new TranslokatorLoader(new FileInfo(name));
                }
            }

            IndexBufferPool  = new IndexBufferManager(ibps);
            VertexBufferPool = new VertexBufferManager(vbps);
            ItemDescs        = ids.ToArray();
            Actors           = act.ToArray();
            OBJData          = obj.ToArray();
        }
コード例 #5
0
        public static void BuildData(bool forceBigEndian)
        {
            List <FileInfo>       vbps = new List <FileInfo>();
            List <FileInfo>       ibps = new List <FileInfo>();
            List <ItemDescLoader> ids  = new List <ItemDescLoader>();
            List <Actor>          act  = new List <Actor>();
            List <NAVData>        aiw  = new List <NAVData>();
            List <NAVData>        obj  = new List <NAVData>();

            DirectoryInfo dirInfo = new DirectoryInfo(ScenePath);

            FileInfo[] files = dirInfo.GetFiles("*", SearchOption.AllDirectories);

            XmlDocument document = new XmlDocument();

            document.Load(ScenePath + "/SDSContent.xml");
            XPathNavigator nav   = document.CreateNavigator();
            var            nodes = nav.Select("/SDSResource/ResourceEntry");

            isBigEndian = forceBigEndian;
            Utils.Models.VertexTranslator.IsBigEndian = forceBigEndian;
            if (isBigEndian)
            {
                MessageBox.Show("Detected 'Big Endian' formats. This will severely effect functionality!", "Toolkit", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            while (nodes.MoveNext() == true)
            {
                string type;
                string name;

                nodes.Current.MoveToFirstChild();
                type = nodes.Current.Value;
                nodes.Current.MoveToNext();
                name = ScenePath + "/" + nodes.Current.Value;

                if (type == "IndexBufferPool")
                {
                    ibps.Add(new FileInfo(name));
                }
                else if (type == "VertexBufferPool")
                {
                    vbps.Add(new FileInfo(name));
                }
                else if (type == "Actors" && !isBigEndian)
                {
                    try
                    {
                        act.Add(new Actor(name));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Failed to read actor {0}", name);
                    }
                }
                else if (type == "FrameResource")
                {
                    FrameResource = new FrameResource(name, isBigEndian);
                }
                else if (type == "ItemDesc" && !isBigEndian)
                {
                    ids.Add(new ItemDescLoader(name));
                }
                else if (type == "FrameNameTable")
                {
                    FrameNameTable = new FrameNameTable(name, isBigEndian);
                }
                else if (type == "Collisions" && !isBigEndian)
                {
                    Collisions = new Collision(name);
                }
                else if (type == "AnimalTrafficPaths" && !isBigEndian)
                {
                    try
                    {
                        ATLoader = new AnimalTrafficLoader(new FileInfo(name));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Failed to read AnimalTrafficPaths {0}", ex.Message);
                    }
                }
                else if (nodes.Current.Value == "roadmap.gsd" && !isBigEndian)
                {
                    roadMap = new Roadmap(new FileInfo(name));
                }
                //else if (type == "NAV_OBJ_DATA" && !isBigEndian)
                //    obj.Add(new NAVData(new FileInfo(name)));
                else if (type == "Translokator" && !isBigEndian)
                {
                    Translokator = new TranslokatorLoader(new FileInfo(name));
                }
            }

            IndexBufferPool  = new IndexBufferManager(ibps, isBigEndian);
            VertexBufferPool = new VertexBufferManager(vbps, isBigEndian);
            ItemDescs        = ids.ToArray();
            Actors           = act.ToArray();
            OBJData          = obj.ToArray();
        }
コード例 #6
0
 public TreeNode SetTranslokatorGrid(TranslokatorLoader translokator)
 {
     translokatorGrid = new SpatialGrid(translokator);
     translokatorGrid.Initialise(D3D.Device, D3D.DeviceContext);
     return(translokatorGrid.GetTreeNodes());
 }
コード例 #7
0
        private void LHFunctionButton_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                FileInfo           info    = new FileInfo(openFileDialog1.FileName);
                TranslokatorLoader loader2 = new TranslokatorLoader(info);

                for (int i = 0; i < loader2.ObjectGroups.Length; i++)
                {
                    ObjectGroup objectGroup = loader2.ObjectGroups[i];
                    ObjectGroup transGroup  = translokator.ObjectGroups[i];

                    for (int y = 0; y < objectGroup.Objects.Length; y++)
                    {
                        ResourceTypes.Translokator.Object loaderObj = objectGroup.Objects[y];

                        for (int z = 0; z < transGroup.Objects.Length; z++)
                        {
                            ResourceTypes.Translokator.Object transObj = transGroup.Objects[z];

                            if (loaderObj.Name == transObj.Name)
                            {
                                int size = transObj.Instances.Length - loaderObj.Instances.Length;

                                if (size > 0)
                                {
                                    Instance[] newArray = new Instance[size];
                                    Array.Copy(transObj.Instances, loaderObj.Instances.Length, newArray, 0, newArray.Length);
                                    transObj.Instances = newArray;
                                }
                            }
                        }
                    }
                }

                TranslokatorTree.Nodes.Clear();

                TreeNode headerData = new TreeNode("Header Data");
                headerData.Tag = translokator;

                TreeNode gridNode = new TreeNode("Grids");
                for (int i = 0; i < translokator.Grids.Length; i++)
                {
                    Grid     grid  = translokator.Grids[i];
                    TreeNode child = new TreeNode("Grid " + i);
                    child.Tag = grid;
                    gridNode.Nodes.Add(child);
                }
                TreeNode ogNode = new TreeNode("Objects Groups");
                for (int i = 0; i < translokator.ObjectGroups.Length; i++)
                {
                    ObjectGroup objectGroup     = translokator.ObjectGroups[i];
                    TreeNode    objectGroupNode = new TreeNode("Object Group " + i);
                    objectGroupNode.Tag = objectGroup;

                    for (int y = 0; y < objectGroup.Objects.Length; y++)
                    {
                        ResourceTypes.Translokator.Object obj = objectGroup.Objects[y];
                        TreeNode objNode = new TreeNode(obj.Name.ToString());
                        objNode.Tag = obj;
                        objectGroupNode.Nodes.Add(objNode);

                        for (int x = 0; x < obj.Instances.Length; x++)
                        {
                            Instance instance     = obj.Instances[x];
                            TreeNode instanceNode = new TreeNode(obj.Name + " " + x);
                            instanceNode.Tag = instance;
                            objNode.Nodes.Add(instanceNode);
                        }
                    }

                    ogNode.Nodes.Add(objectGroupNode);
                }
                TranslokatorTree.Nodes.Add(headerData);
                TranslokatorTree.Nodes.Add(gridNode);
                TranslokatorTree.Nodes.Add(ogNode);

                Text          = Language.GetString("$TRANSLOKATOR_EDITOR") + "*";
                bIsFileEdited = true;
            }
        }