示例#1
0
        // StageBox create TBST
        public TBSTNode NewTBST(int numEntries)
        {
            TBSTNode node = new TBSTNode(null, numEntries)
            {
                FileType = ARCFileType.MiscData
            };

            _resource.AddChild(node);

            BaseWrapper w = this.FindResource(node, false);

            w.EnsureVisible();
            w.TreeView.SelectedNode = w;
            return(node);
        }
        public override ResourceNode Duplicate()
        {
            if (_resource._parent == null)
            {
                return(null);
            }
            _resource.Rebuild();
            TBSTNode newNode = NodeFactory.FromAddress(null, _resource.WorkingUncompressed.Address, _resource.WorkingUncompressed.Length) as TBSTNode;

            _resource._parent.InsertChild(newNode, true, _resource.Index + 1);
            newNode.Populate();
            newNode.FileType      = ((TBSTNode)_resource).FileType;
            newNode.FileIndex     = ((TBSTNode)_resource).FileIndex;
            newNode.GroupID       = ((TBSTNode)_resource).GroupID;
            newNode.RedirectIndex = ((TBSTNode)_resource).RedirectIndex;
            newNode.Name          = _resource.Name;
            return(newNode);
        }
        public unsafe void resourceTree_SelectionChanged(object sender, EventArgs e)
        {
            audioPlaybackPanel1.TargetSource  = null;
            animEditControl.TargetSequence    = null;
            texAnimEditControl.TargetSequence = null;
            shpAnimEditControl.TargetSequence = null;
            msBinEditor1.CurrentNode          = null;
            //soundPackControl1.TargetNode = null;
            clrControl.ColorSource = null;
            visEditor.TargetNode   = null;
            scN0CameraEditControl1.TargetSequence = null;
            scN0LightEditControl1.TargetSequence  = null;
            scN0FogEditControl1.TargetSequence    = null;
            texCoordControl1.TargetNode           = null;
            ppcDisassembler1.SetTarget(null, 0, null);
            modelPanel1.ClearAll();
            mdL0ObjectControl1.SetTarget(null);
            if (hexBox1.ByteProvider != null)
            {
                ((Be.Windows.Forms.DynamicFileByteProvider)hexBox1.ByteProvider).Dispose();
            }

            Control newControl  = null;
            Control newControl2 = null;

            BaseWrapper  w;
            ResourceNode node       = null;
            bool         disable2nd = false;

            if ((resourceTree.SelectedNode is BaseWrapper) && ((node = (w = resourceTree.SelectedNode as BaseWrapper).ResourceNode) != null))
            {
                propertyGrid1.SelectedObject = node;
                if (node is IBufferNode && MainForm.Instance.ShowHex)
                {
                    IBufferNode d = node as IBufferNode;
                    if (d.IsValid())
                    {
                        hexBox1.ByteProvider = new Be.Windows.Forms.DynamicFileByteProvider(new UnmanagedMemoryStream(
                                                                                                (byte *)d.GetAddress(),
                                                                                                d.GetLength(),
                                                                                                d.GetLength(),
                                                                                                FileAccess.ReadWrite))
                        {
                            _supportsInsDel = false
                        };
                        newControl = hexBox1;
                    }
                }
                else if (node is RSARGroupNode)
                {
                    rsarGroupEditor.LoadGroup(node as RSARGroupNode);
                    newControl = rsarGroupEditor;
                }
                else if (node is RELMethodNode)
                {
                    ppcDisassembler1.SetTarget((RELMethodNode)node);
                    newControl = ppcDisassembler1;
                }
                else if (node is IVideo)
                {
                    videoPlaybackPanel1.TargetSource = node as IVideo;
                    newControl = videoPlaybackPanel1;
                }
                else if (node is MDL0MaterialRefNode)
                {
                    newControl = texCoordControl1;
                }
                else if (node is MDL0ObjectNode)
                {
                    newControl = mdL0ObjectControl1;
                }
                else if (node is MSBinNode)
                {
                    msBinEditor1.CurrentNode = node as MSBinNode;
                    newControl = msBinEditor1;
                }
                else if (node is CHR0EntryNode)
                {
                    animEditControl.TargetSequence = node as CHR0EntryNode;
                    newControl = animEditControl;
                }
                else if (node is SRT0TextureNode)
                {
                    texAnimEditControl.TargetSequence = node as SRT0TextureNode;
                    newControl = texAnimEditControl;
                }
                else if (node is SHP0VertexSetNode)
                {
                    shpAnimEditControl.TargetSequence = node as SHP0VertexSetNode;
                    newControl = shpAnimEditControl;
                }
                else if (node is RSARNode)
                {
                    soundPackControl1.TargetNode = node as RSARNode;
                    newControl = soundPackControl1;
                }
                else if (node is VIS0EntryNode)
                {
                    visEditor.TargetNode = node as VIS0EntryNode;
                    newControl           = visEditor;
                }
                else if (node is SCN0CameraNode)
                {
                    scN0CameraEditControl1.TargetSequence = node as SCN0CameraNode;
                    newControl = scN0CameraEditControl1;
                }
                else if (node is SCN0LightNode)
                {
                    scN0LightEditControl1.TargetSequence = node as SCN0LightNode;
                    newControl = scN0LightEditControl1;
                    disable2nd = true;
                }
                else if (node is SCN0FogNode)
                {
                    scN0FogEditControl1.TargetSequence = node as SCN0FogNode;
                    newControl = scN0FogEditControl1;
                    disable2nd = true;
                }
                else if (node is IAudioSource)
                {
                    audioPlaybackPanel1.TargetSource = node as IAudioSource;
                    IAudioStream[] sources = audioPlaybackPanel1.TargetSource.CreateStreams();
                    if (sources != null && sources.Length > 0 && sources[0] != null)
                    {
                        newControl = audioPlaybackPanel1;
                    }
                }
                else if (node is IImageSource)
                {
                    previewPanel2.RenderingTarget = ((IImageSource)node);
                    newControl = previewPanel2;
                }
                else if (node is IRenderedObject)
                {
                    newControl = modelPanel1;
                }
                else if (node is STDTNode)
                {
                    STDTNode stdt = (STDTNode)node;

                    attributeGrid1.Clear();
                    attributeGrid1.AddRange(stdt.GetPossibleInterpretations());
                    attributeGrid1.TargetNode = stdt;
                    newControl = attributeGrid1;
                }
                else if (node is TBCLNode)
                {
                    TBCLNode tbcl = (TBCLNode)node;

                    attributeGrid1.Clear();
                    attributeGrid1.AddRange(tbcl.GetPossibleInterpretations());
                    attributeGrid1.TargetNode = tbcl;
                    newControl = attributeGrid1;
                }
                else if (node is TBGCNode)
                {
                    TBGCNode tbgc = (TBGCNode)node;

                    attributeGrid1.Clear();
                    attributeGrid1.AddRange(tbgc.GetPossibleInterpretations());
                    attributeGrid1.TargetNode = tbgc;
                    newControl = attributeGrid1;
                }
                else if (node is TBGDNode)
                {
                    TBGDNode tbgd = (TBGDNode)node;

                    attributeGrid1.Clear();
                    attributeGrid1.AddRange(tbgd.GetPossibleInterpretations());
                    attributeGrid1.TargetNode = tbgd;
                    newControl = attributeGrid1;
                }
                else if (node is TBGMNode)
                {
                    TBGMNode tbgm = (TBGMNode)node;

                    attributeGrid1.Clear();
                    attributeGrid1.AddRange(tbgm.GetPossibleInterpretations());
                    attributeGrid1.TargetNode = tbgm;
                    newControl = attributeGrid1;
                }
                else if (node is TBLVNode)
                {
                    TBLVNode tblv = (TBLVNode)node;

                    attributeGrid1.Clear();
                    attributeGrid1.AddRange(tblv.GetPossibleInterpretations());
                    attributeGrid1.TargetNode = tblv;
                    newControl = attributeGrid1;
                }
                else if (node is TBRMNode)
                {
                    TBRMNode tbrm = (TBRMNode)node;

                    attributeGrid1.Clear();
                    attributeGrid1.AddRange(tbrm.GetPossibleInterpretations());
                    attributeGrid1.TargetNode = tbrm;
                    newControl = attributeGrid1;
                }
                else if (node is TBSTNode)
                {
                    TBSTNode tbst = (TBSTNode)node;

                    attributeGrid1.Clear();
                    attributeGrid1.AddRange(tbst.GetPossibleInterpretations());
                    attributeGrid1.TargetNode = tbst;
                    newControl = attributeGrid1;
                }
                else if (node is IColorSource && !disable2nd)
                {
                    clrControl.ColorSource = node as IColorSource;
                    if (((IColorSource)node).ColorCount(0) > 0)
                    {
                        if (newControl != null)
                        {
                            newControl2 = clrControl;
                        }
                        else
                        {
                            newControl = clrControl;
                        }
                    }
                }
                else if (MainForm.Instance.ShowHex)
                {
                    if (node.WorkingUncompressed.Length > 0)
                    {
                        hexBox1.ByteProvider = new Be.Windows.Forms.DynamicFileByteProvider(new UnmanagedMemoryStream(
                                                                                                (byte *)node.WorkingUncompressed.Address,
                                                                                                node.WorkingUncompressed.Length,
                                                                                                node.WorkingUncompressed.Length,
                                                                                                FileAccess.ReadWrite))
                        {
                            _supportsInsDel = false
                        };
                        newControl = hexBox1;
                    }
                }

                if ((editToolStripMenuItem.DropDown = w.ContextMenuStrip) != null)
                {
                    editToolStripMenuItem.Enabled = true;
                }
                else
                {
                    editToolStripMenuItem.Enabled = false;
                }
            }
            else
            {
                propertyGrid1.SelectedObject = null;
                try
                {
                    editToolStripMenuItem.DropDown = null;
                }
                catch
                {
                }
                editToolStripMenuItem.Enabled = false;
            }

            if (_secondaryControl != newControl2)
            {
                if (_secondaryControl != null)
                {
                    _secondaryControl.Dock    = DockStyle.Fill;
                    _secondaryControl.Visible = false;
                }
                _secondaryControl = newControl2;
                if (_secondaryControl != null)
                {
                    _secondaryControl.Dock    = DockStyle.Right;
                    _secondaryControl.Visible = true;
                    _secondaryControl.Width   = 340;
                }
            }
            if (_currentControl != newControl)
            {
                if (_currentControl != null)
                {
                    _currentControl.Visible = false;
                }
                _currentControl = newControl;
                if (_currentControl != null)
                {
                    _currentControl.Visible = true;
                }
            }
            else if (_currentControl != null && !_currentControl.Visible)
            {
                _currentControl.Visible = true;
            }
            if (_currentControl != null)
            {
                if (_secondaryControl != null)
                {
                    _currentControl.Width = splitContainer2.Panel2.Width - _secondaryControl.Width;
                }
                _currentControl.Dock = DockStyle.Fill;
            }

            //Model panel has to be loaded first to display model correctly
            if (_currentControl is ModelPanel && renderPreviews)
            {
                if (node._children == null)
                {
                    node.Populate(0);
                }

                if (node is IModel && ModelEditControl.Instances.Count == 0)
                {
                    IModel m = node as IModel;
                    m.ResetToBindState();
                }

                IRenderedObject o = node as IRenderedObject;
                modelPanel1.AddTarget(o);
                modelPanel1.SetCamWithBox(o.GetBox());
            }
            else if (_currentControl is MDL0ObjectControl)
            {
                mdL0ObjectControl1.SetTarget(node as MDL0ObjectNode);
            }
            else if (_currentControl is TexCoordControl)
            {
                texCoordControl1.TargetNode = ((MDL0MaterialRefNode)node);
            }
        }