Esempio n. 1
0
        public byte[] Save(Binary.Exporter binaryExporter, Data.NodeRoot rootNode, XmlDocument editorData)
        {
            var binaryDataLatest = binaryExporter.Export(rootNode, 1, Binary.ExporterVersion.Latest);              // TODO change magnification

            // header
            byte[] headerData = null;
            {
                var data = new List <byte[]>();
                data.Add(Encoding.UTF8.GetBytes("EFKE"));
                data.Add(BitConverter.GetBytes(Version));

                headerData = data.SelectMany(_ => _).ToArray();
            }

            var chunk = new Chunk();

            chunk.AddChunk("INFO", GetInfoData(binaryExporter));
            chunk.AddChunk("EDIT", Compress(editorData));
            chunk.AddChunk("BIN_", binaryDataLatest);

            // fallback
            if (Binary.ExporterVersion.Latest > Binary.ExporterVersion.Ver1500)
            {
                var binaryExporterFallback = new Binary.Exporter();
                var binaryDataFallback     = binaryExporterFallback.Export(Core.Root, 1, Binary.ExporterVersion.Ver1500);
                chunk.AddChunk("BIN_", binaryDataFallback);
            }

            var chunkData = chunk.Save();

            return(headerData.Concat(chunkData).ToArray());
        }
Esempio n. 2
0
        public byte[] Save(Data.NodeRoot rootNode, XmlDocument editorData)
        {
            // binary data
            var binaryExporter   = new Binary.Exporter();
            var binaryDataLatest = binaryExporter.Export(rootNode, 1, Binary.ExporterVersion.Latest);              // TODO change magnification

            // info data
            byte[] infoData = null;
            {
                var data = new List <byte[]>();
                Action <HashSet <string> > exportStrs = (HashSet <string> strs) =>
                {
                    data.Add(BitConverter.GetBytes(strs.Count));
                    foreach (var exportedPath in strs)
                    {
                        data.Add(GetBinaryStr(exportedPath));
                    }
                };

                int infoVersion = (int)Binary.ExporterVersion.Latest;
                data.Add(BitConverter.GetBytes(infoVersion));

                exportStrs(binaryExporter.UsedTextures);
                exportStrs(binaryExporter.UsedNormalTextures);
                exportStrs(binaryExporter.UsedDistortionTextures);
                exportStrs(binaryExporter.Models);
                exportStrs(binaryExporter.Sounds);
                exportStrs(binaryExporter.Materials);

                infoData = data.SelectMany(_ => _).ToArray();
            }

            // header
            byte[] headerData = null;
            {
                var data = new List <byte[]>();
                data.Add(Encoding.UTF8.GetBytes("EFKE"));
                data.Add(BitConverter.GetBytes(Version));

                headerData = data.SelectMany(_ => _).ToArray();
            }

            var chunk = new Chunk();

            chunk.AddChunk("INFO", infoData);
            chunk.AddChunk("EDIT", Compress(editorData));
            chunk.AddChunk("BIN_", binaryDataLatest);

            // fallback
            if (Binary.ExporterVersion.Latest > Binary.ExporterVersion.Ver1500)
            {
                var binaryExporterFallback = new Binary.Exporter();
                var binaryDataFallback     = binaryExporterFallback.Export(Core.Root, 1, Binary.ExporterVersion.Ver1500);
                chunk.AddChunk("BIN_", binaryDataFallback);
            }

            var chunkData = chunk.Save();

            return(headerData.Concat(chunkData).ToArray());
        }
Esempio n. 3
0
        public static void GenerateMaterialCaches()
        {
            var exporter = new Binary.Exporter();

            exporter.Export(Core.Root);

            foreach (var path in exporter.Materials)
            {
                var materialPath = Utils.Misc.GetAbsolutePath(Core.Root.GetPath().GetAbsolutePath(), path);
                GenerateMaterialCache(materialPath);
            }
        }
Esempio n. 4
0
        public unsafe void Send()
        {
            if (!networkClient.IsConnectingNetwork())
            {
                return;
            }

            var binaryExporter = new Binary.Exporter();
            var data           = binaryExporter.Export(Core.Root, 1.0f);

            fixed(byte *p = &data[0])
            {
                networkClient.SendDataByNetwork(System.IO.Path.GetFileNameWithoutExtension(Core.Root.GetFullPath()), new IntPtr(p), data.Length, Core.Root.GetFullPath());
            }
        }
Esempio n. 5
0
        public unsafe void Send()
        {
            if (!native.IsConnectingNetwork())
            {
                return;
            }

            var binaryExporter = new Binary.Exporter();
            var data           = binaryExporter.Export(Core.Option.Magnification);

            fixed(byte *p = &data[0])
            {
                native.SendDataByNetwork(System.IO.Path.GetFileNameWithoutExtension(Core.FullPath), new IntPtr(p), data.Length, Core.FullPath);
            }
        }
