Example #1
0
 private void SetTransformEdit()
 {
     IsEntryReady = false;
     if (FrameResource.IsFrameType(currentObject))
     {
         FrameObjectBase fObject = (currentObject as FrameObjectBase);
         CurrentEntry.Text      = fObject.Name.String;
         PositionXNumeric.Value = Convert.ToDecimal(fObject.Matrix.Position.X);
         PositionYNumeric.Value = Convert.ToDecimal(fObject.Matrix.Position.Y);
         PositionZNumeric.Value = Convert.ToDecimal(fObject.Matrix.Position.Z);
         RotationXNumeric.Value = Convert.ToDecimal(fObject.Matrix.Rotation.X);
         RotationYNumeric.Value = Convert.ToDecimal(fObject.Matrix.Rotation.Y);
         RotationZNumeric.Value = Convert.ToDecimal(fObject.Matrix.Rotation.Z);
         ScaleXNumeric.Enabled  = ScaleYNumeric.Enabled = ScaleZNumeric.Enabled = true;
         ScaleXNumeric.Value    = Convert.ToDecimal(fObject.Matrix.Scale.X);
         ScaleYNumeric.Value    = Convert.ToDecimal(fObject.Matrix.Scale.Y);
         ScaleZNumeric.Value    = Convert.ToDecimal(fObject.Matrix.Scale.Z);
     }
     else if (currentObject is ResourceTypes.Collisions.Collision.Placement)
     {
         ResourceTypes.Collisions.Collision.Placement placement = (currentObject as ResourceTypes.Collisions.Collision.Placement);
         CurrentEntry.Text      = placement.Hash.ToString();
         PositionXNumeric.Value = Convert.ToDecimal(placement.Position.X);
         PositionYNumeric.Value = Convert.ToDecimal(placement.Position.Y);
         PositionZNumeric.Value = Convert.ToDecimal(placement.Position.Z);
         RotationXNumeric.Value = Convert.ToDecimal(placement.Rotation.X);
         RotationYNumeric.Value = Convert.ToDecimal(placement.Rotation.Y);
         RotationZNumeric.Value = Convert.ToDecimal(placement.Rotation.Z);
         ScaleXNumeric.Value    = ScaleYNumeric.Value = ScaleZNumeric.Value = 0.0M;
         ScaleXNumeric.Enabled  = ScaleYNumeric.Enabled = ScaleZNumeric.Enabled = false;
     }
     IsEntryReady = true;
 }
Example #2
0
        public Vector3 JumpToHelper()
        {
            object data = TreeView_Explorer.SelectedNode.Tag;

            if (FrameResource.IsFrameType(data))
            {
                return((data as FrameObjectBase).WorldTransform.Translation);
            }

            if (data.GetType() == typeof(ResourceTypes.Collisions.Collision.Placement))
            {
                return((data as ResourceTypes.Collisions.Collision.Placement).Position);
            }

            if (data.GetType() == typeof(Rendering.Graphics.RenderJunction))
            {
                return((data as Rendering.Graphics.RenderJunction).Data.Position);
            }

            if (data.GetType() == typeof(Rendering.Graphics.RenderNav))
            {
                return((data as Rendering.Graphics.RenderNav).Transform.Translation);
            }

            if (data.GetType() == typeof(ResourceTypes.Actors.ActorEntry))
            {
                return((data as ResourceTypes.Actors.ActorEntry).Position);
            }

            return(new Vector3(0, 0, 0));
        }
        private void LoadMaterials()
        {
            if (isMaterialTabFocused && !hasLoadedMaterials)
            {
                MatViewPanel.Controls.Clear();
                currentMaterials.Clear();
                if (FrameResource.IsFrameType(currentObject))
                {
                    if (currentObject is FrameObjectSingleMesh)
                    {
                        var entry = (currentObject as FrameObjectSingleMesh);
                        MaterialStruct[] materialAssignments = entry.Material.Materials[LODComboBox.SelectedIndex];
                        for (int x = 0; x != materialAssignments.Length; x++)
                        {
                            TextureEntry textEntry = new TextureEntry();

                            var       mat      = materialAssignments[x];
                            IMaterial material = MaterialsManager.LookupMaterialByHash(mat.MaterialHash);

                            textEntry.OnEntrySingularClick += MatViewPanel_TextureEntryOnSingularClick;
                            textEntry.OnEntryDoubleClick   += MatViewPanel_TextureEntryOnDoubleClick;
                            textEntry.SetMaterial(material);

                            currentMaterials.Add(textEntry, mat);
                            MatViewPanel.Controls.Add(textEntry);
                        }
                    }
                }

                hasLoadedMaterials = true;
            }
        }
