private TreeNode CreateTreeNode(FrameObjectBase fObject)
        {
            TreeNode[] nodes2 = treeView1.Nodes.Find(fObject.RefID.ToString(), true);

            if (nodes2.Length > 0)
            {
                return(null);
            }

            TreeNode node = ConvertNode(fObject.NodeData);

            if (fObject.GetType() == typeof(FrameObjectSingleMesh))
            {
                if (fObject.Refs.Count != 0)
                {
                    node.Nodes.Add(CreateTreeNode("Material", SceneData.FrameResource.FrameMaterials[fObject.Refs["Material"]]));
                    node.Nodes.Add(CreateTreeNode("Geometry", SceneData.FrameResource.FrameGeometries[fObject.Refs["Mesh"]]));
                }
                node.ContextMenuStrip = contextMenu;
            }
            else if (fObject.GetType() == typeof(FrameObjectModel))
            {
                node.Nodes.Add(CreateTreeNode("Material", SceneData.FrameResource.FrameMaterials[fObject.Refs["Material"]]));
                node.Nodes.Add(CreateTreeNode("Geometry", SceneData.FrameResource.FrameGeometries[fObject.Refs["Mesh"]]));
                node.Nodes.Add(CreateTreeNode("BlendInfo", SceneData.FrameResource.FrameBlendInfos[fObject.Refs["BlendInfo"]]));
                node.Nodes.Add(CreateTreeNode("Skeleton", SceneData.FrameResource.FrameSkeletons[fObject.Refs["Skeleton"]]));
                node.Nodes.Add(CreateTreeNode("SkeletonHierachy", SceneData.FrameResource.FrameSkeletonHierachies[fObject.Refs["SkeletonHierachy"]]));
                node.ContextMenuStrip = contextMenu;
            }

            node = AddChildren(node, fObject);
            return(node);
        }
Example #2
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 #3
0
        private void ModifyParents(int parent)
        {
            FrameObjectBase obj    = treeView1.SelectedNode.Tag as FrameObjectBase;
            ListWindow      window = new ListWindow();

            window.PopulateForm(parent);

            if (window.ShowDialog() == DialogResult.OK)
            {
                int refID = (window.chosenObject as FrameEntry).RefID;
                obj.IsOnFrameTable = true;

                if (parent == 0)
                {
                    obj.ParentIndex1.Name  = window.chosenObject.ToString();
                    obj.ParentIndex1.Index = SceneData.FrameResource.GetIndexOfObject(refID);
                    obj.ParentIndex1.RefID = refID;
                    obj.SubRef(FrameEntryRefTypes.Parent1);
                    obj.AddRef(FrameEntryRefTypes.Parent1, refID);
                }
                else if (parent == 1)
                {
                    obj.ParentIndex2.Name  = window.chosenObject.ToString();
                    obj.ParentIndex2.Index = SceneData.FrameResource.GetIndexOfObject(refID) + SceneData.FrameResource.FrameScenes.Count;
                    obj.ParentIndex2.RefID = refID;
                    obj.SubRef(FrameEntryRefTypes.Parent2);
                    obj.AddRef(FrameEntryRefTypes.Parent2, refID);
                }

                treeView1.Nodes.Remove(treeView1.SelectedNode);
                TreeNode newNode = new TreeNode();
                newNode.Tag  = obj;
                newNode.Name = obj.RefID.ToString();
                newNode.Text = obj.ToString();

                if (obj.ParentIndex1.Index != -1)
                {
                    TreeNode[] nodes = treeView1.Nodes.Find(obj.ParentIndex1.RefID.ToString(), true);

                    if (nodes.Length > 0)
                    {
                        AddToTree(newNode, nodes[0]);
                    }
                }
                else if (obj.ParentIndex2.Index != -1)
                {
                    TreeNode[] nodes = treeView1.Nodes.Find(obj.ParentIndex2.RefID.ToString(), true);

                    if (nodes.Length > 0)
                    {
                        AddToTree(newNode, nodes[0]);
                    }
                }
                else
                {
                }
            }
        }
