Пример #1
0
        private void SelectionChanged(ObjectTreeNode obj)
        {
            obj.OnClick();

            bool tryUpdateViewport = false;

            if (Runtime.SelectedBoneIndex != -1)
            {
                tryUpdateViewport         = true;
                Runtime.SelectedBoneIndex = -1;
            }

            if (obj.Tag is ArchiveFileInfo)
            {
                var fileInfo = (ArchiveFileInfo)obj.Tag;

                if (fileInfo.OpenFileFormatOnLoad)
                {
                    fileInfo.FileFormat = fileInfo.OpenFile();
                }
                if (fileInfo.FileFormat != null)
                {
                    var fileNode = ObjectListWrapperLoader.OpenFormat(imgList, fileInfo.FileFormat);
                    obj.Tag = fileInfo.FileFormat;
                    foreach (var child in fileNode.Children)
                    {
                        obj.AddChild(child);
                    }
                    SelectionChanged(obj);
                    return;
                }

                ArchiveFilePanel hexEditor = GetActiveEditor <ArchiveFilePanel>();
                hexEditor.LoadFile(this, fileInfo);
            }
            else if (obj.Tag is STGenericTexture)
            {
                var tex = (STGenericTexture)obj.Tag;

                ImageEditorBase editor = GetActiveEditor <ImageEditorBase>();
                editor.LoadProperties(tex.DisplayProperties);
                editor.LoadImage(tex);
            }
            else if (obj.Tag is IPropertyDisplay)
            {
                var property = (IPropertyDisplay)obj.Tag;

                STPropertyGrid editor = GetActiveEditor <STPropertyGrid>();
                editor.LoadProperty(property.PropertyDisplay);
            }
            else if (obj.Tag is IEditorDisplay)
            {
                var property = (IEditorDisplay)obj.Tag;
                Console.WriteLine($"IEditorDisplay {property}");

                var gui = GUIGenerator.Generate(property);
                gui.Dock = DockStyle.Fill;

                STPanel editor = GetActiveEditor <STPanel>();
                editor.Controls.Clear();
                editor.Controls.Add(gui);
            }
            else if (obj.Tag is System.IO.Stream)
            {
                var stream = (System.IO.Stream)obj.Tag;

                HexEditor hexEditor = GetActiveEditor <HexEditor>();
                hexEditor.LoadData(stream);
            }
            else if (obj.Tag is IVideoFormat)
            {
                VideoPlayer editor = GetActiveEditor <VideoPlayer>();
                editor.LoadVideoFile((IVideoFormat)obj.Tag);
            }
            else if (obj.Tag is STGenericMesh)
            {
                var mesh = (STGenericMesh)obj.Tag;
                mesh.SelectMesh?.Invoke(mesh, EventArgs.Empty);

                if (WorkspacePanel == null)
                {
                    WorkspacePanel = CreateWorkspacePanel();
                }

                WorkspacePanel workspace  = GetActiveEditor <WorkspacePanel>(WorkspacePanel);
                var            meshEditor = workspace.GetActiveEditor <MeshEditor>();
                meshEditor.LoadMesh(mesh);
                workspace.UpdateViewport();
                ObjectHiearchy.Focus();
            }
            else if (obj.Tag is STGenericMaterial)
            {
                var mat = (STGenericMaterial)obj.Tag;

                if (WorkspacePanel == null)
                {
                    WorkspacePanel = CreateWorkspacePanel();
                }

                WorkspacePanel workspace      = GetActiveEditor <WorkspacePanel>(WorkspacePanel);
                var            materialEditor = workspace.GetActiveEditor <MaterialEditor>();
                materialEditor.LoadMaterial(mat);
                workspace.UpdateViewport();
            }
            else if (obj.Tag is IModelFormat)
            {
                if (WorkspacePanel == null)
                {
                    WorkspacePanel = CreateWorkspacePanel();
                }

                WorkspacePanel workspace = GetActiveEditor <WorkspacePanel>(WorkspacePanel);
                workspace.LoadFileFormat((IModelFormat)(obj.Tag));
                workspace.UpdateViewport();
            }
            else if (obj.Tag is IModelSceneFormat)
            {
                if (WorkspacePanel == null)
                {
                    WorkspacePanel = CreateWorkspacePanel();
                }

                WorkspacePanel workspace = GetActiveEditor <WorkspacePanel>(WorkspacePanel);
                workspace.LoadFileFormat((IModelSceneFormat)(obj.Tag));
                workspace.UpdateViewport();
            }
            else if (obj.Tag is STAnimation)
            {
                if (WorkspacePanel == null)
                {
                    WorkspacePanel = CreateWorkspacePanel();
                }

                WorkspacePanel workspace = GetActiveEditor <WorkspacePanel>(WorkspacePanel);
                workspace.LoadFileFormat((STAnimation)(obj.Tag));
                workspace.UpdateViewport();
            }
            else if (obj.Tag is STBone)
            {
                var bone = (STBone)obj.Tag;
                Runtime.SelectedBoneIndex = bone.Index;
                WorkspacePanel.UpdateViewport();
            }

            if (tryUpdateViewport && WorkspacePanel != null)
            {
                WorkspacePanel.UpdateViewport();
            }
            // else
            //    GetActiveEditor<STPanel>();
        }