Esempio n. 6
0
            public void Update()
            {
                if (isFirstUpdate)
                {
                    Effekseer.GUI.Manager.NativeManager.OpenPopup(id);
                    isFirstUpdate = false;
                }

                if (Effekseer.GUI.Manager.NativeManager.BeginPopupModal(title + id, ref opened, Effekseer.swig.WindowFlags.AlwaysAutoResize))
                {
                    if (Effekseer.GUI.Manager.NativeManager.DragFloat(this.title, mag, 0.1f, 0, float.MaxValue))
                    {
                    }

                    var save_text = "Save";
                    if (Effekseer.Core.Language == Effekseer.Language.Japanese)
                    {
                        save_text = "保存";
                    }

                    if (Effekseer.GUI.Manager.NativeManager.Button(save_text))
                    {
                        var binaryExporter = new Binary.Exporter();
                        var binary         = binaryExporter.Export(mag[0]);
                        System.IO.File.WriteAllBytes(path, binary);
                        Effekseer.Core.Option.ExternalMagnification.SetValue(mag[0]);
                        ShouldBeRemoved = true;
                    }

                    var cancel_text = "Cancel";
                    if (Effekseer.Core.Language == Effekseer.Language.Japanese)
                    {
                        cancel_text = "キャンセル";
                    }

                    if (Effekseer.GUI.Manager.NativeManager.Button(cancel_text))
                    {
                        ShouldBeRemoved = true;
                    }

                    Effekseer.GUI.Manager.NativeManager.EndPopup();
                }
                else
                {
                    ShouldBeRemoved = true;
                }
            }
Esempio n. 7
0
        public static bool GenerateMaterialCaches()
        {
            var exporter = new Binary.Exporter();

            exporter.Export(Core.Root);

            foreach (var path in exporter.Materials)
            {
                var materialPath = Utils.Misc.GetAbsolutePath(Core.Root.GetPath().GetAbsolutePath(), path);
                if (!GenerateMaterialCache(materialPath))
                {
                    return(false);
                }
            }

            return(true);
        }
Esempio n. 8
0
        public bool Save(string path, Data.NodeRoot rootNode, XmlDocument editorData)
        {
            Utils.Logger.Write(string.Format("Save : Start : {0}", path));

            var binaryExporter = new Binary.Exporter();
            var allData        = Save(binaryExporter, rootNode, editorData);

            try
            {
                System.IO.File.WriteAllBytes(path, allData);
            }
            catch (Exception e)
            {
                string messeage = "";
                if (Core.Language == Language.English)
                {
                    messeage = "Failed to save a file " + path + "\nThis error is \n";
                }
                else
                {
                    messeage = "保存に失敗しました。 " + path + "\nエラーは \n";
                }

                messeage += e.ToString();

                if (Core.OnOutputMessage != null)
                {
                    Core.OnOutputMessage(messeage);
                }

                Utils.Logger.Write(string.Format("Save : Failed : {0}", e.ToString()));

                return(false);
            }

            Utils.Logger.Write(string.Format("Save : End"));

            return(true);
        }