Example #4
0
        private void OpenEntryContext(object sender, System.ComponentModel.CancelEventArgs e)
        {
            EntryMenuStrip.Items[0].Visible = false;
            EntryMenuStrip.Items[1].Visible = false;
            EntryMenuStrip.Items[2].Visible = false;
            EntryMenuStrip.Items[3].Visible = false;
            EntryMenuStrip.Items[4].Visible = false;

            if (treeView1.SelectedNode != null && treeView1.SelectedNode.Tag != null)
            {
                EntryMenuStrip.Items[1].Visible = true;
                EntryMenuStrip.Items[2].Visible = true;

                if (FrameResource.IsFrameType(treeView1.SelectedNode.Tag) ||
                    treeView1.SelectedNode.Tag.GetType() == typeof(Rendering.Graphics.RenderJunction))
                {
                    EntryMenuStrip.Items[0].Visible = true;
                }
                if ((treeView1.SelectedNode.Tag.GetType() == typeof(FrameObjectSingleMesh) ||
                     treeView1.SelectedNode.Tag.GetType() == typeof(FrameObjectModel) ||
                     treeView1.SelectedNode.Tag.GetType() == typeof(ResourceTypes.Collisions.Collision.NXSStruct)))
                {
                    EntryMenuStrip.Items[3].Visible = true;
                }

                if (FrameResource.IsFrameType(treeView1.SelectedNode.Tag))
                {
                    EntryMenuStrip.Items[4].Visible = true;
                }
            }
        }
Example #5
0
 public static void CleanData()
 {
     FrameNameTable   = null;
     FrameResource    = null;
     VertexBufferPool = null;
     IndexBufferPool  = null;
     SoundSector      = null;
     Actors           = null;
     ItemDescs        = null;
     Collisions       = null;
     CityAreas        = null;
 }
Example #6
0
 private void SetMaterialTab()
 {
     LODComboBox.Items.Clear();
     if (FrameResource.IsFrameType(currentObject))
     {
         if (currentObject is FrameObjectSingleMesh)
         {
             var entry = (currentObject as FrameObjectSingleMesh);
             for (int i = 0; i != entry.Geometry.NumLods; i++)
             {
                 LODComboBox.Items.Add("LOD #" + i);
             }
             LODComboBox.SelectedIndex = 0;
         }
     }
 }
Example #7
0
 public static void CleanData()
 {
     FrameNameTable   = null;
     FrameResource    = null;
     VertexBufferPool = null;
     IndexBufferPool  = null;
     SoundSector      = null;
     Actors           = null;
     ItemDescs        = null;
     Collisions       = null;
     CityAreas        = null;
     CityShops        = null;
     roadMap          = null;
     ATLoader         = null;
     AIWorlds         = null;
     OBJData          = null;
 }