Example #4
0
        private void SearchForms()
        {
            listBox1.Items.Clear();
            foreach (KeyValuePair <int, object> entry in SceneData.FrameResource.FrameObjects)
            {
                FrameObjectBase obj = entry.Value as FrameObjectBase;

                if (obj.Name.String.Contains(SearchBox.Text))
                {
                    listBox1.Items.Add(entry.Value);
                }
            }
        }
 private void RecurseChildren(TreeNode node)
 {
     foreach (TreeNode child in node.Nodes)
     {
         child.Checked = true;
         ApplyImageIndex(child);
         RecurseChildren(child);
         if (child.Text.Contains("proxy") || (child.Text.Contains("translocator") && child.Text.Contains("00")))
         {
             FrameObjectBase fObject = (child.Tag as FrameObjectBase);
             ProxyPos = fObject.WorldTransform.TranslationVector;
         }
     }
 }
Example #6
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 OnPropertyChanged(object s, PropertyValueChangedEventArgs e)
        {
            if (e.ChangedItem.Label == "RefID")
            {
                TreeNode[] nodes = treeView1.Nodes.Find(e.ChangedItem.Value.ToString(), true);

                if (nodes.Length > 0)
                {
                    int             newValue = (int)e.ChangedItem.Value;
                    FrameObjectBase obj      = (treeView1.SelectedNode.Tag as FrameObjectBase);
                    int             newIndex = SceneData.FrameResource.FrameObjects.IndexOfValue(newValue);

                    if (newIndex == -1)
                    {
                        //check if user didn't try setting it as a scene:
                        newIndex = SceneData.FrameResource.FrameScenes.IndexOfValue(newValue);
                    }

                    string name = (SceneData.FrameResource.FrameObjects.ElementAt(newIndex).Value as FrameObjectBase).Name.String;

                    //because C# doesn't allow me to get this data for some odd reason, im going to check for it in obj. Why does C# not allow me to see FullLabel in the e var?
                    if (obj.ParentIndex1.RefID == newValue)
                    {
                        obj.ParentIndex1.Index = newIndex;
                        obj.ParentIndex1.Name  = name;
                        obj.SubRef(FrameEntryRefTypes.Parent1);
                        obj.AddRef(FrameEntryRefTypes.Parent1, newValue);
                    }
                    else if (obj.ParentIndex2.RefID == newValue)
                    {
                        obj.ParentIndex2.Index = newIndex;
                        obj.ParentIndex2.Name  = name;
                        obj.SubRef(FrameEntryRefTypes.Parent2);
                        obj.AddRef(FrameEntryRefTypes.Parent2, newValue);
                    }
                    obj.UpdateNode();
                    treeView1.Nodes.Remove(treeView1.SelectedNode);
                    TreeNode newNode = CreateTreeNode(obj);
                    nodes[0].Nodes.Add(newNode);
                }
            }
        }
        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 #10
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));
        }
        private TreeNode AddChildren(TreeNode node, FrameObjectBase fObject)
        {
            while (fObject.ParentIndex1.Index != -1)
            {
                fObject = (SceneData.FrameResource.FrameObjects[fObject.ParentIndex1.RefID] as FrameObjectBase);

                if (fObject.ParentIndex1.Index == fObject.ParentIndex2.Index)
                {
                    return(node);
                }

                TreeNode child = CreateTreeNode(fObject);

                if (child == null)
                {
                    return(node);
                }

                node.Nodes.Add(child);
            }
            return(node);
        }
        private void ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            if (treeView1.SelectedNode == null)
            {
                return;
            }

            if (e.ClickedItem.Name == "contextExtract3D")
            {
                FrameObjectSingleMesh mesh = treeView1.SelectedNode.Tag as FrameObjectSingleMesh;

                FrameGeometry  geom          = SceneData.FrameResource.FrameGeometries[mesh.Refs["Mesh"]];
                FrameMaterial  mat           = SceneData.FrameResource.FrameMaterials[mesh.Refs["Material"]];
                IndexBuffer[]  indexBuffers  = new IndexBuffer[geom.LOD.Length];
                VertexBuffer[] vertexBuffers = new VertexBuffer[geom.LOD.Length];

                //we need to retrieve buffers first.
                for (int c = 0; c != geom.LOD.Length; c++)
                {
                    indexBuffers[c]  = SceneData.IndexBufferPool.GetBuffer(geom.LOD[c].IndexBufferRef.uHash);
                    vertexBuffers[c] = SceneData.VertexBufferPool.GetBuffer(geom.LOD[c].VertexBufferRef.uHash);
                }

                Model newModel = new Model(mesh, indexBuffers, vertexBuffers, geom, mat);
                newModel.ModelStructure.ExportToM2T(ToolkitSettings.ExportPath + "\\");
                switch (ToolkitSettings.Format)
                {
                case 0:
                    newModel.ModelStructure.ExportToFbx(ToolkitSettings.ExportPath + "\\", false);
                    break;

                case 1:
                    newModel.ModelStructure.ExportToFbx(ToolkitSettings.ExportPath + "\\", true);
                    break;

                case 2:
                    newModel.ModelStructure.ExportToM2T(ToolkitSettings.ExportPath + "\\");
                    break;

                default:
                    Log.WriteLine("Error! Unknown value set for ToolkitSettings.Format!", LoggingTypes.ERROR);
                    break;
                }
            }
            else if (e.ClickedItem.Name == "contextUpdateParents")
            {
                FrameObjectBase obj    = treeView1.SelectedNode.Tag as FrameObjectBase;
                ListWindow      window = new ListWindow();
                window.PopulateForm(true);
                window.ShowDialog();
                if (window.type == -1)
                {
                    return;
                }

                int refID = (window.chosenObject as FrameEntry).RefID;
                obj.IsOnFrameTable     = true;
                obj.ParentIndex2.Index = window.chosenObjectIndex;
                obj.ParentIndex2.RefID = refID;
                obj.SubRef(FrameEntryRefTypes.Parent2);
                obj.AddRef(FrameEntryRefTypes.Parent2, refID);
                obj.UpdateNode();

                treeView1.Nodes.Remove(treeView1.SelectedNode);
                TreeNode newNode = CreateTreeNode(obj);
                treeView1.Nodes[window.chosenObjectIndex].Nodes.Add(newNode);
            }
        }
        public void PopulateForm()
        {
            //TODO: IMPROVE GRIDVIEW POPULATION:
            treeView1.Nodes.Clear();
            dataGridView1.Rows.Clear();
            foreach (KeyValuePair <int, FrameHeaderScene> entry in SceneData.FrameResource.FrameScenes)
            {
                dataGridView1.Rows.Add(ConvertEntryToDataGridView(entry.Value));

                TreeNode node = new TreeNode
                {
                    Text = entry.Value.Name.String,
                    Name = entry.Value.RefID.ToString(),
                    Tag  = entry.Value
                };
                treeView1.Nodes.Add(node);
            }
            foreach (KeyValuePair <int, FrameGeometry> entry in SceneData.FrameResource.FrameGeometries)
            {
                dataGridView1.Rows.Add(ConvertEntryToDataGridView(entry.Value));
            }
            foreach (KeyValuePair <int, FrameMaterial> entry in SceneData.FrameResource.FrameMaterials)
            {
                dataGridView1.Rows.Add(ConvertEntryToDataGridView(entry.Value));
            }
            foreach (KeyValuePair <int, FrameBlendInfo> entry in SceneData.FrameResource.FrameBlendInfos)
            {
                dataGridView1.Rows.Add(ConvertEntryToDataGridView(entry.Value));
            }
            foreach (KeyValuePair <int, FrameSkeleton> entry in SceneData.FrameResource.FrameSkeletons)
            {
                dataGridView1.Rows.Add(ConvertEntryToDataGridView(entry.Value));
            }
            foreach (KeyValuePair <int, FrameSkeletonHierachy> entry in SceneData.FrameResource.FrameSkeletonHierachies)
            {
                dataGridView1.Rows.Add(ConvertEntryToDataGridView(entry.Value));
            }
            foreach (KeyValuePair <int, object> entry in SceneData.FrameResource.FrameObjects)
            {
                dataGridView1.Rows.Add(ConvertEntryToDataGridView(entry.Value));
            }
            if (SceneData.FrameNameTable != null)
            {
                TreeNode looseSceneNode = null;
                looseSceneNode      = new TreeNode("<scene>");
                looseSceneNode.Name = "<scene>";

                foreach (FrameNameTable.Data data in SceneData.FrameNameTable.FrameData)
                {
                    if (data.ParentName == null)
                    {
                        data.ParentName = "<scene>";
                    }

                    TreeNode root = null;

                    if (!data.ParentName.Equals("<scene>"))
                    {
                        //this is more spaghetti code. but right now, this codebase is like Fallout 76.
                        int sceneKey = -1;
                        foreach (KeyValuePair <int, FrameHeaderScene> entry in SceneData.FrameResource.FrameScenes)
                        {
                            if (entry.Value.Name.String == data.ParentName)
                            {
                                sceneKey = entry.Key;
                            }
                        }
                        int index = treeView1.Nodes.IndexOfKey(sceneKey.ToString());

                        if (index == -1)
                        {
                            treeView1.Nodes.Add(data.ParentName, data.ParentName);
                        }

                        index = treeView1.Nodes.IndexOfKey(sceneKey.ToString());
                        root  = treeView1.Nodes[index];
                    }
                    else
                    {
                        root = looseSceneNode;
                    }

                    if (data.FrameIndex != -1)
                    {
                        int total = SceneData.FrameResource.Header.SceneFolders.Length +
                                    SceneData.FrameResource.Header.NumGeometries +
                                    SceneData.FrameResource.Header.NumMaterialResources +
                                    SceneData.FrameResource.Header.NumBlendInfos +
                                    SceneData.FrameResource.Header.NumSkeletons +
                                    SceneData.FrameResource.Header.NumSkelHierachies;

                        FrameObjectBase block = (SceneData.FrameResource.FrameObjects.ElementAt(data.FrameIndex).Value as FrameObjectBase);

                        block.FrameNameTableFlags = data.Flags;
                        block.IsOnFrameTable      = true;

                        TreeNode node = CreateTreeNode(block);

                        if (node == null)
                        {
                            continue;
                        }

                        root.Nodes.Add(node);
                    }
                }

                if (looseSceneNode.Nodes.Count > 0)
                {
                    treeView1.Nodes.Add(looseSceneNode);
                }
            }

            dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

            foreach (KeyValuePair <int, object> entry in SceneData.FrameResource.FrameObjects)
            {
                FrameObjectBase fObject = (FrameObjectBase)entry.Value;
                TreeNode        node    = CreateTreeNode(fObject);

                if (node == null)
                {
                    continue;
                }

                //if ParentIndex1 && ParentIndex2 equals then its kind of like the root of the object.
                //All subobjects of this 'root' should have ParentIndex2 set to the 'roots' parent.
                //ParentIndex1 is the unique one.
                //Looks to me that the objects which have ParentIndex1 && ParentIndex2 having the same value is usually on the 'FrameNameTable'.

                //all nodes found are dumped here.
                TreeNode[] nodes = null;

                //so first we check for 'root' objects.
                if (fObject.ParentIndex1.Index == fObject.ParentIndex2.Index)
                {
                    nodes = treeView1.Nodes.Find(fObject.ParentIndex1.RefID.ToString(), true);
                }
                else if (fObject.ParentIndex1.Index != fObject.ParentIndex2.Index)
                {
                    //test, still trying to nail this f****r down.
                    nodes = treeView1.Nodes.Find(fObject.ParentIndex2.RefID.ToString(), true);
                }

                if (nodes.Length > 0)
                {
                    nodes[0].Nodes.Add(node);
                }
                else if (fObject.ParentIndex1.Index == -1 && fObject.ParentIndex2.Index == -1)
                {
                    treeView1.Nodes.Add(node);
                }
                else
                {
                    unadded.Add(node);
                }
            }
            foreach (TreeNode obj in unadded)
            {
                TreeNode[] nodes = treeView1.Nodes.Find((obj.Tag as FrameObjectBase).ParentIndex1.RefID.ToString(), true);

                if (nodes.Length > 0)
                {
                    nodes[0].Nodes.Add(obj);
                    Debug.WriteLine("Added: " + obj.Text);
                }
                else if ((treeView1.Nodes.Find((obj.Tag as FrameObjectBase).RefID.ToString(), true).Length != 0))
                {
                    Debug.WriteLine("Unadded node was found");
                }
                else
                {
                    //buggy backup:
                    nodes = treeView1.Nodes.Find((obj.Tag as FrameObjectBase).ParentIndex2.RefID.ToString(), true);
                    if (nodes.Length > 0)
                    {
                        nodes[0].Nodes.Add(obj);
                        Debug.WriteLine("Added: " + obj.Text);
                    }
                    else
                    {
                        Debug.WriteLine(string.Format("WARNING: node: {0} was not added properly", obj.Text));
                        treeView1.Nodes.Add(obj);
                    }
                }
            }
            ToolkitSettings.UpdateRichPresence("Using the Frame Resource editor");
        }