Esempio n. 9
0
        EffekseerEffect CreateEffect(float scale, float externalScale, object bindingNode, bool isContainedAsBinary)
        {
            var effect = new EffekseerEffect();

            var name = System.IO.Path.GetFileNameWithoutExtension(Core.FullPath);

            if (string.IsNullOrEmpty(name))
            {
                name = "effect";
            }

            effect.Add("scale", externalScale);

            var bodyName = name + "_body";

            if (bindingNode == null)
            {
                effect.Add("nodeName", name);
            }
            else if (bindingNode is string)
            {
                effect.Add("nodeName", (string)bindingNode);
            }
            else if (bindingNode is int)
            {
                effect.Add("nodeIndex", (int)bindingNode);
            }

            effect.Add("effectName", name);

            var binaryExporter = new Binary.Exporter();
            var binary         = binaryExporter.Export(scale);

            AddBufferView(bodyName, binary);

            effect.Add("body", CreateeBodyAsBufferView(bodyName));

            HashSet <string> textures = new HashSet <string>();

            foreach (var texture in binaryExporter.UsedTextures.ToList().OrderBy(_ => _))
            {
                textures.Add(texture);
            }

            HashSet <string> normalTextures = new HashSet <string>();

            foreach (var texture in binaryExporter.UsedNormalTextures.ToList().OrderBy(_ => _))
            {
                normalTextures.Add(texture);
            }

            HashSet <string> distortionTextures = new HashSet <string>();

            foreach (var texture in binaryExporter.UsedDistortionTextures.ToList().OrderBy(_ => _))
            {
                distortionTextures.Add(texture);
            }

            List <object> images           = new List <object>();
            List <object> normalImages     = new List <object>();
            List <object> distortionImages = new List <object>();

            if (isContainedAsBinary)
            {
                foreach (var texture in textures.ToList().OrderBy(_ => _))
                {
                    Uri u1 = new Uri(System.IO.Path.GetDirectoryName(Core.FullPath) + System.IO.Path.DirectorySeparatorChar.ToString());
                    Uri u2 = new Uri(u1, texture);

                    var buf = System.IO.File.ReadAllBytes(u2.LocalPath);
                    AddBufferView(texture, buf);

                    var mimeType = "dds";
                    if (System.IO.Path.GetExtension(texture).ToLower().Contains("png"))
                    {
                        mimeType = "png";
                    }

                    images.Add(CreateImageAsBufferView(texture, mimeType));
                }

                foreach (var texture in normalTextures.ToList().OrderBy(_ => _))
                {
                    Uri u1 = new Uri(System.IO.Path.GetDirectoryName(Core.FullPath) + System.IO.Path.DirectorySeparatorChar.ToString());
                    Uri u2 = new Uri(u1, texture);

                    var buf = System.IO.File.ReadAllBytes(u2.LocalPath);
                    AddBufferView(texture, buf);

                    var mimeType = "dds";
                    if (System.IO.Path.GetExtension(texture).ToLower().Contains("png"))
                    {
                        mimeType = "png";
                    }

                    normalImages.Add(CreateImageAsBufferView(texture, mimeType));
                }

                foreach (var texture in distortionTextures.ToList().OrderBy(_ => _))
                {
                    Uri u1 = new Uri(System.IO.Path.GetDirectoryName(Core.FullPath) + System.IO.Path.DirectorySeparatorChar.ToString());
                    Uri u2 = new Uri(u1, texture);

                    var buf = System.IO.File.ReadAllBytes(u2.LocalPath);
                    AddBufferView(texture, buf);

                    var mimeType = "dds";
                    if (System.IO.Path.GetExtension(texture).ToLower().Contains("png"))
                    {
                        mimeType = "png";
                    }

                    distortionImages.Add(CreateImageAsBufferView(texture, mimeType));
                }
            }
            else
            {
                foreach (var texture in textures.ToList().OrderBy(_ => _))
                {
                    images.Add(CreateImageAsURI(texture));
                }

                foreach (var texture in normalTextures.ToList().OrderBy(_ => _))
                {
                    normalImages.Add(CreateImageAsURI(texture));
                }

                foreach (var texture in distortionTextures.ToList().OrderBy(_ => _))
                {
                    distortionImages.Add(CreateImageAsURI(texture));
                }
            }

            effect.Add("images", images);
            effect.Add("normalImages", normalImages);
            effect.Add("distortionImages", distortionImages);

            List <object> sounds = new List <object>();

            if (isContainedAsBinary)
            {
                foreach (var sound in binaryExporter.Sounds.ToList().OrderBy(_ => _))
                {
                    Uri u1 = new Uri(System.IO.Path.GetDirectoryName(Core.FullPath) + System.IO.Path.DirectorySeparatorChar.ToString());
                    Uri u2 = new Uri(u1, sound);

                    var buf = System.IO.File.ReadAllBytes(u2.LocalPath);
                    AddBufferView(sound, buf);
                    sounds.Add(CreateAsBufferView(sound));
                }
            }
            else
            {
                foreach (var sound in binaryExporter.Sounds.ToList().OrderBy(_ => _))
                {
                    sounds.Add(CreateImageAsURI(sound));
                }
            }

            effect.Add("sounds", sounds);

            List <object> models = new List <object>();

            if (isContainedAsBinary)
            {
                foreach (var model in binaryExporter.Models.ToList().OrderBy(_ => _))
                {
                    Uri u1 = new Uri(System.IO.Path.GetDirectoryName(Core.FullPath) + System.IO.Path.DirectorySeparatorChar.ToString());
                    Uri u2 = new Uri(u1, model);

                    var buf = System.IO.File.ReadAllBytes(u2.LocalPath);
                    AddBufferView(model, buf);
                    models.Add(CreateAsBufferView(model));
                }
            }
            else
            {
                foreach (var model in binaryExporter.Models.ToList().OrderBy(_ => _))
                {
                    models.Add(CreateImageAsURI(model));
                }
            }

            effect.Add("models", models);

            List <object> materials = new List <object>();

            if (isContainedAsBinary)
            {
                foreach (var material in binaryExporter.Materials.ToList().OrderBy(_ => _))
                {
                    Uri u1 = new Uri(System.IO.Path.GetDirectoryName(Core.FullPath) + System.IO.Path.DirectorySeparatorChar.ToString());
                    Uri u2 = new Uri(u1, material);

                    var buf = System.IO.File.ReadAllBytes(u2.LocalPath);
                    AddBufferView(material, buf);
                    materials.Add(CreateAsBufferView(material));
                }
            }
            else
            {
                foreach (var material in binaryExporter.Materials.ToList().OrderBy(_ => _))
                {
                    materials.Add(CreateImageAsURI(material));
                }
            }

            effect.Add("materials", materials);

            return(effect);
        }