Example #8
0
 public void UpdateObject()
 {
     if (IsEntryReady && currentObject != null)
     {
         if (FrameResource.IsFrameType(currentObject))
         {
             FrameObjectBase fObject = (currentObject as FrameObjectBase);
             fObject.Matrix.Position = new Vector3(Convert.ToSingle(PositionXNumeric.Value), Convert.ToSingle(PositionYNumeric.Value), Convert.ToSingle(PositionZNumeric.Value));
             fObject.Matrix.SetRotationMatrix(new Vector3(Convert.ToSingle(RotationXNumeric.Value), Convert.ToSingle(RotationYNumeric.Value), Convert.ToSingle(RotationZNumeric.Value)));
             fObject.Matrix.SetScaleMatrix(new Vector3(Convert.ToSingle(ScaleXNumeric.Value), Convert.ToSingle(ScaleYNumeric.Value), Convert.ToSingle(ScaleZNumeric.Value)));
         }
         else if (currentObject is ResourceTypes.Collisions.Collision.Placement)
         {
             ResourceTypes.Collisions.Collision.Placement placement = (currentObject as ResourceTypes.Collisions.Collision.Placement);
             placement.Position = new Vector3(Convert.ToSingle(PositionXNumeric.Value), Convert.ToSingle(PositionYNumeric.Value), Convert.ToSingle(PositionZNumeric.Value));
             placement.Rotation = new Vector3(Convert.ToSingle(RotationXNumeric.Value), Convert.ToSingle(RotationYNumeric.Value), Convert.ToSingle(RotationZNumeric.Value));
         }
     }
 }
        private void SetTransformEdit()
        {
            IsEntryReady = false;
            if (FrameResource.IsFrameType(currentObject))
            {
                FrameObjectBase fObject   = (currentObject as FrameObjectBase);
                Vector3         position  = Vector3.Zero;
                Quaternion      rotation2 = Quaternion.Identity;
                Vector3         scale     = Vector3.Zero;
                Matrix4x4.Decompose(fObject.LocalTransform, out scale, out rotation2, out position);

                CurrentEntry.Text      = fObject.Name.ToString();
                PositionXNumeric.Value = Convert.ToDecimal(position.X);
                PositionYNumeric.Value = Convert.ToDecimal(position.Y);
                PositionZNumeric.Value = Convert.ToDecimal(position.Z);

                Vector3 rotation = rotation2.ToEuler();
                RotationXNumeric.Value = Convert.ToDecimal(rotation.X);
                RotationYNumeric.Value = Convert.ToDecimal(rotation.Y);
                RotationZNumeric.Value = Convert.ToDecimal(rotation.Z);
                ScaleXNumeric.Enabled  = ScaleYNumeric.Enabled = ScaleZNumeric.Enabled = true;
                ScaleXNumeric.Value    = Convert.ToDecimal(scale.X);
                ScaleYNumeric.Value    = Convert.ToDecimal(scale.Y);
                ScaleZNumeric.Value    = Convert.ToDecimal(scale.Z);
            }
            else if (currentObject is ResourceTypes.Collisions.Collision.Placement)
            {
                ResourceTypes.Collisions.Collision.Placement placement = (currentObject as ResourceTypes.Collisions.Collision.Placement);
                CurrentEntry.Text      = placement.Hash.ToString();
                PositionXNumeric.Value = Convert.ToDecimal(placement.Position.X);
                PositionYNumeric.Value = Convert.ToDecimal(placement.Position.Y);
                PositionZNumeric.Value = Convert.ToDecimal(placement.Position.Z);
                Vector3 placementRotation = placement.RotationDegrees;
                RotationXNumeric.Value = Convert.ToDecimal(placementRotation.X);
                RotationYNumeric.Value = Convert.ToDecimal(placementRotation.Y);
                RotationZNumeric.Value = Convert.ToDecimal(placementRotation.Z);
                ScaleXNumeric.Value    = ScaleYNumeric.Value = ScaleZNumeric.Value = 0.0M;
                ScaleXNumeric.Enabled  = ScaleYNumeric.Enabled = ScaleZNumeric.Enabled = false;
            }
            IsEntryReady = true;
        }
        public void UpdateObject()
        {
            if (IsEntryReady && currentObject != null)
            {
                Vector3 position = new Vector3(Convert.ToSingle(PositionXNumeric.Value), Convert.ToSingle(PositionYNumeric.Value), Convert.ToSingle(PositionZNumeric.Value));
                Vector3 rotation = new Vector3(Convert.ToSingle(RotationXNumeric.Value), Convert.ToSingle(RotationYNumeric.Value), Convert.ToSingle(RotationZNumeric.Value));
                Vector3 scale    = new Vector3(Convert.ToSingle(ScaleXNumeric.Value), Convert.ToSingle(ScaleYNumeric.Value), Convert.ToSingle(ScaleZNumeric.Value));

                if (FrameResource.IsFrameType(currentObject))
                {
                    FrameObjectBase fObject = (currentObject as FrameObjectBase);
                    fObject.LocalTransform = MatrixUtils.SetMatrix(rotation, scale, position);
                }
                else if (currentObject is ResourceTypes.Collisions.Collision.Placement)
                {
                    ResourceTypes.Collisions.Collision.Placement placement = (currentObject as ResourceTypes.Collisions.Collision.Placement);
                    placement.Position        = position;
                    placement.RotationDegrees = rotation;
                }
            }
        }
