/// <summary> /// Loads the block from a file of virtual file system. /// </summary> /// <param name="path">The virtual file path.</param> /// <param name="errorString">The information on an error.</param> /// <returns><see cref="NeoAxis.DataBlock"/> if the block has been loaded; otherwise, <b>null</b>.</returns> public static DataBlock LoadFromVirtualFile(string path, out string errorString) { errorString = null; if (!VirtualFile.Exists(path)) { errorString = string.Format("File not found \"{0}\".", path); return(null); } try { byte[] data = VirtualFile.ReadAllBytes(path); string error; DataBlock dataBlock = DataBlock.Parse(data, false, out error); if (dataBlock == null) { errorString = string.Format("Parsing data block failed \"{0}\" ({1}).", path, error); } return(dataBlock); } catch (Exception) { errorString = string.Format("Reading file failed \"{0}\".", path); return(null); } }
protected override void Load() { if (Owner.LoadedBlock == null) { var settingsFileName = Owner.Name + ".settings"; if (VirtualFile.Exists(settingsFileName)) { //!!!!check errors var block = TextBlockUtility.LoadFromVirtualFile(settingsFileName); Owner.LoadedBlock = block; } else { //!!!!так? var block = new TextBlock(); var child = block.AddChild(".component", MetadataManager.GetTypeOfNetType(typeof(Component_Font)).Name); //default configuration var b1 = child.AddChild("CharacterRanges"); var b2 = b1.AddChild("Value"); b2.SetAttribute("Count", "2"); b2.SetAttribute("0", "32 127"); b2.SetAttribute("1", "160 191"); Owner.LoadedBlock = block; } } base.Load(); }
public void ComponentCreate() { ComponentDestroy(); if (EnabledInHierarchyAndIsNotResource) { var fileName = LoadFile.GetByReference; if (!string.IsNullOrEmpty(fileName) && VirtualFile.Exists(fileName)) { createdComponent = ResourceManager.LoadSeparateInstance <Component>(fileName, true, null); } else { var type = CreateType.Value; if (type != null) { createdComponent = ComponentUtility.CreateComponent(type, null, true, true); } } if (createdComponent != null) { ComponentCreated?.Invoke(this); } } }
static bool fileExists(string fileName) { //!!!!!right? EngineThreading.CheckMainThread(); ////watermark //if( fileName == WmImage.GetName() ) // return true; return(VirtualFile.Exists(fileName)); }
void ProcessCubemaps() { processedEnvironmentCubemap = null; processedIrradianceCubemap = null; var sourceFileName = Cubemap.Value?.LoadFile.Value?.ResourceName; if (string.IsNullOrEmpty(sourceFileName)) { var getByReference = Cubemap.GetByReference; if (!string.IsNullOrEmpty(getByReference)) { try { if (Path.GetExtension(getByReference) == ".image") { sourceFileName = getByReference; } } catch { } } } if (!string.IsNullOrEmpty(sourceFileName)) { bool skip = false; if (sourceFileName.Length > 11) { var s = sourceFileName.Substring(sourceFileName.Length - 11); if (s == "_GenEnv.dds" || s == "_GenIrr.dds") { skip = true; } } if (!skip) { if (!CubemapProcessing.GetOrGenerate(sourceFileName, false, 0, out var envVirtualFileName, out var irrVirtualFileName, out var error)) { Log.Error(error); return; } if (VirtualFile.Exists(envVirtualFileName)) { processedEnvironmentCubemap = ResourceManager.LoadResource <Component_Image>(envVirtualFileName); } if (VirtualFile.Exists(irrVirtualFileName)) { processedIrradianceCubemap = ResourceManager.LoadResource <Component_Image>(irrVirtualFileName); } } } }
void SceneCreate( Component_Scene source ) { SceneDestroy(); var fileName = ComponentUtility.GetOwnedFileNameOfComponent( source ); if( !string.IsNullOrEmpty( fileName ) && VirtualFile.Exists( fileName ) ) createdScene = ResourceManager.LoadSeparateInstance<Component>( fileName, true, null ) as Component_Scene; if( createdScene != null ) SceneCreated?.Invoke( this ); createdSceneSource = source; }
bool InitInternal(string language, bool localizeEngine) { this.language = language; this.localizeEngine = localizeEngine; //alternative loader TextBlock rootBlock = null; bool error2 = false; if (AlternativeLanguageFileLoaderHandler != null) { AlternativeLanguageFileLoaderHandler(ref rootBlock, ref error2); } if (error2) { return(false); } //default loader if (rootBlock == null) { //!!!!локализация дополнений //!!!!!еще можно изменить Engine.language. сделать уровни видать. //!!!!!! string fileName = Path.Combine(Path.Combine(LanguagesDirectory, language), "Engine.language"); if (VirtualFile.Exists(fileName)) { string error; rootBlock = TextBlockUtility.LoadFromVirtualFile(fileName, out error); if (rootBlock == null) { Log.Fatal("Parsing file failed \"{0}\" ({1}).", fileName, error); return(false); } } } if (rootBlock != null) { ParseLanguageTextBlock(rootBlock); } return(true); }
//public Sound Sound //{ // get { return sound; } //} //Sound GetSoundByMode( SoundModes mode ) //{ // soundByMode.TryGetValue( mode, out var sound ); // return sound; //} public Sound LoadSoundByMode(SoundModes mode) { if (!soundByMode.TryGetValue(mode, out var sound)) { //!!!!threading var v = owner.LoadFile.Value; var resourceName = v != null ? v.ResourceName : ""; if (VirtualFile.Exists(resourceName)) { sound = SoundWorld.SoundCreate(resourceName, mode); } soundByMode.Add(mode, sound); } return(sound); }
public static string GetParameter(string virtualTextureFileName, string parameterName, out string error) { string fileName = virtualTextureFileName + ".settings"; if (!VirtualFile.Exists(fileName)) { error = ""; return(""); } var block = TextBlockUtility.LoadFromVirtualFile(fileName, out error); if (block == null) { return(""); } error = ""; return(block.GetAttribute(parameterName)); }
protected override void Load() { if (Owner.LoadedBlock == null) { var settingsFileName = Owner.Name + ".settings"; if (VirtualFile.Exists(settingsFileName)) { var block = TextBlockUtility.LoadFromVirtualFile(settingsFileName); Owner.LoadedBlock = block; } else { var block = new TextBlock(); var child = block.AddChild(".component", MetadataManager.GetTypeOfNetType(typeof(Component_Import3D)).Name); Owner.LoadedBlock = block; } } base.Load(); }
/// <summary> /// Reads a value from \'ProjectSettings.component\' without loading it as component. The method can be used to load data before engine initialized. /// </summary> /// <param name="parameter"></param> /// <returns></returns> public static string ReadParameterFromFile(string parameter, string defaultValue = "") { if (VirtualFile.Exists(FileName)) { try { var key = parameter + " = "; foreach (var line in VirtualFile.ReadAllLines(FileName)) { var index = line.IndexOf(key); if (index != -1) { return(line.Substring(index + key.Length)); } } } catch { } } return(defaultValue); }
static void ReadCachedInfoFile(string destFileNameBase, out string sourceFileHash, out int sourceFileSize) //, out PixelFormat sourceFileFormat ) { sourceFileHash = ""; sourceFileSize = 0; //sourceFileFormat = PixelFormat.Unknown; GetDestFileNames(destFileNameBase, out var infoFileName, out var envFileName, out var irrFileName); if (VirtualFile.Exists(envFileName) && VirtualFile.Exists(irrFileName)) { var block = TextBlockUtility.LoadFromVirtualFile(infoFileName, out _); if (block != null) { try { sourceFileHash = block.GetAttribute("SourceFileHash"); sourceFileSize = int.Parse(block.GetAttribute("SourceFileSize")); //sourceFileFormat = (PixelFormat)Enum.Parse( typeof( PixelFormat ), block.GetAttribute( "SourceFileFormat" ) ); } catch { } } } }
protected override void OnResultCompile() { if (Result == null) { GpuTexture result = null; PixelFormat createFormatV = CreateFormat; if (createFormatV != PixelFormat.Unknown) { //create Vector2I size = CreateSize; if (size.X > 0 && size.Y > 0) { //!!!!!что еще проверить? //!!!!3d support TypeEnum type = CreateType; bool mipmaps = CreateMipmaps; int arrayLayers = CreateArrayLayers; Usages usage = CreateUsage; int fsaa = CreateFSAA; int depth; if (type == TypeEnum._2D) { depth = 1; } else if (type == TypeEnum.Cube) { depth = 6; } else { depth = CreateDepth; } GpuTexture.Usages gpuUsage = 0; if ((usage & Usages.Dynamic) != 0) { gpuUsage |= GpuTexture.Usages.Dynamic; } else { gpuUsage |= GpuTexture.Usages.Static; } if ((usage & Usages.WriteOnly) != 0) { gpuUsage |= GpuTexture.Usages.WriteOnly; } if ((usage & Usages.AutoMipmaps) != 0) { gpuUsage |= GpuTexture.Usages.AutoMipmap; } if ((usage & Usages.RenderTarget) != 0) { gpuUsage |= GpuTexture.Usages.RenderTarget; } if ((usage & Usages.ReadBack) != 0) { gpuUsage |= GpuTexture.Usages.ReadBack; } if ((usage & Usages.BlitDestination) != 0) { gpuUsage |= GpuTexture.Usages.BlitDestination; } //!!!!!почему для других не Discardable? if ((gpuUsage & GpuTexture.Usages.Dynamic) != 0 && (gpuUsage & GpuTexture.Usages.WriteOnly) != 0) { gpuUsage |= GpuTexture.Usages.DynamicWriteOnlyDiscardable; } result = new GpuTexture(type, size, depth, mipmaps, arrayLayers, createFormatV, gpuUsage, fsaa, out var error2); if (!string.IsNullOrEmpty(error2)) { result.Dispose(); result = null; Log.Warning("Unable to create texture. " + error2); } } } else { //load //!!!!3d support //!!!!!проверять наличие файла. если нет, то он по дефолту создает 512 512 Unknown формат. это какая-то хрень. надо разрулить //!!!!threading //!!!!!каждый раз проверять будет если нет файла. где еще так? string[] loadCubeMap6Files = null; string loadFromOneFile = null; if (AnyCubemapSideIsSpecified()) { if (AllCubemapSidesAreaSpecified()) { loadCubeMap6Files = new string[6]; for (int n = 0; n < 6; n++) { var v = GetLoadCubeSide(n); if (v != null) { loadCubeMap6Files[n] = v.ResourceName; } if (string.IsNullOrEmpty(loadCubeMap6Files[n]) || !VirtualFile.Exists(loadCubeMap6Files[n])) { loadCubeMap6Files = null; break; } } } } else { var v = LoadFile.Value; loadFromOneFile = v != null ? v.ResourceName : ""; if (string.IsNullOrEmpty(loadFromOneFile) || !VirtualFile.Exists(loadFromOneFile)) { loadFromOneFile = null; } } //!!!! //bool RenderToTexture = false; //if( RenderToTexture ) // result = RenderToTextureTest(); //else if (loadFromOneFile != null) { result = LoadOneTexture(loadFromOneFile); } else if (loadCubeMap6Files != null) { result = LoadCubeTexture(loadCubeMap6Files); } } Result = result; } }
public static bool SetParameter(string virtualTextureFileName, string parameterName, string parameterValue, out string error) { string fileName = virtualTextureFileName + ".settings"; if (!VirtualFile.Exists(fileName) && string.IsNullOrEmpty(parameterValue)) { //no sense to update error = ""; return(true); } TextBlock block = null; if (VirtualFile.Exists(fileName)) { block = TextBlockUtility.LoadFromVirtualFile(fileName, out error); if (block == null) { return(false); } } else { block = new TextBlock(); } if (!string.IsNullOrEmpty(parameterValue)) { block.SetAttribute(parameterName, parameterValue); } else { block.DeleteAttribute(parameterName); } if (block.Children.Count != 0 || block.Attributes.Count != 0) { if (!TextBlockUtility.SaveToVirtualFile(block, fileName, out error)) { return(false); } } else { if (VirtualFile.Exists(fileName)) { try { File.Delete(VirtualPathUtility.GetRealPathByVirtual(fileName)); } catch (Exception e) { error = e.Message; return(false); } } } error = ""; return(true); }
static bool Generate(string sourceFileName, string sourceFileHash, int sourceFileSize, int specifiedSize, out string error) { var text = $"Generating cubemap \"{Path.GetFileName( sourceFileName )}\"..."; var notification = Editor.ScreenNotifications.ShowSticky(text); var destFileNameBase = GetDestFileNameBase(sourceFileName); GetDestFileNames(destFileNameBase, out var infoFileName, out var envFileName, out var irrFileName); string temporaryGeneratedFile = ""; try { var sourceRealFileName = VirtualPathUtility.GetRealPathByVirtual(sourceFileName); { //convert .image to 6 face HDR image if (Path.GetExtension(sourceRealFileName) == ".image") { var image = ResourceManager.LoadResource <Component_Image>(sourceFileName, out error); if (image == null) { return(false); } string[] loadCubeMap6Files = null; string loadFromOneFile = null; { if (image.AnyCubemapSideIsSpecified()) { if (image.AllCubemapSidesAreaSpecified()) { loadCubeMap6Files = new string[6]; for (int n = 0; n < 6; n++) { var v = image.GetLoadCubeSide(n); if (v != null) { loadCubeMap6Files[n] = v.ResourceName; } if (string.IsNullOrEmpty(loadCubeMap6Files[n]) || !VirtualFile.Exists(loadCubeMap6Files[n])) { loadCubeMap6Files = null; break; } } } } else { var v = image.LoadFile.Value; loadFromOneFile = v != null ? v.ResourceName : ""; if (string.IsNullOrEmpty(loadFromOneFile) || !VirtualFile.Exists(loadFromOneFile)) { loadFromOneFile = null; } } } if (loadFromOneFile != null) { sourceRealFileName = VirtualPathUtility.GetRealPathByVirtual(loadFromOneFile); } else if (loadCubeMap6Files != null) { temporaryGeneratedFile = Path.GetTempPath() + Guid.NewGuid().ToString() + ".hdr"; sourceRealFileName = temporaryGeneratedFile; ImageUtility.Image2D image2D = null; for (int face = 0; face < 6; face++) { if (!ImageUtility.LoadFromVirtualFile(loadCubeMap6Files[face], out var data, out var size, out _, out var format, out _, out _, out error)) { return(false); } if (image2D == null) { image2D = new ImageUtility.Image2D(PixelFormat.Float32RGB, size * new Vector2I(4, 3)); } 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, size, data); image2D.Blit(index * size, faceImage); } if (!ImageUtility.Save(temporaryGeneratedFile, image2D.Data, image2D.Size, 1, image2D.Format, 1, 0, out error)) { return(false); } } else { error = "The image wrong configured."; return(false); } } } int sizeEnv = 32; if (specifiedSize == 0) { //detect size if (!ImageUtility.LoadFromRealFile(sourceRealFileName, out _, out var sourceSize, out _, out _, out _, out _, out error)) { return(false); } //!!!!если кубемапа if (Math.Abs((double)sourceSize.X / (double)sourceSize.Y - 1.333333) <= 0.001) { sizeEnv = sourceSize.X / 4; } else { //!!!! sizeEnv = MathEx.NextPowerOfTwo(sourceSize.X / 3); } if (sizeEnv == 0) { sizeEnv = 1; } } else { sizeEnv = specifiedSize; } int sizeIrr = 32; var destRealFileNameBase = VirtualPathUtility.GetRealPathByVirtual(destFileNameBase); var infoRealFileName = VirtualPathUtility.GetRealPathByVirtual(infoFileName); var envRealFileName = VirtualPathUtility.GetRealPathByVirtual(envFileName); var irrRealFileName = VirtualPathUtility.GetRealPathByVirtual(irrFileName); //delete old files if (File.Exists(infoRealFileName)) { File.Delete(infoRealFileName); } if (File.Exists(envRealFileName)) { File.Delete(envRealFileName); } if (File.Exists(irrRealFileName)) { File.Delete(irrRealFileName); } var destDirectory = Path.GetDirectoryName(destRealFileNameBase); if (!Directory.Exists(destDirectory)) { Directory.CreateDirectory(destDirectory); } var irradianceValues = new List <Vector3>(); if (!GenerateFile(sourceRealFileName, false, sizeEnv, envRealFileName, irradianceValues, out error)) { return(false); } if (!GenerateFile(sourceRealFileName, true, sizeIrr, irrRealFileName, null, out error)) { return(false); } //make .info file { var block = new TextBlock(); block.SetAttribute("SourceFileHash", sourceFileHash); block.SetAttribute("SourceFileSize", sourceFileSize.ToString()); //block.SetAttribute( "SourceFileFormat", sourceFileFormat.ToString() ); for (int n = 0; n < irradianceValues.Count; n++) { block.SetAttribute("Irradiance" + n.ToString(), irradianceValues[n].ToString()); } if (!TextBlockUtility.SaveToRealFile(block, infoRealFileName, out error)) { return(false); } } } catch (Exception e) { error = e.Message; return(false); } finally { notification.Close(); try { if (File.Exists(temporaryGeneratedFile)) { File.Delete(temporaryGeneratedFile); } } catch { } } error = ""; return(true); }
public override void Register() { //Upload to the Store { var a = new EditorAction(); //!!!! a.Name = "Prepare for the Store"; //a.Name = "Upload to the Store"; a.Description = "Uploads the selected product or all products in the selected folder to the NeoAxis Store."; a.CommonType = EditorAction.CommonTypeEnum.General; a.ImageSmall = Properties.Resources.Package_16; a.ImageBig = Properties.Resources.Package_32; a.QatSupport = true; a.ContextMenuSupport = EditorContextMenuWinForms.MenuTypeEnum.Resources; a.RibbonText = ("Upload", ""); a.GetState += delegate(EditorAction.GetStateContext context) { if (context.ObjectsInFocus.DocumentWindow == null && context.ObjectsInFocus.Objects.Length != 0) { var fileItems = context.ObjectsInFocus.Objects.OfType <ContentBrowserItem_File>(); foreach (var fileItem in fileItems) { if (fileItem.IsDirectory) { bool skip = false; if (context.Holder == EditorAction.HolderEnum.ContextMenu) { var files = Directory.GetFiles(fileItem.FullPath, "*.store", SearchOption.AllDirectories); if (files.Length == 0) { skip = true; } } if (!skip) { context.Enabled = true; break; } } if (!fileItem.IsDirectory && Path.GetExtension(fileItem.FullPath).ToLower() == ".store") { context.Enabled = true; break; } } } }; a.Click += delegate(EditorAction.ClickContext context) { if (context.ObjectsInFocus.DocumentWindow == null && context.ObjectsInFocus.Objects.Length != 0) { var realFileNames = new ESet <string>(); { var fileItems = context.ObjectsInFocus.Objects.OfType <ContentBrowserItem_File>(); foreach (var fileItem in fileItems) { if (fileItem.IsDirectory) { realFileNames.AddRangeWithCheckAlreadyContained(Directory.GetFiles(fileItem.FullPath, "*.store", SearchOption.AllDirectories)); } if (!fileItem.IsDirectory && Path.GetExtension(fileItem.FullPath).ToLower() == ".store") { realFileNames.AddWithCheckAlreadyContained(fileItem.FullPath); break; } } } var virtualFileNames = new List <string>(); foreach (var realFileName in realFileNames) { var virtualFileName = VirtualPathUtility.GetVirtualPathByReal(realFileName); if (VirtualFile.Exists(virtualFileName)) { virtualFileNames.Add(virtualFileName); } } if (virtualFileNames.Count == 0) { return; } var text = "Upload selected products to the store?\n\n"; foreach (var fileName in virtualFileNames) { text += fileName + "\n"; } if (EditorMessageBox.ShowQuestion(text, EMessageBoxButtons.OKCancel) == EDialogResult.Cancel) { return; } //process var item = ScreenNotifications.ShowSticky("Processing..."); try { foreach (var fileName in virtualFileNames) { var res = ResourceManager.LoadResource(fileName, true); if (res != null) { var product = res.ResultComponent as Component_StoreProduct; if (product != null) { if (!product.BuildArchive()) { return; } } } } } catch (Exception e) { Log.Warning(e.Message); return; } finally { item.Close(); } if (virtualFileNames.Count > 1) { ScreenNotifications.Show("The products were prepared successfully."); } else { ScreenNotifications.Show("The product was prepared successfully."); } //open folder in the Explorer Win32Utility.ShellExecuteEx(null, Component_StoreProduct.writeToDirectory); } }; EditorActions.Register(a); } }