Esempio n. 10
0
        public bool Save(string path)
        {
            // editor data
            var editorData = Core.SaveAsXmlDocument(path);

            // binary data
            var binaryExporter   = new Binary.Exporter();
            var binaryDataLatest = binaryExporter.Export(1, Binary.ExporterVersion.Latest);              // TODO change magnification

            // info data
            byte[] infoData = null;
            {
                var data = new List <byte[]>();
                Action <HashSet <string> > exportStrs = (HashSet <string> strs) =>
                {
                    data.Add(BitConverter.GetBytes(strs.Count));
                    foreach (var exportedPath in strs)
                    {
                        data.Add(GetBinaryStr(exportedPath));
                    }
                };

                int infoVersion = (int)Binary.ExporterVersion.Latest;
                data.Add(BitConverter.GetBytes(infoVersion));

                exportStrs(binaryExporter.UsedTextures);
                exportStrs(binaryExporter.UsedNormalTextures);
                exportStrs(binaryExporter.UsedDistortionTextures);
                exportStrs(binaryExporter.Models);
                exportStrs(binaryExporter.Sounds);
                exportStrs(binaryExporter.Materials);

                infoData = data.SelectMany(_ => _).ToArray();
            }

            // header
            byte[] headerData = null;
            {
                var data = new List <byte[]>();
                data.Add(Encoding.UTF8.GetBytes("EFKE"));
                data.Add(BitConverter.GetBytes(Version));

                headerData = data.SelectMany(_ => _).ToArray();
            }

            var chunk = new Chunk();

            chunk.AddChunk("INFO", infoData);
            chunk.AddChunk("EDIT", Compress(editorData));
            chunk.AddChunk("BIN_", binaryDataLatest);

            // fallback
            if (Binary.ExporterVersion.Latest > Binary.ExporterVersion.Ver1500)
            {
                var binaryExporterFallback = new Binary.Exporter();
                var binaryDataFallback     = binaryExporterFallback.Export(1, Binary.ExporterVersion.Ver1500);
                chunk.AddChunk("BIN_", binaryDataFallback);
            }

            var chunkData = chunk.Save();

            var allData = headerData.Concat(chunkData).ToArray();

            try
            {
                System.IO.File.WriteAllBytes(path, allData);
            }
            catch (Exception e)
            {
                string messeage = "";
                if (Core.Language == Language.English)
                {
                    messeage = "Failed to save a file " + path + "\nThis error is \n";
                }
                else
                {
                    messeage = "保存に失敗しました。 " + path + "\nエラーは \n";
                }

                messeage += e.ToString();

                if (Core.OnOutputMessage != null)
                {
                    Core.OnOutputMessage(messeage);
                }

                return(false);
            }

            return(true);
        }
Esempio n. 11
0
        public bool Save(string path)
        {
            // editor data
            var editorData = Core.SaveAsXmlDocument(path);

            // binary data
            var binaryExporter = new Binary.Exporter();
            var binaryData     = binaryExporter.Export(1);          // TODO change magnification

            // info data
            byte[] infoData = null;
            {
                var data = new List <byte[]>();
                Action <HashSet <string> > exportStrs = (HashSet <string> strs) =>
                {
                    data.Add(BitConverter.GetBytes(strs.Count));
                    foreach (var exportedPath in strs)
                    {
                        data.Add(GetBinaryStr(exportedPath));
                    }
                };

                int infoVersion = 1500;
                data.Add(BitConverter.GetBytes(infoVersion));

                exportStrs(binaryExporter.UsedTextures);
                exportStrs(binaryExporter.UsedNormalTextures);
                exportStrs(binaryExporter.UsedDistortionTextures);
                exportStrs(binaryExporter.Models);
                exportStrs(binaryExporter.Sounds);
                exportStrs(binaryExporter.Materials);

                infoData = data.SelectMany(_ => _).ToArray();
            }

            // header
            byte[] headerData = null;
            {
                var data = new List <byte[]>();
                data.Add(Encoding.UTF8.GetBytes("EFKE"));
                data.Add(BitConverter.GetBytes(Version));

                headerData = data.SelectMany(_ => _).ToArray();
            }

            var chunk = new Chunk();

            chunk.AddChunk("INFO", infoData);
            chunk.AddChunk("EDIT", Compress(editorData));
            chunk.AddChunk("BIN_", binaryData);

            var chunkData = chunk.Save();

            var allData = headerData.Concat(chunkData).ToArray();

            try
            {
                System.IO.File.WriteAllBytes(path, allData);
            }
            catch
            {
                return(false);
            }

            return(true);
        }
