コード例 #1
0
        void PackagingUpdate()
        {
            //check ended
            if (packageBuildInstance != null && packageBuildInstance.State != ProductBuildInstance.StateEnum.Building)
            {
                var instance2 = packageBuildInstance;
                packageBuildInstance = null;

                if (instance2.State == ProductBuildInstance.StateEnum.Error)
                {
                    EditorMessageBox.ShowWarning(instance2.Error);
                }
            }

            //update controls

            var building = packageBuildInstance != null && packageBuildInstance.State == ProductBuildInstance.StateEnum.Building;

            kryptonButtonPackageCreate.Enabled             = CanPackageProject();
            kryptonButtonPackageCreateAndRun.Enabled       = kryptonButtonPackageCreate.Enabled && GetSelectedBuildConfiguration() != null && GetSelectedBuildConfiguration().SupportsBuildAndRun;
            kryptonTextBoxPackageDestinationFolder.Enabled = !building;
            kryptonButtonPackageBrowse.Enabled             = !building;
            contentBrowserPackage.Enabled = !building;
            if (packageBuildInstance != null)
            {
                progressBarBuild.Value = (int)(packageBuildInstance.Progress * 100);
            }
            progressBarBuild.Visible         = building;
            kryptonButtonBuildCancel.Visible = building;
        }
コード例 #2
0
        private void kryptonButtonDelete_Click(object sender, EventArgs e)
        {
            if (selectedPackage == null)
            {
                return;
            }
            if (!File.Exists(selectedPackage.FullFilePath))
            {
                return;
            }

            var template = Translate("Are you sure you want to delete \'{0}\'?");
            var text     = string.Format(template, selectedPackage.FullFilePath);

            if (EditorMessageBox.ShowQuestion(text, EMessageBoxButtons.YesNo) == EDialogResult.No)
            {
                return;
            }

            try
            {
                File.Delete(selectedPackage.FullFilePath);
            }
            catch (Exception e2)
            {
                EditorMessageBox.ShowWarning(e2.Message);
                return;
            }

            needUpdateList = true;
        }