Example #11
0
        public void Draw(Window window)
        {
            FrameResource frameResource = FrameResources[Presenter.BackBufferIndex];

            Device3D.AcquireWrappedResources(new[] { frameResource.WrappedBackBuffer }, 1);
            var rectangle = new RectangleF(0, 0, 200, 200);

            DeviceContext.Target = frameResource.Bitmap;
            //DeviceContext.AntialiasMode = AntialiasMode.Aliased;
            DeviceContext.BeginDraw();

            DeviceContext.Transform = Matrix3x2.Identity;
            window?.DrawChildren(DrawContext);

            var b = new RectangleF(50f, 50f, 100, 100);

            //DeviceContext.PushAxisAlignedClip(b, AntialiasMode.PerPrimitive);

            // https://github.com/Microsoft/DirectX-Graphics-Samples/issues/212
            //DeviceContext.FillRectangle(b, Brush);
            //DeviceContext.Clear(new Color4(1, 1, 1, 1));
            //DeviceContext.PopAxisAlignedClip();
            //DeviceContext.Clear(new Color4(1, 1, 1, 1));

            //DeviceContext.Flush();
            DeviceContext.EndDraw();



            Device3D.ReleaseWrappedResources(new[] { frameResource.WrappedBackBuffer }, 1);
            DeviceContext3D.Flush();



            /*
             * PathGeometry geometry = new PathGeometry(Factory);
             * GeometrySink sink = geometry.Open();
             * sink.Close();
             */
        }
Example #12
0
        /// <summary>
        /// Initializes the presentable resources before resize.
        /// </summary>
        /// <param name="device"></param>
        public void InitializePresentable(GraphicsDevice device)
        {
            Device3D12 device3D12 = device.NativeDevice;

            deviceContext2D = new GraphicsDeviceContext2D(DeviceContext);

            Brush = new SolidColorBrush(DeviceContext, SharpDX.Color.White);

            var properties = new BitmapProperties1(
                new PixelFormat(Format.B8G8R8A8_UNorm, AlphaMode.Premultiplied),
                DesktopDpi.Width,
                DesktopDpi.Height,
                BitmapOptions.Target | BitmapOptions.CannotDraw);

            FrameResources = new FrameResource[Presenter.BackBufferCount];
            for (int i = 0; i < Presenter.BackBufferCount; i++)
            {
                var frameResource = new FrameResource();
                FrameResources[i]          = frameResource;
                frameResource.RenderTarget = Presenter.BackBuffers[i].Resource;

                Device3D.CreateWrappedResource(
                    Presenter.BackBuffers[i].Resource,
                    new D3D11ResourceFlags()
                {
                    BindFlags = (int)BindFlags.RenderTarget
                },
                    (int)ResourceStates.RenderTarget,
                    (int)ResourceStates.Present,
                    Utilities.GetGuidFromType(typeof(Resource11)),
                    out frameResource.WrappedBackBuffer);

                frameResource.Surface = frameResource.WrappedBackBuffer.QueryInterface <Surface>();
                frameResource.Bitmap  = new Bitmap1(DeviceContext, frameResource.Surface, properties);
            }

            // https://msdn.microsoft.com/en-us/library/windows/desktop/dd370966(v=vs.85).aspx#resizing_a_dxgi_surface_render_target
            // https://msdn.microsoft.com/en-us/library/windows/desktop/bb205075(v=vs.85).aspx#Care_and_Feeding_of_the_Swap_Chain
            // https://msdn.microsoft.com/en-us/library/windows/desktop/bb205075(v=vs.85).aspx#Handling_Window_Resizing
        }