Esempio n. 12
0
        public FileInfo AddEffect(string path)
        {
            if (!File.Exists(path))
            {
                return(null);
            }

            DateTime lastWriteTime = File.GetLastWriteTime(path);

            Data.NodeRoot rootNode = Core.LoadFromFile(path);

            var backedupDelegate = Core.OnFileLoaded;

            try
            {
                Core.OnFileLoaded = (filePath) =>
                {
                    string hashName = Path.GetFileName(filePath);
                    var    entry    = ResourceFiles.Find(r => r.HashName == hashName);
                    return((entry != null) ? entry.Data : null);
                };

                // Load all dependent resource files
                var resourcePaths = Utils.Misc.FindResourcePaths(rootNode, Binary.ExporterVersion.Latest);
                var dependencies  = AddEffectDependencies(resourcePaths);

                Func <string, string> convertLoadingFilePath = (string convertedPath) =>
                {
                    foreach (var fileInfo in dependencies)
                    {
                        if (convertedPath.Contains(fileInfo.HashName))
                        {
                            return(convertedPath.Replace(fileInfo.HashName, fileInfo.RelativePath));
                        }
                    }

                    return(convertedPath);
                };

                var      efkefc = new EfkEfc();
                FileInfo file   = new FileInfo();
                file.Type         = FileType.Effect;
                file.RelativePath = Path.GetFileName(path);

                var binaryExporter = new Binary.Exporter();
                binaryExporter.ConvertLoadingFilePath = convertLoadingFilePath;

                file.Data          = efkefc.Save(binaryExporter, rootNode, Core.SaveAsXmlDocument(rootNode));
                file.HashName      = ComputeHashName(file.Data);
                file.LastWriteTime = lastWriteTime;
                file.Dependencies  = dependencies;

                EffectFiles.Add(file);

                return(file);
            }
            finally
            {
                Core.OnFileLoaded = backedupDelegate;
            }
        }
Esempio n. 13
0
        unsafe void Export()
        {
            SetLotationVelocity(
                Core.EffectBehavior.LocationVelocity.X,
                Core.EffectBehavior.LocationVelocity.Y,
                Core.EffectBehavior.LocationVelocity.Z);

            SetRotationVelocity(
                Core.EffectBehavior.RotationVelocity.X / 180.0f * 3.141592f,
                Core.EffectBehavior.RotationVelocity.Y / 180.0f * 3.141592f,
                Core.EffectBehavior.RotationVelocity.Z / 180.0f * 3.141592f);

            SetScaleVelocity(
                Core.EffectBehavior.ScaleVelocity.X,
                Core.EffectBehavior.ScaleVelocity.Y,
                Core.EffectBehavior.ScaleVelocity.Z);

            if (Core.EffectBehavior.RemovedTime.Infinite.Value)
            {
                SetRemovedTime(int.MaxValue);
            }
            else
            {
                SetRemovedTime(Core.EffectBehavior.RemovedTime.Value);
            }

            SetLotation(
                Core.EffectBehavior.Location.X,
                Core.EffectBehavior.Location.Y,
                Core.EffectBehavior.Location.Z);

            SetRotation(
                Core.EffectBehavior.Rotation.X / 180.0f * 3.141592f,
                Core.EffectBehavior.Rotation.Y / 180.0f * 3.141592f,
                Core.EffectBehavior.Rotation.Z / 180.0f * 3.141592f);

            SetScale(
                Core.EffectBehavior.Scale.X,
                Core.EffectBehavior.Scale.Y,
                Core.EffectBehavior.Scale.Z);

            SetTargetLocation(
                Core.EffectBehavior.TargetLocation.X,
                Core.EffectBehavior.TargetLocation.Y,
                Core.EffectBehavior.TargetLocation.Z);

            SetEffectCount(
                Core.EffectBehavior.CountX,
                Core.EffectBehavior.CountY,
                Core.EffectBehavior.CountZ);

            SetAllColor(
                (byte)Core.EffectBehavior.ColorAll.R,
                (byte)Core.EffectBehavior.ColorAll.G,
                (byte)Core.EffectBehavior.ColorAll.B,
                (byte)Core.EffectBehavior.ColorAll.A);

            SetEffectTimeSpan(Core.EffectBehavior.TimeSpan);

            SetEffectDistance(Core.EffectBehavior.Distance);

            SetBackgroundColor(
                (byte)Core.Option.BackgroundColor.R,
                (byte)Core.Option.BackgroundColor.G,
                (byte)Core.Option.BackgroundColor.B);

            SetGridLength(
                Core.Option.GridLength);

            SetStep((int)Core.Option.FPS.Value);
            SetIsRightHand(Core.Option.Coordinate.Value == Data.OptionValues.CoordinateType.Right);

            SetDistortionType((int)Core.Option.DistortionType.Value);
            SetRenderMode((int)Core.Option.RenderingMode.Value);

            if (Core.Culling.Type.Value == Data.EffectCullingValues.ParamaterType.Sphere)
            {
                SetCullingParameter(Core.Culling.IsShown, Core.Culling.Sphere.Radius.Value, Core.Culling.Sphere.Location.X, Core.Culling.Sphere.Location.Y, Core.Culling.Sphere.Location.Z);
            }
            else if (Core.Culling.Type.Value == Data.EffectCullingValues.ParamaterType.None)
            {
                SetCullingParameter(false, 0.0f, 0.0f, 0.0f, 0.0f);
            }

            var binaryExporter = new Binary.Exporter();
            var data           = binaryExporter.Export(Core.Option.Magnification);

            fixed(byte *p = &data[0])
            {
                LoadEffect(new IntPtr(p), data.Length, Core.FullPath);
            }
        }