コード例 #3
0
        public static bool IsInstalled(string packageName)
        {
            var fileName = Path.Combine(PackagesFolder, "PackagesState.txt");

            if (File.Exists(fileName))
            {
                var block = TextBlockUtility.LoadFromRealFile(fileName, out var error);
                if (!string.IsNullOrEmpty(error))
                {
                    EditorMessageBox.ShowWarning(error);
                    return(false);
                }

                foreach (var child in block.Children)
                {
                    if (child.Name == "Package")
                    {
                        if (child.GetAttribute("Name") == packageName)
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
コード例 #4
0
        private void ButtonExport_Click(ProcedureUI.Button sender)
        {
            var meshes = GetObjects <Component_Mesh>();

            if (meshes.Length != 1)
            {
                return;
            }
            var mesh = meshes[0];

#if !DEPLOY
            var dialog = new SaveFileDialog();
            //dialog.InitialDirectory = Path.GetDirectoryName( RealFileName );
            //dialog.FileName = RealFileName;
            dialog.Filter           = "FBX files (*.fbx)|*.fbx";
            dialog.RestoreDirectory = true;
            if (dialog.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            var fileName = dialog.FileName;

            if (!mesh.ExportToFBX(fileName, out var error))
            {
                EditorMessageBox.ShowWarning(error);
            }
#endif
        }
コード例 #5
0
        public static bool ChangeInstalledState(string packageName, bool installed)
        {
            var fileName = Path.Combine(PackagesFolder, "PackagesState.txt");

            //load
            TextBlock block;

            if (File.Exists(fileName))
            {
                block = TextBlockUtility.LoadFromRealFile(fileName, out var error);
                if (!string.IsNullOrEmpty(error))
                {
                    EditorMessageBox.ShowWarning(error);
                    return(false);
                }
            }
            else
            {
                block = new TextBlock();
            }

            //update
            {
                foreach (var child in block.Children)
                {
                    if (child.Name == "Package")
                    {
                        if (child.GetAttribute("Name") == packageName)
                        {
                            block.DeleteChild(child);
                            break;
                        }
                    }
                }

                if (installed)
                {
                    var child = block.AddChild("Package");
                    child.SetAttribute("Name", packageName);
                }
            }

            //save
            {
                if (!Directory.Exists(PackagesFolder))
                {
                    Directory.CreateDirectory(PackagesFolder);
                }

                TextBlockUtility.SaveToRealFile(block, fileName, out var error);
                if (!string.IsNullOrEmpty(error))
                {
                    EditorMessageBox.ShowWarning(error);
                    return(false);
                }
            }

            return(true);
        }
コード例 #6
0
        void PackageCreate(bool run)
        {
            string folder = kryptonTextBoxPackageDestinationFolder.Text.Trim();

            if (string.IsNullOrEmpty(folder))
            {
                return;
            }

            //clear destination folder
            if (Directory.Exists(folder) && !IOUtility.IsDirectoryEmpty(folder))
            {
                var text = string.Format(Translate("Destination folder \'{0}\' is not empty. Clear folder and continue?"), folder);
                if (EditorMessageBox.ShowQuestion(text, MessageBoxButtons.OKCancel) == DialogResult.Cancel)
                {
                    return;
                }

                //delete
                try
                {
                    DirectoryInfo info = new DirectoryInfo(folder);
                    foreach (FileInfo file in info.GetFiles())
                    {
                        file.Delete();
                    }
                    foreach (DirectoryInfo directory in info.GetDirectories())
                    {
                        directory.Delete(true);
                    }
                }
                catch (Exception e)
                {
                    EditorMessageBox.ShowWarning(e.Message);
                    return;
                }
            }

            //start
            try
            {
                if (!Directory.Exists(folder))
                {
                    Directory.CreateDirectory(folder);
                }

                packageBuildInstance = ProductBuildInstance.Start(GetSelectedBuildConfiguration(), folder, run);
            }
            catch (Exception e)
            {
                EditorMessageBox.ShowWarning(e.Message);
                return;
            }

            PackagingUpdate();
        }
コード例 #7
0
        void CreateScene(ContentBrowser.Item item)
        {
            try
            {
                var prefix = VirtualDirectory.Exists("Scenes") ? @"Scenes\" : "";

                string fileName = null;
                for (int n = 1; ; n++)
                {
                    string f = prefix + string.Format(@"New{0}.scene", n > 1 ? n.ToString() : "");
                    if (!VirtualFile.Exists(f))
                    {
                        fileName = f;
                        break;
                    }
                }

                if (!string.IsNullOrEmpty(fileName))
                {
                    var realFileName = VirtualPathUtility.GetRealPathByVirtual(fileName);

                    var    template   = (Component_Scene.NewObjectSettingsScene.TemplateClass)item.Tag;
                    string name       = template.Name + ".scene";
                    var    sourceFile = VirtualPathUtility.GetRealPathByVirtual(@"Base\Tools\NewResourceTemplates\" + name);

                    //copy scene file

                    var text = File.ReadAllText(sourceFile);

                    var directoryName = Path.GetDirectoryName(realFileName);
                    if (!Directory.Exists(directoryName))
                    {
                        Directory.CreateDirectory(directoryName);
                    }

                    File.WriteAllText(realFileName, text);

                    //copy additional folder if exist
                    var sourceFolderPath = sourceFile + "_Files";
                    if (Directory.Exists(sourceFolderPath))
                    {
                        var destFolderPath = realFileName + "_Files";
                        IOUtility.CopyDirectory(sourceFolderPath, destFolderPath);
                    }

                    EditorAPI.SelectFilesOrDirectoriesInMainResourcesWindow(new string[] { realFileName });
                    EditorAPI.OpenFileAsDocument(realFileName, true, true);
                }
            }
            catch (Exception e)
            {
                EditorMessageBox.ShowWarning(e.Message);
                //Log.Warning( e.Message );
                return;
            }
        }
コード例 #8
0
        private void kryptonButtonDelete_Click(object sender, EventArgs e)
        {
            if (selectedPackage == null)
            {
                return;
            }

            bool installed = PackageManager.IsInstalled(selectedPackage.Identifier);

            //Uninstall & Delete
            var skipDeleteMessage = false;

            if (installed)
            {
                if (!TryUninstall())
                {
                    return;
                }
                skipDeleteMessage = true;
            }

            //check can delete
            if (!File.Exists(selectedPackage.FullFilePath))
            {
                return;
            }

            //ask to delete
            if (!skipDeleteMessage)
            {
                var template = Translate("Are you sure you want to delete \'{0}\'?");
                var text     = string.Format(template, selectedPackage.FullFilePath);
                if (EditorMessageBox.ShowQuestion(text, EMessageBoxButtons.YesNo) == EDialogResult.No)
                {
                    return;
                }
            }

            //delete
            try
            {
                File.Delete(selectedPackage.FullFilePath);
            }
            catch (Exception e2)
            {
                EditorMessageBox.ShowWarning(e2.Message);
                return;
            }

            needUpdateList = true;
        }
コード例 #9
0
        public static void ExportComponentToFile(Component component)
        {
#if !DEPLOY
            var componentFolder = "";
            {
                var fileName = ComponentUtility.GetOwnedFileNameOfComponent(component);
                if (!string.IsNullOrEmpty(fileName))
                {
                    componentFolder = Path.GetDirectoryName(VirtualPathUtility.GetRealPathByVirtual(fileName));
                }
            }

            var name = component.Name;
            if (string.IsNullOrEmpty(name))
            {
                name = "Component";
            }

            var extension = "component";
            {
                var attribs = component.GetType().GetCustomAttributes <ResourceFileExtensionAttribute>().ToArray();
                if (attribs.Length != 0)
                {
                    extension = attribs[0].Extension;
                }
            }

            var initialFileName = GetFixedName(name + "." + extension);

            var dialog = new SaveFileDialog();
            dialog.InitialDirectory = componentFolder;
            dialog.FileName         = initialFileName;
            dialog.Filter           = "All files (*.*)|*.*";
            dialog.RestoreDirectory = true;
            if (dialog.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            var saveAsFileName = dialog.FileName;

            if (!ComponentUtility.SaveComponentToFile(component, saveAsFileName, null, out var error))
            {
                EditorMessageBox.ShowWarning(error);
            }
#endif
        }
コード例 #10
0
        public static void DeleteFilesAsStartup()
        {
            try
            {
                var txtFileName = Path.Combine(PackagesFolder, "FilesToDeleteAtStartup.txt");
                if (File.Exists(txtFileName))
                {
                    var fileNames = File.ReadAllLines(txtFileName);

                    foreach (var file in fileNames)
                    {
                        var fullName = Path.Combine(VirtualFileSystem.Directories.Project, file);

                        var       startTime = DateTime.Now;
                        Exception e         = null;
                        do
                        {
                            try
                            {
                                if (File.Exists(fullName))
                                {
                                    File.Delete(fullName);
                                }
                                e = null;
                                break;
                            }
                            catch (Exception e2)
                            {
                                e = e2;
                            }
                        } while((DateTime.Now - startTime).TotalSeconds < 30);

                        if (e != null)
                        {
                            throw e;
                        }
                    }

                    File.Delete(txtFileName);
                }
            }
            catch (Exception e)
            {
                EditorMessageBox.ShowWarning(e.Message);
            }
        }
コード例 #11
0
        private void kryptonButtonNewCreate_Click(object sender, EventArgs e)
        {
            //!!!!

            string folder = kryptonTextBoxNewFolder.Text.Trim();

            if (string.IsNullOrEmpty(folder))
            {
                return;
            }

            try
            {
                while (Directory.Exists(folder) && !IOUtility.IsDirectoryEmpty(folder))
                {
                    var text   = string.Format(Translate("Destination folder \'{0}\' is not empty. Clear folder and continue?"), folder);
                    var result = EditorMessageBox.ShowQuestion(text, MessageBoxButtons.OKCancel);
                    if (result == DialogResult.Cancel)
                    {
                        return;
                    }

                    IOUtility.ClearDirectory(folder);
                }

                if (!Directory.Exists(folder))
                {
                    Directory.CreateDirectory(folder);
                }

                creationInProgress             = true;
                progressBarNew.Visible         = true;
                kryptonButtonNewCancel.Visible = true;
                creationDirectory = folder;

                var tag = objectsBrowserNew.SelectedItems[0].Tag as string;
                creationTask = new Task(CreationFunction, tag);
                creationTask.Start();
            }
            catch (Exception ex)
            {
                EditorMessageBox.ShowWarning(ex.Message);
                return;
            }
        }
コード例 #12
0
        private void kryptonButtonLogin_Click(object sender, EventArgs e)
        {
            var email    = kryptonTextBoxLoginEmail.Text.Trim().ToLower();
            var password = kryptonTextBoxLoginPassword.Text;

            if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password))
            {
                return;
            }

            if (!IsValidEmail(email))
            {
                EditorMessageBox.ShowWarning("Invalid email.");
                return;
            }

            LoginUtility.SetCurrentLicense(kryptonTextBoxLoginEmail.Text, kryptonTextBoxLoginPassword.Text);
        }
コード例 #13
0
        void CreateUIControl()
        {
            try
            {
                var prefix = VirtualDirectory.Exists("UI") ? @"UI\" : "";

                string fileName = null;
                for (int n = 1; ; n++)
                {
                    string f = prefix + string.Format(@"New{0}.ui", n > 1 ? n.ToString() : "");
                    if (!VirtualFile.Exists(f))
                    {
                        fileName = f;
                        break;
                    }
                }

                if (!string.IsNullOrEmpty(fileName))
                {
                    var realFileName = VirtualPathUtility.GetRealPathByVirtual(fileName);

                    var sourceFile = VirtualPathUtility.GetRealPathByVirtual(@"Base\Tools\NewResourceTemplates\UIControl.ui");

                    var text = VirtualFile.ReadAllText(sourceFile);

                    var directoryName = Path.GetDirectoryName(realFileName);
                    if (!Directory.Exists(directoryName))
                    {
                        Directory.CreateDirectory(directoryName);
                    }

                    File.WriteAllText(realFileName, text);

                    EditorAPI.SelectFilesOrDirectoriesInMainResourcesWindow(new string[] { realFileName });
                    EditorAPI.OpenFileAsDocument(realFileName, true, true);
                }
            }
            catch (Exception e)
            {
                EditorMessageBox.ShowWarning(e.Message);
                //Log.Warning( e.Message );
                return;
            }
        }
コード例 #14
0
        private void buttonDestinationFolderBrowse_Click(object sender, EventArgs e)
        {
#if !DEPLOY
            again :;

            string destRealFolder = VirtualPathUtility.GetRealPathByVirtual(textBoxDestinationFolder.Text);

            var dialog = new CommonOpenFileDialog();
            dialog.InitialDirectory = destRealFolder;
            dialog.IsFolderPicker   = true;
            if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
            {
                destRealFolder = dialog.FileName;

                if (!VirtualPathUtility.GetVirtualPathByReal(destRealFolder, out var virtualPath))
                {
                    EditorMessageBox.ShowWarning(Translate("Destination folder must be inside Assets folder."));
                    goto again;
                }

                textBoxDestinationFolder.Text = virtualPath;
            }
#endif
        }
コード例 #15
0
        protected override bool OnMouseDown(Viewport viewport, EMouseButtons button)
        {
            if (button == EMouseButtons.Left)
            {
                if (GetToolPosition(viewport, out var terrain, out toolModifyStartPosition))
                {
                    var layer = DocumentWindow.TerrainPaintLayersGetSelected();

                    if (IsCurrentPaintTool() && layer != null)
                    {
                        if (layer.Mask.Value != null && layer.Mask.Value.Length != 0)
                        {
                            if (layer.Mask.Value.Length != terrain.GetPaintMaskSizeInteger() * terrain.GetPaintMaskSizeInteger())
                            {
                                EditorMessageBox.ShowWarning(EditorLocalization.Translate("Terrain", "Unable to paint to selected layer because Mask size of the layer and MaskSize of the terrain are not equal."));
                                return(true);
                            }
                        }
                    }

                    if (mode == ModeEnum.PaintFlatten)
                    {
                        if (layer != null)
                        {
                            Vector2I maskIndex = terrain.GetMaskIndexByPosition(toolModifyStartPosition.ToVector2());
                            toolModifyStartMaskValue = layer.GetMaskValue(maskIndex);
                        }
                    }

                    toolModify = true;
                    return(true);
                }
            }

            return(false);
        }
コード例 #16
0
        private void ButtonImport_Click(ProcedureUI.Button sender)
        {
            var sky = GetFirstObject <Component_Skybox>();

            if (sky == null)
            {
                return;
            }
            var scene = sky.FindParent <Component_Scene>();

            if (scene == null)
            {
                return;
            }

            var link = editLink.Text;

            var notification = ScreenNotifications.ShowSticky("Importing...");

            try
            {
                string destVirtualFileName;
                {
                    string name = sky.GetPathFromRoot();
                    foreach (char c in new string( Path.GetInvalidFileNameChars()) + new string( Path.GetInvalidPathChars()))
                    {
                        name = name.Replace(c.ToString(), "_");
                    }
                    name = name.Replace(" ", "_");
                    destVirtualFileName = Path.Combine(ComponentUtility.GetOwnedFileNameOfComponent(scene) + "_Files", name);

                    destVirtualFileName += Path.GetExtension(link);
                }

                var destRealFileName = VirtualPathUtility.GetRealPathByVirtual(destVirtualFileName);


                if (File.Exists(destRealFileName))
                {
                    if (EditorMessageBox.ShowQuestion($"Overwrite \'{destRealFileName}\'?", EMessageBoxButtons.OKCancel) == EDialogResult.Cancel)
                    {
                        return;
                    }
                }

                Directory.CreateDirectory(Path.GetDirectoryName(destRealFileName));

                if (File.Exists(link))
                {
                    File.Copy(link, destRealFileName, true);
                }
                else
                {
                    //if( Uri.IsWellFormedUriString( link, UriKind.Absolute ) )
                    //{
                    using (var client = new WebClient())
                        client.DownloadFile(link, destRealFileName);
                    //}
                }

                var oldValue = sky.Cubemap;

                sky.Cubemap = ReferenceUtility.MakeReference(destVirtualFileName);

                //undo
                var property   = (Metadata.Property)sky.MetadataGetMemberBySignature("property:Cubemap");
                var undoItem   = new UndoActionPropertiesChange.Item(sky, property, oldValue);
                var undoAction = new UndoActionPropertiesChange(undoItem);
                Provider.DocumentWindow.Document.CommitUndoAction(undoAction);
            }
            catch (Exception e)
            {
                EditorMessageBox.ShowWarning(e.Message);
            }
            finally
            {
                notification.Close();
            }
        }
コード例 #17
0
        void RenderByEngineRender()
        {
            var renderToFile = RenderToFile;
            var scene        = renderToFile.ParentRoot as Component_Scene;

            //get camera
            var camera = renderToFile.Camera.Value;

            if (camera == null)
            {
                camera = scene.Mode.Value == Component_Scene.ModeEnum._2D ? scene.CameraEditor2D : scene.CameraEditor;
            }
            if (camera == null)
            {
                EditorMessageBox.ShowWarning("Camera is not specified.");
                return;
            }

            var destRealFileName = renderToFile.OutputFileName.Value.Trim();

            if (!Path.IsPathRooted(destRealFileName) && !string.IsNullOrEmpty(destRealFileName))
            {
                destRealFileName = VirtualPathUtility.GetRealPathByVirtual(destRealFileName);
            }

            if (string.IsNullOrEmpty(destRealFileName))
            {
                var dialog = new SaveFileDialog();
                //dialog.InitialDirectory = Path.GetDirectoryName( RealFileName );
                if (renderToFile.Mode.Value == Component_RenderToFile.ModeEnum.Material)
                {
                    dialog.FileName = "Output.material";
                    dialog.Filter   = "Material files (*.material)|*.material";
                }
                else
                {
                    dialog.FileName = "Output.png";
                    dialog.Filter   = "PNG files (*.png)|*.png";
                }
                dialog.RestoreDirectory = true;
                if (dialog.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                destRealFileName = dialog.FileName;
            }
            else
            {
                //!!!!material mode

                //file already exists
                if (File.Exists(destRealFileName))
                {
                    var text = $"The file with name \'{destRealFileName}\' is already exists. Overwrite?";
                    if (EditorMessageBox.ShowQuestion(text, EMessageBoxButtons.OKCancel) == EDialogResult.Cancel)
                    {
                        return;
                    }
                }
            }

            var item = ScreenNotifications.ShowSticky("Processing...");

            try
            {
                if (renderToFile.Mode.Value == Component_RenderToFile.ModeEnum.Material)
                {
                    RenderMaterial(camera, destRealFileName);
                }
                else
                {
                    RenderScreenshot(camera, destRealFileName);
                }
            }
            finally
            {
                item.Close();
            }
        }
コード例 #18
0
        void RenderScreenshot(Component_Camera camera, string destRealFileName)
        {
            var renderToFile = RenderToFile;
            var scene        = renderToFile.ParentRoot as Component_Scene;

            Component_Image texture     = null;
            Component_Image textureRead = null;

            try
            {
                //create
                var resolution = renderToFile.Resolution.Value;

                //!!!!impl
                var         hdr    = false;     //HDR.Value;
                PixelFormat format = hdr ? PixelFormat.Float16RGBA : PixelFormat.A8R8G8B8;
                //PixelFormat format = hdr ? PixelFormat.Float32RGBA : PixelFormat.A8R8G8B8;

                texture               = ComponentUtility.CreateComponent <Component_Image>(null, true, false);
                texture.CreateType    = Component_Image.TypeEnum._2D;
                texture.CreateSize    = resolution;
                texture.CreateMipmaps = false;
                texture.CreateFormat  = format;
                texture.CreateUsage   = Component_Image.Usages.RenderTarget;
                texture.CreateFSAA    = 0;
                texture.Enabled       = true;

                var renderTexture = texture.Result.GetRenderTarget(0, 0);
                var viewport      = renderTexture.AddViewport(true, true);
                viewport.AttachedScene = scene;

                textureRead               = ComponentUtility.CreateComponent <Component_Image>(null, true, false);
                textureRead.CreateType    = Component_Image.TypeEnum._2D;
                textureRead.CreateSize    = resolution;
                textureRead.CreateMipmaps = false;
                textureRead.CreateFormat  = format;
                textureRead.CreateUsage   = Component_Image.Usages.ReadBack | Component_Image.Usages.BlitDestination;
                textureRead.CreateFSAA    = 0;
                textureRead.Enabled       = true;
                //!!!!
                textureRead.Result.PrepareNativeObject();

                //render
                //var image2D = new ImageUtility.Image2D( PixelFormat.Float32RGB, new Vector2I( size * 4, size * 3 ) );

                //var position = Transform.Value.Position;

                //for( int face = 0; face < 6; face++ )
                //{

                //Vector3 dir = Vector3.Zero;
                //Vector3 up = Vector3.Zero;

                ////flipped
                //switch( face )
                //{
                //case 0: dir = -Vector3.YAxis; up = Vector3.ZAxis; break;
                //case 1: dir = Vector3.YAxis; up = Vector3.ZAxis; break;
                //case 2: dir = Vector3.ZAxis; up = -Vector3.XAxis; break;
                //case 3: dir = -Vector3.ZAxis; up = Vector3.XAxis; break;
                //case 4: dir = Vector3.XAxis; up = Vector3.ZAxis; break;
                //case 5: dir = -Vector3.XAxis; up = Vector3.ZAxis; break;
                //}

                try
                {
                    scene.GetDisplayDevelopmentDataInThisApplicationOverride += Scene_GetDisplayDevelopmentDataInThisApplicationOverride;

                    var cameraSettings = new Viewport.CameraSettingsClass(viewport, camera);

                    //var cameraSettings = new Viewport.CameraSettingsClass( viewport, 1, 90, NearClipPlane.Value, FarClipPlane.Value, position, dir, up, ProjectionType.Perspective, 1, 1, 1 );

                    viewport.Update(true, cameraSettings);

                    //clear temp data
                    viewport.RenderingContext.MultiRenderTarget_DestroyAll();
                    viewport.RenderingContext.DynamicTexture_DestroyAll();
                }
                finally
                {
                    scene.GetDisplayDevelopmentDataInThisApplicationOverride -= Scene_GetDisplayDevelopmentDataInThisApplicationOverride;
                }

                texture.Result.GetRealObject(true).BlitTo(viewport.RenderingContext.CurrentViewNumber, textureRead.Result.GetRealObject(true), 0, 0);


                //!!!!pitch

                //get data
                var totalBytes = PixelFormatUtility.GetNumElemBytes(format) * resolution.X * resolution.Y;
                var data       = new byte[totalBytes];
                unsafe
                {
                    fixed(byte *pBytes = data)
                    {
                        var demandedFrame = textureRead.Result.GetRealObject(true).Read((IntPtr)pBytes, 0);

                        while (RenderingSystem.CallBgfxFrame() < demandedFrame)
                        {
                        }
                    }
                }

                var image = new ImageUtility.Image2D(format, resolution, data);

                //reset alpha channel
                for (int y = 0; y < image.Size.Y; y++)
                {
                    for (int x = 0; x < image.Size.X; x++)
                    {
                        var pixel = image.GetPixel(new Vector2I(x, y));
                        pixel.W = 1.0f;
                        image.SetPixel(new Vector2I(x, y), pixel);
                    }
                }

                //image.Data
                //image2D.Blit( index * size, faceImage );

                //Vector2I index = Vector2I.Zero;
                //switch( face )
                //{
                //case 0: index = new Vector2I( 2, 1 ); break;
                //case 1: index = new Vector2I( 0, 1 ); break;
                //case 2: index = new Vector2I( 1, 0 ); break;
                //case 3: index = new Vector2I( 1, 2 ); break;
                //case 4: index = new Vector2I( 1, 1 ); break;
                //case 5: index = new Vector2I( 3, 1 ); break;
                //}

                //var faceImage = new ImageUtility.Image2D( format, new Vector2I( size, size ), data );
                //image2D.Blit( index * size, faceImage );
                //}

                if (!Directory.Exists(Path.GetDirectoryName(destRealFileName)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(destRealFileName));
                }

                if (!ImageUtility.Save(destRealFileName, image.Data, image.Size, 1, image.Format, 1, 0, out var error))
                {
                    throw new Exception(error);
                }
            }
            catch (Exception e)
            {
                EditorMessageBox.ShowWarning(e.Message);
                return;
            }
            finally
            {
                texture?.Dispose();
                textureRead?.Dispose();
            }

            ScreenNotifications.Show("Rendering completed successfully.");
        }
コード例 #19
0
        public virtual bool Creation(NewObjectCell.ObjectCreationContext context)
        {
            if (Window.IsFileCreation() && CreateCSharpClass)
            {
                context.disableFileCreation = true;

                GetCreateCSharpClassInfo(out var csharpRealFileName, out var csharpClassName, out var csharpClassNameWithoutNamespace);

                try
                {
                    //main file
                    {
                        string className = csharpClassName;
                        //string className = CreateCSharpClass ? csharpClassName : Window.SelectedType.Name;
                        var text = ".component " + className + "\r\n{\r\n}";

                        File.WriteAllText(context.fileCreationRealFileName, text);
                    }

                    //cs file
                    //if( CreateCSharpClass )
                    {
                        string code = @"using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using NeoAxis;

namespace Project
{
	public class {Name} : {Base}
	{
	}
}";

                        code = code.Replace("{Name}", csharpClassNameWithoutNamespace);
                        code = code.Replace("{Base}", Window.SelectedType.Name);

                        File.WriteAllText(csharpRealFileName, code);
                    }
                }
                catch (Exception e)
                {
                    EditorMessageBox.ShowWarning(e.Message);
                    //Log.Warning( e.Message );
                    return(false);
                }

                //if( CreateCSharpClass )
                {
                    //add to Project.csproj
                    {
                        var toAdd = new List <string>();

                        var fileName = Path.Combine("Assets", VirtualPathUtility.GetVirtualPathByReal(csharpRealFileName));
                        toAdd.Add(fileName);

                        if (CSharpProjectFileUtility.UpdateProjectFile(toAdd, null, out var error))
                        {
                            if (toAdd.Count > 1)
                            {
                                Log.Info(EditorLocalization.Translate("General", "Items have been added to the Project.csproj."));
                            }
                            else
                            {
                                Log.Info(EditorLocalization.Translate("General", "The item has been added to the Project.csproj."));
                            }
                        }
                        else
                        {
                            EditorMessageBox.ShowWarning(error);
                            //Log.Warning( error );
                            return(false);
                        }
                    }

                    Window.DisableUnableToCreateReason = true;

                    //restart application
                    var text = EditorLocalization.Translate("General", "To apply changes need restart the editor. Restart?\r\n\r\nThe editor must be restarted to compile and enable a new created C# class.");
                    if (EditorMessageBox.ShowQuestion(text, EMessageBoxButtons.YesNo) == EDialogResult.Yes)
                    {
                        EditorAPI.BeginRestartApplication();
                    }

                    Window.DisableUnableToCreateReason = false;
                }
            }

            return(true);
        }
コード例 #20
0
        private void kryptonButtonInstall_Click(object sender, EventArgs e)
        {
            var info = PackageManager.ReadPackageArchiveInfo(selectedPackage.FullFilePath, out var error);

            if (info == null)
            {
                return;
            }

            var filesToCopy = new List <string>();

            foreach (var file in info.Files)
            {
                var fullName = Path.Combine(VirtualFileSystem.Directories.Project, file);
                filesToCopy.Add(fullName);
            }

            var text = string.Format(Translate("Install {0}?\n\n{1} files will created."), selectedPackage.GetDisplayName(), filesToCopy.Count);

            //var text = string.Format( Translate( "Install {0}?\r\n\r\n{1} files will created." ), selectedPackage.Name, filesToCopy.Count );
            //var text = $"Install {selectedPackage.Name}?\r\n\r\n{filesToCopy.Count} files will created.";

            if (EditorMessageBox.ShowQuestion(text, EMessageBoxButtons.YesNo) != EDialogResult.Yes)
            {
                return;
            }

            var notification = ScreenNotifications.ShowSticky("Installing the package...");

            try
            {
                using (var archive = ZipFile.OpenRead(selectedPackage.FullFilePath))
                {
                    foreach (var entry in archive.Entries)
                    {
                        var  fileName  = entry.FullName;
                        bool directory = fileName[fileName.Length - 1] == '/';
                        if (fileName != "Package.info" && !directory)
                        {
                            var fullPath = Path.Combine(VirtualFileSystem.Directories.Project, fileName);

                            var directoryName = Path.GetDirectoryName(fullPath);
                            if (!Directory.Exists(directoryName))
                            {
                                Directory.CreateDirectory(directoryName);
                            }

                            entry.ExtractToFile(fullPath, true);
                        }
                    }
                }

                PackageManager.ChangeInstalledState(selectedPackage.Name, true);
            }
            catch (Exception e2)
            {
                EditorMessageBox.ShowWarning(e2.Message);
                return;
            }
            finally
            {
                notification.Close();
            }

            if (!string.IsNullOrEmpty(info.AddCSharpFilesToProject))
            {
                var toAdd = new ESet <string>();

                var path = Path.Combine(VirtualFileSystem.Directories.Assets, info.AddCSharpFilesToProject);
                if (Directory.Exists(path))
                {
                    var fullPaths = CSharpProjectFileUtility.GetProjectFileCSFiles(false, true);
                    var files     = Directory.GetFiles(path, "*.cs", SearchOption.AllDirectories);
                    foreach (var file in files)
                    {
                        if (!fullPaths.Contains(file))
                        {
                            toAdd.AddWithCheckAlreadyContained(file);
                        }
                    }
                }

                //	if( !fileItem.IsDirectory && Path.GetExtension( fileItem.FullPath ).ToLower() == ".cs" )
                //	{
                //		bool added = CSharpProjectFileUtility.GetProjectFileCSFiles( false, true ).Contains( fileItem.FullPath );
                //		if( !added )
                //			toAdd.Add( fileItem.FullPath );
                //	}

                if (toAdd.Count != 0)
                {
                    if (CSharpProjectFileUtility.UpdateProjectFile(toAdd, null, out var error2))
                    {
                        if (toAdd.Count > 1)
                        {
                            Log.Info(EditorLocalization.Translate("General", "Items have been added to the Project.csproj."));
                        }
                        else
                        {
                            Log.Info(EditorLocalization.Translate("General", "The item has been added to the Project.csproj."));
                        }
                    }
                    else
                    {
                        Log.Warning(error2);
                    }
                }
            }

            needUpdateList = true;

            if (info.MustRestart)
            {
                ShowRestartLabel();
            }

            if (!string.IsNullOrEmpty(info.OpenAfterInstall))
            {
                var realFileName = VirtualPathUtility.GetRealPathByVirtual(info.OpenAfterInstall);

                if (info.MustRestart)
                {
                    EditorSettingsSerialization.OpenFileAtStartup = realFileName;
                }
                else
                {
                    EditorAPI.SelectFilesOrDirectoriesInMainResourcesWindow(new string[] { realFileName }, Directory.Exists(realFileName));
                    EditorAPI.OpenFileAsDocument(realFileName, true, true);
                }
            }

            ScreenNotifications.Show(EditorLocalization.Translate("General", "The package has been successfully installed."));

            //restart application
            if (info.MustRestart)
            {
                var text2 = EditorLocalization.Translate("General", "To apply changes need restart the editor. Restart?");
                if (EditorMessageBox.ShowQuestion(text2, EMessageBoxButtons.YesNo) == EDialogResult.Yes)
                {
                    EditorAPI.BeginRestartApplication();
                }
            }
        }
コード例 #21
0
        private void kryptonButtonUninstall_Click(object sender, EventArgs e)
        {
            var  filesToDelete = new List <string>();
            bool mustRestart   = false;

            //get list of files to delete
            if (File.Exists(selectedPackage.FullFilePath))
            {
                //get list of files from the package archive

                var info = PackageManager.ReadPackageArchiveInfo(selectedPackage.FullFilePath, out var error);
                if (info == null)
                {
                    ScreenNotifications.Show("Could not read the package info.", true);
                    Log.Warning(error);
                    return;
                }

                foreach (var file in info.Files)
                {
                    var fullName = Path.Combine(VirtualFileSystem.Directories.Project, file);
                    if (File.Exists(fullName))
                    {
                        filesToDelete.Add(file);
                    }
                }

                mustRestart = info.MustRestart;
            }
            else
            {
                //get list of files from selectedPackage.Files in case when the archive file is not exists

                var str = selectedPackage.Files.Trim(new char[] { ' ', '\r', '\n' });

                var files = str.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
                foreach (var file in files)
                {
                    var fullName = Path.Combine(VirtualFileSystem.Directories.Project, file);
                    if (File.Exists(fullName))
                    {
                        filesToDelete.Add(file);
                    }
                }

                //!!!!mustRestart
                mustRestart = true;
            }

            if (filesToDelete.Count == 0)
            {
                return;
            }

            var text = string.Format(Translate("Uninstall {0}?\n\n{1} files will deleted."), selectedPackage.GetDisplayName(), filesToDelete.Count);

            if (EditorMessageBox.ShowQuestion(text, EMessageBoxButtons.YesNo) != EDialogResult.Yes)
            {
                return;
            }

            var filesToDeletionAtStartup = new List <string>();

            try
            {
                //remove cs files from Project.csproj
                try
                {
                    var toRemove = new List <string>();

                    foreach (var file in filesToDelete)
                    {
                        var fullName = Path.Combine(VirtualFileSystem.Directories.Project, file);
                        if (Path.GetExtension(fullName).ToLower() == ".cs")
                        {
                            toRemove.Add(VirtualPathUtility.NormalizePath(fullName));
                        }
                    }

                    if (toRemove.Count != 0)
                    {
                        CSharpProjectFileUtility.UpdateProjectFile(null, toRemove, out _);
                    }
                }
                catch { }

                //delete files
                foreach (var file in filesToDelete)
                {
                    var fullName = Path.Combine(VirtualFileSystem.Directories.Project, file);

                    try
                    {
                        File.Delete(fullName);
                    }
                    catch (UnauthorizedAccessException)
                    {
                        filesToDeletionAtStartup.Add(file);
                    }
                    catch (IOException)
                    {
                        filesToDeletionAtStartup.Add(file);
                    }
                }

                //delete empty folders
                {
                    var allFolders = new ESet <string>();
                    foreach (var file in filesToDelete)
                    {
                        var f = Path.GetDirectoryName(file);
                        while (!string.IsNullOrEmpty(f))
                        {
                            allFolders.AddWithCheckAlreadyContained(f);
                            f = Path.GetDirectoryName(f);
                        }
                    }

                    var list = allFolders.ToArray();
                    CollectionUtility.MergeSort(list, delegate(string f1, string f2)
                    {
                        var levels1 = f1.Split(new char[] { '\\' }).Length;
                        var levels2 = f2.Split(new char[] { '\\' }).Length;
                        return(levels2 - levels1);
                    });

                    foreach (var folder in list)
                    {
                        var fullName = Path.Combine(VirtualFileSystem.Directories.Project, folder);

                        if (Directory.Exists(fullName) && IsDirectoryEmpty(fullName))
                        {
                            Directory.Delete(fullName);
                        }
                    }
                }

                PackageManager.ChangeInstalledState(selectedPackage.Name, false);
            }
            catch (Exception e2)
            {
                EditorMessageBox.ShowWarning(e2.Message);
                return;
            }

            if (filesToDeletionAtStartup.Count != 0)
            {
                PackageManager.AddFilesToDeletionAtStartup(filesToDeletionAtStartup);
            }

            needUpdateList = true;

            if (mustRestart)
            {
                ShowRestartLabel();
            }

            ScreenNotifications.Show(EditorLocalization.Translate("General", "The package has been successfully uninstalled."));
        }
コード例 #22
0
        void CreationFunction(object parameter)
        {
            var tag = (string)parameter;

            creationProgressBarValue = 0;

            try
            {
                string sourcePath = VirtualFileSystem.Directories.Project;

                FileInfo[] allFiles = new DirectoryInfo(sourcePath).GetFiles("*.*", SearchOption.AllDirectories);

                long totalLength = 0;
                foreach (var fileInfo in allFiles)
                {
                    totalLength += fileInfo.Length;
                }

                foreach (string dirPath in Directory.GetDirectories(sourcePath, "*", SearchOption.AllDirectories))
                {
                    if (Directory.Exists(dirPath))
                    {
                        Directory.CreateDirectory(dirPath.Replace(sourcePath, creationDirectory));
                    }
                }

                long processedLength = 0;
                foreach (var fileInfo in allFiles)
                {
                    if (File.Exists(fileInfo.FullName))
                    {
                        File.Copy(fileInfo.FullName, fileInfo.FullName.Replace(sourcePath, creationDirectory), false);
                    }

                    processedLength         += fileInfo.Length;
                    creationProgressBarValue = (int)((double)processedLength / (double)totalLength * 100.0);
                    if (creationProgressBarValue > 100)
                    {
                        creationProgressBarValue = 100;
                    }

                    if (!creationInProgress)
                    {
                        return;
                    }
                }

                //if( tag == "Clean" )
                //{
                //	var directory = Path.Combine( creationDirectory, @"Project\Data\_Dev" );
                //	EditorMessageBox.ShowInfo( directory );
                //}

                //Public build
                if (tag == "PublicBuild" || tag == "PublicBuildEmpty")
                {
                    //delete files from root of Assets
                    {
                        var dataDirectory = Path.Combine(creationDirectory, @"Assets");
                        var info          = new DirectoryInfo(dataDirectory);
                        foreach (var file in info.GetFiles())
                        {
                            file.Delete();
                        }
                    }

                    //clear User settings
                    var path = Path.Combine(creationDirectory, @"User settings");
                    if (Directory.Exists(path))
                    {
                        IOUtility.ClearDirectory(path);
                    }

                    //delete _Dev
                    {
                        path = Path.Combine(creationDirectory, @"Assets\_Dev");
                        if (Directory.Exists(path))
                        {
                            Directory.Delete(path, true);
                        }
                    }

                    //delete Caches\Files\_Dev
                    {
                        path = Path.Combine(creationDirectory, @"Caches\Files\_Dev");
                        if (Directory.Exists(path))
                        {
                            Directory.Delete(path, true);
                        }
                    }

                    //delete Binaries\NeoAxis.Internal\Localization
                    path = Path.Combine(creationDirectory, @"Binaries\NeoAxis.Internal\Localization");
                    if (Directory.Exists(path))
                    {
                        Directory.Delete(path, true);
                    }

                    if (tag == "PublicBuildEmpty")
                    {
                        //delete _Tests
                        path = Path.Combine(creationDirectory, @"Assets\_Tests");
                        if (Directory.Exists(path))
                        {
                            Directory.Delete(path, true);
                        }

                        //delete Samples\Nature Demo
                        path = Path.Combine(creationDirectory, @"Assets\Samples\Nature Demo");
                        if (Directory.Exists(path))
                        {
                            Directory.Delete(path, true);
                        }

                        //delete Samples\Sci-fi Demo
                        path = Path.Combine(creationDirectory, @"Assets\Samples\Sci-fi Demo");
                        if (Directory.Exists(path))
                        {
                            Directory.Delete(path, true);
                        }

                        ////delete Samples
                        //path = Path.Combine( creationDirectory, @"Assets\Samples" );
                        //if( Directory.Exists( path ) )
                        //	Directory.Delete( path, true );

                        //delete Caches\Files\_Tests
                        path = Path.Combine(creationDirectory, @"Caches\Files\_Tests");
                        if (Directory.Exists(path))
                        {
                            Directory.Delete(path, true);
                        }

                        //delete Caches\Files\Samples\Sci-fi Demo
                        path = Path.Combine(creationDirectory, @"Caches\Files\Samples\Sci-fi Demo");
                        if (Directory.Exists(path))
                        {
                            Directory.Delete(path, true);
                        }

                        ////delete Caches\Files
                        //path = Path.Combine( creationDirectory, @"Caches\Files" );
                        //if( Directory.Exists( path ) )
                        //	Directory.Delete( path, true );

                        //fix EditorDockingDefault.config
                        try
                        {
                            File.Copy(
                                Path.Combine(sourcePath, @"Assets\Base\Tools\EditorDockingDefault_Empty.config"),
                                Path.Combine(creationDirectory, @"Assets\Base\Tools\EditorDockingDefault.config"), true);
                        }
                        catch { }

                        ////fix Project.csproj
                        //try
                        //{
                        //	var fileName = Path.Combine( creationDirectory, "Project.csproj" );

                        //	var newLines = new List<string>();
                        //	foreach( var line in File.ReadAllLines( fileName ) )
                        //	{
                        //		if( !line.Contains( @"Assets\Samples\" ) )
                        //			newLines.Add( line );
                        //	}

                        //	File.WriteAllLines( fileName, newLines );
                        //}
                        //catch { }
                    }

                    //delete EditorDockingDefault_Empty.config
                    try
                    {
                        File.Delete(Path.Combine(creationDirectory, @"Assets\Base\Tools\EditorDockingDefault_Empty.config"));
                    }
                    catch { }

                    //delete NeoAxis.DeveloperBuild.config
                    path = Path.Combine(creationDirectory, @"NeoAxis.DeveloperBuild.config");
                    if (File.Exists(path))
                    {
                        File.Delete(path);
                    }

                    //delete obj folders
                    foreach (string dirPath in Directory.GetDirectories(creationDirectory, "obj", SearchOption.AllDirectories))
                    {
                        if (Directory.Exists(dirPath))
                        {
                            Directory.Delete(dirPath, true);
                        }
                    }

                    //delete .vs folders
                    foreach (string dirPath in Directory.GetDirectories(creationDirectory, ".vs", SearchOption.AllDirectories))
                    {
                        if (Directory.Exists(dirPath))
                        {
                            Directory.Delete(dirPath, true);
                        }
                    }

                    //rewrite ProjectSettings.component
                    {
                        var content  = @".component NeoAxis.Component_ProjectSettings
{
	Name = All

	.component NeoAxis.Component_ProjectSettings_PageBasic
	{
		Name = General
	}
	.component NeoAxis.Component_ProjectSettings_PageBasic
	{
		Name = Scene Editor
	}
	.component NeoAxis.Component_ProjectSettings_PageBasic
	{
		Name = UI Editor
	}
	.component NeoAxis.Component_ProjectSettings_PageBasic
	{
		Name = C# Editor
	}
	.component NeoAxis.Component_ProjectSettings_PageBasic
	{
		Name = Shader Editor
	}
	.component NeoAxis.Component_ProjectSettings_PageBasic
	{
		Name = Text Editor
	}
	.component NeoAxis.Component_ProjectSettings_PageBasic
	{
		Name = Ribbon and Toolbar
	}
	.component NeoAxis.Component_ProjectSettings_PageBasic
	{
		Name = Shortcuts
	}
	.component NeoAxis.Component_ProjectSettings_PageBasic
	{
		Name = Custom Splash Screen
	}
}";
                        var fileName = Path.Combine(creationDirectory, @"Assets\Base\ProjectSettings.component");
                        File.WriteAllText(fileName, content);
                    }

                    //make zip archive
                    {
                        var fileName = tag == "PublicBuild" ? "Default project with Starter Content, Sci-fi Demo, Nature Demo, Test scenes.zip" : "Default project with Starter Content.zip";
                        //var fileName = tag == "PublicBuild" ? "Default project with sample content.zip" : "Empty project.zip";
                        var zipfileName = Path.Combine(creationDirectory, fileName);

                        //can't write zip file to same folder. using temp file.
                        var tempFileName = Path.GetTempPath() + Guid.NewGuid().ToString() + ".zip";
                        ZipFile.CreateFromDirectory(creationDirectory, tempFileName, CompressionLevel.Optimal, false);
                        File.Copy(tempFileName, zipfileName);
                        File.Delete(tempFileName);

                        //ZipFile.CreateFromDirectory( creationDirectory, zipfileName, CompressionLevel.Optimal, false );
                    }
                }

                creationProgressBarValue = 100;

                //open folder
                try
                {
                    Win32Utility.ShellExecuteEx(null, creationDirectory);
                    //Process.Start( "explorer.exe", creationDirectory );
                }
                catch { }

                ////run process
                //string executableFileName = Path.Combine( creationDirectory, "NeoAxis.Studio.exe" );
                //var runMapProcess = Process.Start( executableFileName, "" );

                //end
                creationInProgress = false;

                ScreenNotifications.Show(Translate("The project was created successfully."));
            }
            catch (Exception ex)
            {
                EditorMessageBox.ShowWarning(ex.Message);
            }
        }
コード例 #23
0
        void CreationFunction(object parameter)
        {
            var tag = (string)parameter;

            creationProgressBarValue = 0;

            try
            {
                string sourcePath = VirtualFileSystem.Directories.Project;

                FileInfo[] allFiles = new DirectoryInfo(sourcePath).GetFiles("*.*", SearchOption.AllDirectories);

                long totalLength = 0;
                foreach (var fileInfo in allFiles)
                {
                    totalLength += fileInfo.Length;
                }

                foreach (string dirPath in Directory.GetDirectories(sourcePath, "*", SearchOption.AllDirectories))
                {
                    if (Directory.Exists(dirPath))
                    {
                        Directory.CreateDirectory(dirPath.Replace(sourcePath, creationDirectory));
                    }
                }

                long processedLength = 0;
                foreach (var fileInfo in allFiles)
                {
                    if (File.Exists(fileInfo.FullName))
                    {
                        File.Copy(fileInfo.FullName, fileInfo.FullName.Replace(sourcePath, creationDirectory), false);
                    }

                    processedLength         += fileInfo.Length;
                    creationProgressBarValue = (int)((double)processedLength / (double)totalLength * 100.0);
                    if (creationProgressBarValue > 100)
                    {
                        creationProgressBarValue = 100;
                    }

                    if (!creationInProgress)
                    {
                        return;
                    }
                }

                creationProgressBarValue = 100;

                //open folder
                try
                {
                    Win32Utility.ShellExecuteEx(null, creationDirectory);
                    //Process.Start( "explorer.exe", creationDirectory );
                }
                catch { }

                ////run process
                //string executableFileName = Path.Combine( creationDirectory, "NeoAxis.Studio.exe" );
                //var runMapProcess = Process.Start( executableFileName, "" );

                //end
                creationInProgress = false;

                ScreenNotifications.Show(Translate("The project was created successfully."));
            }
            catch (Exception ex)
            {
                EditorMessageBox.ShowWarning(ex.Message);
            }
        }
コード例 #24
0
        public static void Import(string[] fileNames, string destRealFolder)          //Initial )
        {
            try
            {
                if (!Directory.Exists(destRealFolder))
                {
                    Directory.CreateDirectory(destRealFolder);
                }
            }
            catch (Exception e)
            {
                EditorMessageBox.ShowWarning(e.Message);
                return;
            }

            ////check files inside project Data folder
            //{
            //	foreach( var fileName in fileNames )
            //	{
            //		var virtualPath = VirtualPathUtils.GetVirtualPathByReal( fileName );
            //		if( !string.IsNullOrEmpty( virtualPath ) )
            //		{
            //			Log.Warning( "Unable to import from project \'Data\' folder. The file already inside the project." );
            //			return;
            //		}
            //	}
            //}

            //processing

            //!!!!пока просто копирование
            //нужно зависимые скопировать
            //также может какую-то обработку делать

            ////select folder if exists files outside Assets folder
            //string destRealFolder = "";
            //{
            //	var existsOutside = fileNames.Any( fileName => string.IsNullOrEmpty( VirtualPathUtility.GetVirtualPathByReal( fileName ) ) );
            //	if( existsOutside )
            //	{
            //		if( string.IsNullOrEmpty( destRealFolderInitial ) )
            //		{
            //			again:;
            //			destRealFolder = VirtualPathUtility.GetRealPathByVirtual( "Import" );
            //			if( !Directory.Exists( destRealFolder ) )
            //				destRealFolder = VirtualPathUtility.GetRealPathByVirtual( "" );

            //			CommonOpenFileDialog dialog = new CommonOpenFileDialog();
            //			dialog.InitialDirectory = destRealFolder;
            //			dialog.IsFolderPicker = true;
            //			if( dialog.ShowDialog() == CommonFileDialogResult.Ok )
            //			{
            //				destRealFolder = dialog.FileName;

            //				if( !VirtualPathUtility.GetVirtualPathByReal( destRealFolder, out _ ) )
            //				{
            //					EditorMessageBox.ShowWarning( "Need select folder inside Assets folder." );
            //					//Log.Warning( "Need select folder inside Data folder." );
            //					goto again;
            //				}
            //			}
            //		}
            //		else
            //			destRealFolder = destRealFolderInitial;
            //	}
            //}

            List <string> fileNamesToSelect = new List <string>();

            foreach (var fileName in fileNames)
            {
                var virtualPath = VirtualPathUtility.GetVirtualPathByReal(fileName);
                if (!string.IsNullOrEmpty(virtualPath))
                {
                    //already inside Data folder
                    fileNamesToSelect.Add(fileName);
                }
                else
                {
                    //copy to Data folder

                    string destinationFileName;
                    try
                    {
                        destinationFileName = Path.Combine(destRealFolder, Path.GetFileName(fileName));

                        if (Directory.Exists(fileName))
                        {
                            IOUtility.CopyDirectory(fileName, destinationFileName);
                        }
                        else
                        {
                            File.Copy(fileName, destinationFileName);
                        }
                    }
                    catch (Exception e)
                    {
                        EditorMessageBox.ShowWarning(e.Message);
                        //Log.Warning( e.Message );
                        return;
                    }

                    fileNamesToSelect.Add(destinationFileName);
                }
            }

            //select new files
            EditorAPI.SelectFilesOrDirectoriesInMainResourcesWindow(fileNamesToSelect.ToArray());
            EditorAPI.SelectDockWindow(EditorAPI.FindWindow <ResourcesWindow>());
        }