Example #13
0
        public Vector3 JumpToHelper()
        {
            object data = treeView1.SelectedNode.Tag;

            if (FrameResource.IsFrameType(data))
            {
                bool            fin     = false;
                TransformMatrix matrix  = (data as FrameObjectBase).Matrix;
                TreeNode        curNode = treeView1.SelectedNode;
                while (!fin)
                {
                    if (curNode.Parent == null)
                    {
                        fin = true;
                    }
                    else
                    {
                        FrameObjectBase parent = (curNode.Parent.Tag as FrameObjectBase);
                        curNode = curNode.Parent;
                        if (parent != null)
                        {
                            matrix += parent.Matrix;
                        }
                    }
                }
                return(matrix.Position);
            }

            if (data.GetType() == typeof(ResourceTypes.Collisions.Collision.Placement))
            {
                return((data as ResourceTypes.Collisions.Collision.Placement).Position);
            }

            if (data.GetType() == typeof(Rendering.Graphics.RenderJunction))
            {
                return((data as Rendering.Graphics.RenderJunction).Data.Position);
            }

            return(new Vector3(0, 0, 0));
        }
Example #14
0
        /* Context function */
        private void OpenEntryContext(object sender, System.ComponentModel.CancelEventArgs e)
        {
            //TODO: Clean this messy system.
            EntryMenuStrip.Items[0].Visible       = false;
            EntryMenuStrip.Items[1].Visible       = false;
            EntryMenuStrip.Items[2].Visible       = false;
            EntryMenuStrip.Items[3].Visible       = false;
            EntryMenuStrip.Items[4].Visible       = false;
            FrameActions.DropDownItems[3].Visible = false;

            if (TreeView_Explorer.SelectedNode != null && TreeView_Explorer.SelectedNode.Tag != null)
            {
                EntryMenuStrip.Items[1].Visible = true;
                EntryMenuStrip.Items[2].Visible = true;

                object data = TreeView_Explorer.SelectedNode.Tag;
                if (FrameResource.IsFrameType(data) || data.GetType() == typeof(ResourceTypes.Collisions.Collision.Placement) || data.GetType() == typeof(Rendering.Graphics.RenderJunction) ||
                    data.GetType() == typeof(ResourceTypes.Actors.ActorEntry) || data.GetType() == typeof(Rendering.Graphics.RenderNav))
                {
                    EntryMenuStrip.Items[0].Visible = true;
                }
                if ((TreeView_Explorer.SelectedNode.Tag.GetType() == typeof(FrameObjectSingleMesh) ||
                     TreeView_Explorer.SelectedNode.Tag.GetType() == typeof(FrameObjectModel) ||
                     TreeView_Explorer.SelectedNode.Tag.GetType() == typeof(ResourceTypes.Collisions.Collision.CollisionModel)))
                {
                    EntryMenuStrip.Items[3].Visible = true;
                }

                if (FrameResource.IsFrameType(TreeView_Explorer.SelectedNode.Tag))
                {
                    EntryMenuStrip.Items[4].Visible = true;

                    if (TreeView_Explorer.SelectedNode.Tag is FrameObjectFrame)
                    {
                        FrameActions.DropDownItems[3].Visible = true;
                    }
                }
            }
        }