Esempio n. 14
0
        byte[] GetInfoData(Binary.Exporter binaryExporter)
        {
            // info data
            byte[] infoData = null;
            {
                var data = new List <byte[]>();
                Action <HashSet <string> > exportStrs = (HashSet <string> strs) =>
                {
                    data.Add(BitConverter.GetBytes(strs.Count));
                    foreach (var exportedPath in strs)
                    {
                        data.Add(GetBinaryStr(exportedPath));
                    }
                };

                int infoVersion = (int)Binary.ExporterVersion.Latest;
                data.Add(BitConverter.GetBytes(infoVersion));

                if ((int)infoVersion <= (int)Binary.ExporterVersion.Ver1600)
                {
                    exportStrs(binaryExporter.UsedTextures);
                    exportStrs(binaryExporter.UsedNormalTextures);
                    exportStrs(binaryExporter.UsedDistortionTextures);
                    exportStrs(binaryExporter.Models);
                    exportStrs(binaryExporter.Sounds);
                    exportStrs(binaryExporter.Materials);
                    exportStrs(binaryExporter.Curves);
                }
                else
                {
                    var srgbTextures   = binaryExporter.UsedTextures;
                    var linearTextures = binaryExporter.UsedNormalTextures.Concat(binaryExporter.UsedDistortionTextures).ToList();
                    var textures       = srgbTextures.Concat(linearTextures).Distinct().ToArray();

                    var dependencies = new List <Dependency>();

                    foreach (var texture in textures)
                    {
                        var d = new Dependency();
                        d.FileType = FileType.Texture;
                        d.Flag     = 0;
                        if (srgbTextures.Contains(texture))
                        {
                            d.Flag += (int)TextureColorType.sRGB;
                        }

                        if (linearTextures.Contains(texture))
                        {
                            d.Flag += (int)TextureColorType.Linear;
                        }

                        d.Path = texture;
                        dependencies.Add(d);
                    }

                    foreach (var model in binaryExporter.Models)
                    {
                        var d = new Dependency();
                        d.FileType = FileType.Model;
                        d.Flag     = 0;
                        d.Path     = model;
                        dependencies.Add(d);
                    }

                    foreach (var sound in binaryExporter.Sounds)
                    {
                        var d = new Dependency();
                        d.FileType = FileType.Sound;
                        d.Flag     = 0;
                        d.Path     = sound;
                        dependencies.Add(d);
                    }

                    foreach (var material in binaryExporter.Materials)
                    {
                        var d = new Dependency();
                        d.FileType = FileType.Material;
                        d.Flag     = 0;
                        d.Path     = material;
                        dependencies.Add(d);
                    }

                    foreach (var curve in binaryExporter.Curves)
                    {
                        var d = new Dependency();
                        d.FileType = FileType.Curve;
                        d.Flag     = 0;
                        d.Path     = curve;
                        dependencies.Add(d);
                    }

                    data.Add(BitConverter.GetBytes(dependencies.Count));
                    foreach (var dependency in dependencies)
                    {
                        data.Add(BitConverter.GetBytes((int)dependency.FileType));
                        data.Add(BitConverter.GetBytes((int)dependency.Flag));
                        data.Add(GetBinaryStr(dependency.Path));
                    }
                }

                infoData = data.SelectMany(_ => _).ToArray();
            }

            return(infoData);
        }
Esempio n. 15
0
        public bool ExtractFiles(string dirPath, FileInfo[] extractFiles = null)
        {
            if (!Directory.Exists(dirPath))
            {
                return(false);
            }

            if (extractFiles == null)
            {
                extractFiles = AllFiles.ToArray();
            }

            var backedupDelegate = Core.OnFileLoaded;

            try
            {
                // Extract resource files
                foreach (var file in ResourceFiles)
                {
                    if (!extractFiles.Contains(file))
                    {
                        continue;
                    }

                    string filePath        = Path.Combine(dirPath, file.RelativePath);
                    string resourceDirPath = Path.GetDirectoryName(filePath);
                    if (!Directory.Exists(resourceDirPath))
                    {
                        Directory.CreateDirectory(resourceDirPath);
                    }

                    byte[] data = ApplyResourceDependencies(file, dirPath, filePath);
                    if (data != null)
                    {
                        File.WriteAllBytes(filePath, data);
                        File.SetLastWriteTime(filePath, file.LastWriteTime);
                    }
                }

                // Extract effect files
                foreach (var file in EffectFiles)
                {
                    if (!extractFiles.Contains(file))
                    {
                        continue;
                    }

                    string filePath        = Path.Combine(dirPath, file.RelativePath);
                    string resourceDirPath = Path.GetDirectoryName(filePath);
                    if (!Directory.Exists(resourceDirPath))
                    {
                        Directory.CreateDirectory(resourceDirPath);
                    }

                    EfkEfc efkefc = new EfkEfc();
                    var    doc    = efkefc.Load(file.Data);
                    if (doc == null)
                    {
                        return(false);
                    }

                    Core.OnFileLoaded = (path) =>
                    {
                        string hashName = Path.GetFileName(path);
                        var    entry    = ResourceFiles.Find(r => r.HashName == hashName);
                        return((entry != null) ? entry.Data : null);
                    };

                    NodeRoot root = Core.LoadFromXml(doc, filePath);
                    if (root == null)
                    {
                        return(false);
                    }

                    // Resolve the path of dependent resources
                    var resourcePaths = Utils.Misc.FindResourcePaths(root, Binary.ExporterVersion.Latest);
                    foreach (var list in resourcePaths.All)
                    {
                        ApplyEffectDependencies(list, dirPath, filePath);
                    }

                    // Write effect file
                    Core.OnFileLoaded = backedupDelegate;

                    var    binaryExporter = new Binary.Exporter();
                    byte[] data           = efkefc.Save(binaryExporter, root, Core.SaveAsXmlDocument(root));
                    File.WriteAllBytes(filePath, data);
                    File.SetLastWriteTime(filePath, file.LastWriteTime);
                }
            }
            finally
            {
                Core.OnFileLoaded = backedupDelegate;
            }

            return(true);
        }