Example #14
0
        public void BuildDataFromResource(FrameResource.FrameResource resource)
        {
            List <Data> tableData = new List <Data>();

            int[]    scenePos;
            string[] sceneNames;

            if (resource.Header.IsScene)
            {
                scenePos   = new int[resource.Header.NumFolderNames + 1];
                sceneNames = new string[resource.Header.NumFolderNames + 1];

                //add the actual scenes from the header, and then the <scenes> one.
                for (int i = 0; i != resource.Header.NumFolderNames; i++)
                {
                    m_buffer     += resource.Header.SceneFolders[i].Name.String;
                    m_buffer     += "\0";
                    scenePos[i]   = m_buffer.Length - resource.Header.SceneFolders[i].Name.String.Length - 1;
                    sceneNames[i] = resource.Header.SceneFolders[i].Name.String;
                }

                string scene = "<scene>\0";
                m_buffer += scene;
                scenePos[scenePos.Length - 1]     = m_buffer.Length - scene.Length;
                sceneNames[sceneNames.Length - 1] = scene;
            }
            else
            {
                scenePos      = new int[1];
                sceneNames    = new string[1];
                m_buffer     += "<scene>\0";
                scenePos[0]   = 0;
                sceneNames[0] = "<scene>\0";
            }

            for (int i = 0; i != resource.FrameObjects.Count; i++)
            {
                bool   addToTable = false;
                object block      = resource.FrameObjects.ElementAt(i).Value;

                //possible types to save? might change in the future however.
                if (block.GetType().BaseType == typeof(FrameObjectBase) || block.GetType().BaseType == typeof(FrameObjectJoint) || block.GetType().BaseType == typeof(FrameObjectSingleMesh))
                {
                    if ((block as FrameObjectBase).IsOnFrameTable)
                    {
                        addToTable = true;
                    }
                }

                if (addToTable)
                {
                    FrameObjectBase fBase = (block as FrameObjectBase);

                    if (fBase.ParentIndex1.Index == -1)
                    {
                        Data data = new Data();
                        data.Flags = fBase.FrameNameTableFlags;

                        //auto <scene>
                        int sceneIndex = scenePos.Length - 1;

                        //check if this is a scene. If it is, then we get the index for the scene names and pos.
                        if (resource.Header.IsScene && fBase.ParentIndex2.Index != -1)
                        {
                            sceneIndex = fBase.ParentIndex2.Index;
                        }

                        //set parent index.
                        data.Parent = (short)scenePos[sceneIndex];

                        //add name to string and set namepos1 For namepos2, check if this is a scene. If so, then use 0xFFFF.
                        data.NamePos1 = (ushort)m_buffer.Length;
                        m_buffer     += fBase.Name.String;
                        m_buffer     += "\0";
                        data.NamePos2 = (resource.Header.IsScene) ? (ushort)0xFFFF : data.NamePos1;

                        //set frameIndex. minus the blockID and then subtract it from the total number of blocks.
                        data.FrameIndex = (short)i;

                        tableData.Add(data);
                    }
                }
            }

            frameData  = tableData.ToArray();
            dataSize   = tableData.Count;
            bufferSize = m_buffer.Length;
        }