Example #15
0
        private void SelectedIndexChanged(object sender, EventArgs e)
        {
            Panel.Controls.Clear();
            if (FrameResource.IsFrameType(currentObject))
            {
                if (currentObject is FrameObjectSingleMesh)
                {
                    var entry = (currentObject as FrameObjectSingleMesh);
                    for (int i = 0; i != entry.Material.NumLods; i++)
                    {
                        for (int x = 0; x != entry.Material.Materials[i].Length; x++)
                        {
                            var          mat       = entry.Material.Materials[i][x];
                            TextureEntry textEntry = new TextureEntry();

                            textEntry.SetMaterialName(mat.MaterialName);
                            textEntry.SetMaterialTexture(GetThumbnail(mat));
                            Panel.Controls.Add(textEntry);
                        }
                    }
                }
            }
        }
Example #16
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();
        }
Example #17
0
        public static void BuildData()
        {
            List <FileInfo> vbps = new List <FileInfo>();
            List <FileInfo> ibps = new List <FileInfo>();
            List <ItemDesc> ids  = new List <ItemDesc>();
            List <Actor>    act  = new List <Actor>();

            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 == "FrameResource")
                {
                    FrameResource = new FrameResource(name);
                }
                else if (type == "ItemDesc")
                {
                    ids.Add(new ItemDesc(name));
                }
                else if (type == "FrameNameTable")
                {
                    FrameNameTable = new FrameNameTable(name);
                }
                //else if ((type == "MemFile") && (name.Contains("cityshops")))
                //    CityShops = new CityShops(name);
                //else if (type == "Actors")
                //    act.Add(new Actor(name));
                //else if (type == "AudioSectors")
                //    SoundSector = new SoundSector(name);
                //else if ((type == "MemFile") && (name.Contains("cityareas")))
                //    CityAreas = new CityAreas(name);
            }

            IndexBufferPool  = new IndexBufferManager(ibps);
            VertexBufferPool = new VertexBufferManager(vbps);
            ItemDescs        = ids.ToArray();
            Actors           = act.ToArray();

            for (int i = 0; i != ItemDescs.Length; i++)
            {
                ItemDescs[i].WriteToEDC();
            }

            if (Actors == null)
            {
                return;
            }

            AttachActors();
        }