Esempio n. 16
0
        unsafe void Export()
        {
            Manager.Viewer.SetDynamicInput(
                Core.Dynamic.Inputs.Values[0].Input.Value,
                Core.Dynamic.Inputs.Values[1].Input.Value,
                Core.Dynamic.Inputs.Values[2].Input.Value,
                Core.Dynamic.Inputs.Values[3].Input.Value);

            SetLotationVelocity(
                Core.EffectBehavior.LocationVelocity.X,
                Core.EffectBehavior.LocationVelocity.Y,
                Core.EffectBehavior.LocationVelocity.Z);

            SetRotationVelocity(
                Core.EffectBehavior.RotationVelocity.X / 180.0f * 3.141592f,
                Core.EffectBehavior.RotationVelocity.Y / 180.0f * 3.141592f,
                Core.EffectBehavior.RotationVelocity.Z / 180.0f * 3.141592f);

            SetScaleVelocity(
                Core.EffectBehavior.ScaleVelocity.X,
                Core.EffectBehavior.ScaleVelocity.Y,
                Core.EffectBehavior.ScaleVelocity.Z);

            if (Core.EffectBehavior.RemovedTime.Infinite.Value)
            {
                SetRemovedTime(int.MaxValue);
            }
            else
            {
                SetRemovedTime(Core.EffectBehavior.RemovedTime.Value);
            }

            SetLotation(
                Core.EffectBehavior.Location.X,
                Core.EffectBehavior.Location.Y,
                Core.EffectBehavior.Location.Z);

            SetRotation(
                Core.EffectBehavior.Rotation.X / 180.0f * 3.141592f,
                Core.EffectBehavior.Rotation.Y / 180.0f * 3.141592f,
                Core.EffectBehavior.Rotation.Z / 180.0f * 3.141592f);

            SetScale(
                Core.EffectBehavior.Scale.X,
                Core.EffectBehavior.Scale.Y,
                Core.EffectBehavior.Scale.Z);

            SetTargetLocation(
                Core.EffectBehavior.TargetLocation.X,
                Core.EffectBehavior.TargetLocation.Y,
                Core.EffectBehavior.TargetLocation.Z);

            SetEffectCount(
                Core.EffectBehavior.CountX,
                Core.EffectBehavior.CountY,
                Core.EffectBehavior.CountZ);

            SetAllColor(
                (byte)Core.EffectBehavior.ColorAll.R,
                (byte)Core.EffectBehavior.ColorAll.G,
                (byte)Core.EffectBehavior.ColorAll.B,
                (byte)Core.EffectBehavior.ColorAll.A);

            var behavior = native.GetEffectBehavior();

            behavior.PlaybackSpeed = Core.EffectBehavior.PlaybackSpeed.Value;
            native.SetViewerEffectBehavior(behavior);

            SetEffectTimeSpan(Core.EffectBehavior.TimeSpan);

            SetEffectDistance(Core.EffectBehavior.Distance);

            SetBackgroundColor(
                (byte)Core.Environment.Background.BackgroundColor.R,
                (byte)Core.Environment.Background.BackgroundColor.G,
                (byte)Core.Environment.Background.BackgroundColor.B);

            SetGridLength(
                Core.Option.GridLength);

            SetStep((int)Core.Option.FPS.Value);
            SetIsRightHand(Core.Option.Coordinate.Value == Data.OptionValues.CoordinateType.Right);

            SetDistortionType((int)Core.Option.DistortionType.Value);
            SetRenderMode((int)Core.Option.RenderingMode.Value);
            SetViewMode((int)Core.Option.ViewerMode.Value);

            if (Core.Culling.Type.Value == Data.EffectCullingValues.ParamaterType.Sphere)
            {
                SetCullingParameter(Core.Culling.IsShown, Core.Culling.Sphere.Radius.Value, Core.Culling.Sphere.Location.X, Core.Culling.Sphere.Location.Y, Core.Culling.Sphere.Location.Z);
            }
            else if (Core.Culling.Type.Value == Data.EffectCullingValues.ParamaterType.None)
            {
                SetCullingParameter(false, 0.0f, 0.0f, 0.0f, 0.0f);
            }

            var binaryExporter = new Binary.Exporter();
            var data           = binaryExporter.Export(Core.Root, Core.Option.Magnification);

            fixed(byte *p = &data[0])
            {
                // TODO refactor replace
                LoadEffect(new IntPtr(p), data.Length, Core.Root.GetFullPath().Replace('\\', '/'));
            }
        }
Esempio n. 17
0
        unsafe void Export()
        {
            var behavior = EffectRenderer.GetBehavior();

            behavior.DynamicInput1 = Core.Dynamic.Inputs.Values[0].Input.Value;
            behavior.DynamicInput2 = Core.Dynamic.Inputs.Values[1].Input.Value;
            behavior.DynamicInput3 = Core.Dynamic.Inputs.Values[2].Input.Value;
            behavior.DynamicInput4 = Core.Dynamic.Inputs.Values[3].Input.Value;

            behavior.PositionVelocityX = Core.EffectBehavior.LocationVelocity.X;
            behavior.PositionVelocityY = Core.EffectBehavior.LocationVelocity.Y;
            behavior.PositionVelocityZ = Core.EffectBehavior.LocationVelocity.Z;

            behavior.RotationVelocityX = Core.EffectBehavior.RotationVelocity.X / 180.0f * 3.141592f;
            behavior.RotationVelocityY = Core.EffectBehavior.RotationVelocity.Y / 180.0f * 3.141592f;
            behavior.RotationVelocityZ = Core.EffectBehavior.RotationVelocity.Z / 180.0f * 3.141592f;

            behavior.ScaleVelocityX = Core.EffectBehavior.ScaleVelocity.X;
            behavior.ScaleVelocityY = Core.EffectBehavior.ScaleVelocity.Y;
            behavior.ScaleVelocityZ = Core.EffectBehavior.ScaleVelocity.Z;

            if (Core.EffectBehavior.RemovedTime.Infinite.Value)
            {
                behavior.RemovedTime = int.MaxValue;
            }
            else
            {
                behavior.RemovedTime = Core.EffectBehavior.RemovedTime.Value;
            }

            behavior.PositionX = Core.EffectBehavior.Location.X;
            behavior.PositionY = Core.EffectBehavior.Location.Y;
            behavior.PositionZ = Core.EffectBehavior.Location.Z;

            behavior.RotationX = Core.EffectBehavior.Rotation.X / 180.0f * 3.141592f;
            behavior.RotationY = Core.EffectBehavior.Rotation.Y / 180.0f * 3.141592f;
            behavior.RotationZ = Core.EffectBehavior.Rotation.Z / 180.0f * 3.141592f;

            behavior.ScaleX = Core.EffectBehavior.Scale.X;
            behavior.ScaleY = Core.EffectBehavior.Scale.Y;
            behavior.ScaleZ = Core.EffectBehavior.Scale.Z;

            behavior.TargetPositionX = Core.EffectBehavior.TargetLocation.X;
            behavior.TargetPositionY = Core.EffectBehavior.TargetLocation.Y;
            behavior.TargetPositionZ = Core.EffectBehavior.TargetLocation.Z;

            behavior.CountX = Core.EffectBehavior.CountX;
            behavior.CountY = Core.EffectBehavior.CountY;
            behavior.CountZ = Core.EffectBehavior.CountZ;

            behavior.AllColorR = (byte)Core.EffectBehavior.ColorAll.R;
            behavior.AllColorG = (byte)Core.EffectBehavior.ColorAll.G;
            behavior.AllColorB = (byte)Core.EffectBehavior.ColorAll.B;
            behavior.AllColorA = (byte)Core.EffectBehavior.ColorAll.A;

            behavior.PlaybackSpeed = Core.EffectBehavior.PlaybackSpeed.Value;

            behavior.TimeSpan = Core.EffectBehavior.TimeSpan;
            behavior.Distance = Core.EffectBehavior.Distance;

            EffectRenderer.SetBehavior(behavior);

            EffectRenderer.SetStep((int)Core.Option.FPS.Value);

            effectSetting.SetCoordinateSyatem(
                Core.Option.Coordinate.Value == Data.OptionValues.CoordinateType.Right ? swig.CoordinateSystemType.RH : swig.CoordinateSystemType.LH);

            var binaryExporter = new Binary.Exporter();
            var data           = binaryExporter.Export(Core.Root, Core.Option.Magnification);
            var path           = Utils.Misc.BackSlashToSlash(Core.Root.GetFullPath());

            fixed(byte *p = &data[0])
            {
                var newEffect = effectFactory.LoadEffect(new IntPtr(p), data.Length, path);

                EffectRenderer.SetEffect(newEffect);

                if (CurrentEffect != null)
                {
                    CurrentEffect.Dispose();
                }

                CurrentEffect = newEffect;
            }
        }