Example #18
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>();

            isBigEndian = forceBigEndian;
            VertexTranslator.IsBigEndian = forceBigEndian;

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

            DirectoryInfo dirInfo = new DirectoryInfo(ScenePath);

            sdsContent = new SDSContentFile();
            sdsContent.ReadFromFile(new FileInfo(Path.Combine(ScenePath + "/SDSContent.xml")));

            //IndexBuffers
            var paths = sdsContent.GetResourceFiles("IndexBufferPool", true);

            foreach (var item in paths)
            {
                ibps.Add(BuildFileInfo(item));
            }

            //Vertex Buffers
            paths = sdsContent.GetResourceFiles("VertexBufferPool", true);
            foreach (var item in paths)
            {
                vbps.Add(BuildFileInfo(item));
            }

            //Actors
            if (!isBigEndian)
            {
                paths = sdsContent.GetResourceFiles("Actors", true);
                foreach (var item in paths)
                {
                    try
                    {
                        act.Add(new Actor(item));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Failed to read actor {0}", item);
                    }
                }
            }

            //FrameResource
            if (sdsContent.HasResource("FrameResource"))
            {
                var name = sdsContent.GetResourceFiles("FrameResource", true)[0];
                FrameResource = new FrameResource(name, isBigEndian);
            }

            //Item Desc
            if (!isBigEndian)
            {
                paths = sdsContent.GetResourceFiles("ItemDesc", true);
                foreach (var item in paths)
                {
                    ids.Add(new ItemDescLoader(item));
                }
            }

            //FrameNameTable
            if (sdsContent.HasResource("FrameNameTable"))
            {
                var name = sdsContent.GetResourceFiles("FrameNameTable", true)[0];
                FrameNameTable = new FrameNameTable(name, isBigEndian);
            }

            //Collisions
            if (!isBigEndian && sdsContent.HasResource("Collisions"))
            {
                var name = sdsContent.GetResourceFiles("Collisions", true)[0];
                Collisions = new Collision(name);
            }

            //~ENABLE THIS SECTION AT YOUR OWN RISK
            //AnimalTrafficPaths
            //if (!isBigEndian && sdsContent.HasResource("AnimalTrafficPaths"))
            //{
            //    var name = sdsContent.GetResourceFiles("AnimalTrafficPaths", true)[0];
            //    try
            //    {
            //        ATLoader = new AnimalTrafficLoader(new FileInfo(name));
            //    }
            //    catch (Exception ex)
            //    {
            //        Console.WriteLine("Failed to read AnimalTrafficPaths {0}", ex.Message);
            //    }
            //}
            //~ENABLE THIS SECTION AT YOUR OWN RISK

            if (!isBigEndian && sdsContent.HasResource("PREFAB"))
            {
                var          name   = sdsContent.GetResourceFiles("PREFAB", true)[0];
                PrefabLoader loader = new PrefabLoader(new FileInfo(name));
                Prefabs = loader;
            }

            //RoadMap
            if (!isBigEndian)
            {
                paths = sdsContent.GetResourceFiles("MemFile", true);
                foreach (var item in paths)
                {
                    if (item.Contains("RoadMap") || item.Contains("roadmap"))
                    {
                        roadMap = new Roadmap(new FileInfo(item));
                    }
                }
            }

            //~ENABLE THIS SECTION AT YOUR OWN RISK
            //Translokator
            //if (!isBigEndian && sdsContent.HasResource("Translokator"))
            //{
            //    var name = sdsContent.GetResourceFiles("Translokator", true)[0];
            //    Translokator = new TranslokatorLoader(new FileInfo(name));
            //}
            //~ENABLE THIS SECTION AT YOUR OWN RISK

            //~ENABLE THIS SECTION AT YOUR OWN RISK

            /* Kynapse OBJ_DATA
             * if (!isBigEndian)
             * {
             *  tis' broken for now
             *  paths = sdsContent.GetResourceFiles("NAV_OBJ_DATA", true);
             *  foreach (var item in paths)
             *  {
             *      obj.Add(new NAVData(new FileInfo(item)));
             *  }
             *
             *  for (int i = 0; i < obj.Count; i++)
             *  {
             *      obj[i].WriteToFile();
             *  }
             * }
             *
             * AI WORLD
             * if (!isBigEndian)
             * {
             *  paths = sdsContent.GetResourceFiles("NAV_AIWORLD_DATA", true);
             *  foreach (var Item in paths)
             *  {
             *      aiw.Add(new NAVData(new FileInfo(Item)));
             *  }
             * }
             *
             * if (!isBigEndian && sdsContent.HasResource("NAV_HPD_DATA"))
             * {
             *  var name = sdsContent.GetResourceFiles("NAV_HPD_DATA", true)[0];
             *  var data = new NAVData(new FileInfo(name));
             *  HPDData = (data.data as HPDData);
             *  data.WriteToFile();
             * }
             */
            //~ENABLE THIS SECTION AT YOUR OWN RISK

            IndexBufferPool  = new IndexBufferManager(ibps, dirInfo, isBigEndian);
            VertexBufferPool = new VertexBufferManager(vbps, dirInfo, isBigEndian);
            ItemDescs        = ids.ToArray();
            Actors           = act.ToArray();
            OBJData          = obj.ToArray();
            AIWorlds         = aiw.ToArray();
        }
        private void CreateFrameResource_OnClick(object sender, EventArgs e)
        {
            FrameResource fr = new FrameResource();

            fr.WriteToFile(Path.Combine(currentDirectory.FullName, "FrameResource_0.fr"));
        }
Example #20
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();
        }