/// <summary>
 /// Handles loading the specified LogicControl asset from it's raw data.
 /// </summary>
 /// <param name="assetManager">The asset manager.</param>
 /// <param name="name">The name of the LogicControl script.</param>
 /// <param name="data">The raw data associated with the asset.</param>
 /// <returns>The ScriptAsset from the load.</returns>
 public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
 {
     return new ScriptAsset(
         name,
         data.GetProperty<string>("Code"),
         new LogicControlScriptEngine(data.GetProperty<string>("Code")));
 }
예제 #2
0
        /// <summary>
        /// The handle.
        /// </summary>
        /// <param name="assetManager">
        /// The asset manager.
        /// </param>
        /// <param name="name">
        /// The name.
        /// </param>
        /// <param name="data">
        /// The data.
        /// </param>
        /// <returns>
        /// The <see cref="IAsset"/>.
        /// </returns>
        public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
        {
            if (data is CompiledAsset)
            {
                return(new TextureAsset(this.m_AssetContentManager, name, null, data.GetProperty <PlatformData>("PlatformData"), false));
            }

            PlatformData platformData = null;

            if (data.GetProperty <PlatformData>("PlatformData") != null)
            {
                platformData = new PlatformData
                {
                    Platform = data.GetProperty <PlatformData>("PlatformData").Platform,
                    Data     = data.GetProperty <PlatformData>("PlatformData").Data
                };
            }

            var texture = new TextureAsset(
                this.m_AssetContentManager,
                name,
                ByteReader.ReadAsByteArray(data.GetProperty <object>("RawData")),
                platformData,
                data.GetProperty <bool>("SourcedFromRaw"));

            return(texture);
        }
        public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
        {
            if (data is CompiledAsset)
            {
                return new UberEffectAsset(_kernel, _assetContentManager, _rawLaunchArguments, name, null, data.GetProperty<PlatformData>("PlatformData"), false);
            }

            PlatformData platformData = null;
            if (data.GetProperty<PlatformData>("PlatformData") != null)
            {
                platformData = new PlatformData
                {
                    Platform = data.GetProperty<PlatformData>("PlatformData").Platform,
                    Data = data.GetProperty<PlatformData>("PlatformData").Data
                };
            }

            var effect = new UberEffectAsset(
                _kernel,
                _assetContentManager,
                _rawLaunchArguments,
                name,
                data.GetProperty<string>("Code"), 
                platformData, 
                data.GetProperty<bool>("SourcedFromRaw"));

            return effect;
        }
예제 #4
0
 /// <summary>
 /// Handles loading the specified LogicControl asset from it's raw data.
 /// </summary>
 /// <param name="assetManager">The asset manager.</param>
 /// <param name="name">The name of the LogicControl script.</param>
 /// <param name="data">The raw data associated with the asset.</param>
 /// <returns>The ScriptAsset from the load.</returns>
 public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
 {
     return(new ScriptAsset(
                name,
                data.GetProperty <string>("Code"),
                new LogicControlScriptEngine(data.GetProperty <string>("Code"))));
 }
 public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
 {
     return(new UserInterfaceAsset(
                name,
                data.GetProperty <string>("UserInterfaceData"),
                data.GetProperty <UserInterfaceFormat>("UserInterfaceFormat"),
                data.GetProperty <string>("SourcePath")));
 }
 public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
 {
     return new UserInterfaceAsset(
         name,
         data.GetProperty<string>("UserInterfaceData"),
         data.GetProperty<UserInterfaceFormat>("UserInterfaceFormat"),
         data.GetProperty<string>("SourcePath"));
 }
예제 #7
0
 /// <summary>
 /// The handle.
 /// </summary>
 /// <param name="assetManager">
 /// The asset manager.
 /// </param>
 /// <param name="name">
 /// The name.
 /// </param>
 /// <param name="data">
 /// The data.
 /// </param>
 /// <returns>
 /// The <see cref="IAsset"/>.
 /// </returns>
 public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
 {
     return(new LevelAsset(
                name,
                data.GetProperty <string>("LevelData"),
                data.GetProperty <LevelDataFormat>("LevelDataFormat"),
                data.GetProperty <string>("SourcePath")));
 }
예제 #8
0
 /// <summary>
 /// The handle.
 /// </summary>
 /// <param name="assetManager">
 /// The asset manager.
 /// </param>
 /// <param name="name">
 /// The name.
 /// </param>
 /// <param name="data">
 /// The data.
 /// </param>
 /// <returns>
 /// The <see cref="IAsset"/>.
 /// </returns>
 public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
 {
     return new LevelAsset(
         name, 
         data.GetProperty<string>("LevelData"),
         data.GetProperty<LevelDataFormat>("LevelDataFormat"),
         data.GetProperty<string>("SourcePath"));
 }
예제 #9
0
 /// <summary>
 /// The handle.
 /// </summary>
 /// <param name="assetManager">
 /// The asset manager.
 /// </param>
 /// <param name="name">
 /// The name.
 /// </param>
 /// <param name="data">
 /// The data.
 /// </param>
 /// <returns>
 /// The <see cref="IAsset"/>.
 /// </returns>
 public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
 {
     return new TilesetAsset(
         assetManager,
         name,
         data.GetProperty<string>("TextureName"),
         data.GetProperty<int>("CellWidth"),
         data.GetProperty<int>("CellHeight"));
 }
예제 #10
0
 /// <summary>
 /// Loads all potential raw asset candidates for the given asset name, including the last
 /// modification dates of the candidates.  It is up to the caller to determine which
 /// representation will be used.
 /// </summary>
 /// <param name="name">The name of the asset.</param>
 /// <returns>The raw asset candidates.</returns>
 public IEnumerable <KeyValuePair <IRawAsset, DateTime?> > LoadRawAssetCandidatesWithModificationDates(string name)
 {
     foreach (var strategy in this.m_Strategies)
     {
         DateTime? lastModified = null;
         IRawAsset result       = strategy.AttemptLoad(Environment.CurrentDirectory, name, ref lastModified, true);
         if (result != null)
         {
             yield return(new KeyValuePair <IRawAsset, DateTime?>(result, lastModified));
         }
     }
 }
        public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
        {
            if (data is CompiledAsset)
            {
                return new UnifiedShaderAsset(_kernel, _assetContentManager, name, null, data.GetProperty<PlatformData>("PlatformData"), false);
            }

            return new UnifiedShaderAsset(
                _kernel,
                _assetContentManager,
                name,
                data.GetProperty<string>("Code"),
                data.GetProperty<PlatformData>("PlatformData"),
                data.GetProperty<bool>("SourcedFromRaw"));
        }
예제 #12
0
        public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
        {
            if (data is CompiledAsset)
            {
                return new TextureAtlasAsset(
                    this.m_AssetContentManager,
                    name,
                    data.GetProperty<PlatformData>("PlatformData"));
            }

            var sourceTextureNames = (data.GetProperty<JArray>("SourceTextures")).Select(x => x.Value<string>()).ToArray();

            return new TextureAtlasAsset(
                assetManager,
                name,
                sourceTextureNames);
        }
예제 #13
0
 /// <summary>
 /// The save raw asset.
 /// </summary>
 /// <param name="name">
 /// The name.
 /// </param>
 /// <param name="data">
 /// The data.
 /// </param>
 /// <exception cref="AssetNotFoundException">
 /// </exception>
 public void SaveRawAsset(string name, IRawAsset data)
 {
     try
     {
         var file =
             new FileInfo(Path.Combine(this.m_Path, name.Replace('.', Path.DirectorySeparatorChar) + ".asset"));
         this.CreateDirectories(file.Directory);
         using (var writer = new StreamWriter(file.FullName, false, Encoding.UTF8))
         {
             writer.Write(JsonConvert.SerializeObject(data.Properties.ToDictionary(k => k.Key, v => v.Value)));
         }
     }
     catch (Exception ex)
     {
         throw new AssetNotFoundException(name, ex);
     }
 }
예제 #14
0
        /// <summary>
        /// The handle.
        /// </summary>
        /// <param name="assetManager">
        /// The asset manager.
        /// </param>
        /// <param name="name">
        /// The name.
        /// </param>
        /// <param name="data">
        /// The data.
        /// </param>
        /// <returns>
        /// The <see cref="IAsset"/>.
        /// </returns>
        public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
        {
            var groupDict = new Dictionary<string, Dictionary<string, object>>();
            var groupCount = data.GetProperty<int>("GroupCount");
            for (var i = 0; i < groupCount; i++)
            {
                var gi = i.ToString(System.Globalization.NumberFormatInfo.InvariantInfo);
                var groupName = data.GetProperty<string>("GroupName" + gi);
                var keyCount = data.GetProperty<int>("GroupKeyCount" + gi);

                var dict = new Dictionary<string, object>();
                for (var k = 0; k < keyCount; k++)
                {
                    var gk = k.ToString(System.Globalization.NumberFormatInfo.InvariantInfo);
                    var keyName = data.GetProperty<string>("GroupKey" + gi + "KeyName" + gk);
                    var keyType = data.GetProperty<string>("GroupKey" + gi + "KeyType" + gk);
                    object keyValue;

                    if (keyType == string.Empty)
                    {
                        keyValue = null;
                    }
                    else
                    {
                        keyValue = data.GetProperty(
                            System.Type.GetType(keyType),
                            "GroupKey" + gi + "KeyValue" + gk);
                    }

                    if (dict.ContainsKey(keyName))
                    {
                        dict.Remove(keyName);
                    }
                    dict.Add(keyName, keyValue);
                }

                if (groupDict.ContainsKey(groupName))
                {
                    groupDict.Remove(groupName);
                }
                groupDict.Add(groupName, dict);
            }

            return new ConfigurationAsset(name, groupDict);
        }
예제 #15
0
        /// <summary>
        /// The save compiled asset.
        /// </summary>
        /// <param name="rootPath">
        /// The root path.
        /// </param>
        /// <param name="name">
        /// The name.
        /// </param>
        /// <param name="data">
        /// The data.
        /// </param>
        /// <param name="isCompiled">
        /// The is compiled.
        /// </param>
        /// <exception cref="InvalidOperationException">
        /// </exception>
        public void SaveCompiledAsset(string rootPath, string name, IRawAsset data, bool isCompiled, string embedPlatform = null)
        {
            var extension = "asset";
            if (isCompiled)
            {
                extension = "bin";
            }

            var filename = name.Replace('.', Path.DirectorySeparatorChar) + "." + extension;
            if (!string.IsNullOrWhiteSpace(embedPlatform))
            {
                filename = name + "-" + embedPlatform + "." + extension;
            }

            var file = new FileInfo(Path.Combine(rootPath, filename));
            this.CreateDirectories(file.Directory);
            if (isCompiled)
            {
                if (!(data is CompiledAsset))
                {
                    throw new InvalidOperationException();
                }

                var compiledData = (CompiledAsset)data;
                using (var stream = new FileStream(file.FullName, FileMode.Create))
                {
                    stream.WriteByte(0);
                    using (var memory = new MemoryStream())
                    {
                        var serializer = new CompiledAssetSerializer();
                        serializer.Serialize(memory, compiledData);
                        memory.Seek(0, SeekOrigin.Begin);
                        LzmaHelper.Compress(memory, stream);
                    }
                }
            }
            else
            {
                using (var writer = new StreamWriter(file.FullName, false, Encoding.UTF8))
                {
                    writer.Write(JsonConvert.SerializeObject(data.Properties.ToDictionary(k => k.Key, v => v.Value)));
                }
            }
        }
예제 #16
0
        /// <summary>
        /// The save compiled asset.
        /// </summary>
        /// <param name="rootPath">
        /// The root path.
        /// </param>
        /// <param name="name">
        /// The name.
        /// </param>
        /// <param name="data">
        /// The data.
        /// </param>
        /// <param name="isCompiled">
        /// The is compiled.
        /// </param>
        /// <exception cref="InvalidOperationException">
        /// </exception>
        public void SaveCompiledAsset(string rootPath, string name, IRawAsset data, bool isCompiled, string embedPlatform = null)
        {
            var extension = "asset";
            if (isCompiled)
            {
                extension = "bin";
            }

            var filename = name.Replace('.', Path.DirectorySeparatorChar) + "." + extension;
            if (!string.IsNullOrWhiteSpace(embedPlatform))
            {
                filename = name + "-" + embedPlatform + "." + extension;
            }

            var file = new FileInfo(Path.Combine(rootPath, filename));
            this.CreateDirectories(file.Directory);
            if (isCompiled)
            {
                if (!(data is CompiledAsset))
                {
                    throw new InvalidOperationException();
                }

                var compiledData = (CompiledAsset)data;
                using (var stream = new FileStream(file.FullName, FileMode.Create))
                {
                    // LZMA compression is proving too expensive to decompress.  We'll look into
                    // LZ4 in the future, but for now, just store assets uncompressed.
                    stream.WriteByte(CompiledAsset.FORMAT_UNCOMPRESSED);

                    var serializer = new CompiledAssetSerializer();
                    serializer.Serialize(stream, compiledData);
                }
            }
            else
            {
                using (var writer = new StreamWriter(file.FullName, false, Encoding.UTF8))
                {
                    writer.Write(JsonConvert.SerializeObject(data.Properties.ToDictionary(k => k.Key, v => v.Value)));
                }
            }
        }
예제 #17
0
 /// <summary>
 /// The can handle.
 /// </summary>
 /// <param name="data">
 /// The data.
 /// </param>
 /// <returns>
 /// The <see cref="bool"/>.
 /// </returns>
 public bool CanHandle(IRawAsset data)
 {
     return data.GetProperty<string>("Loader") == typeof(TilesetAssetLoader).FullName;
 }
예제 #18
0
 /// <summary>
 /// Returns whether this asset loader can handle the specified asset.
 /// </summary>
 /// <param name="data">
 /// The raw asset data to check.
 /// </param>
 /// <returns>
 /// Whether this asset loader can handle the specified asset.
 /// </returns>
 public bool CanHandle(IRawAsset data)
 {
     return(data.GetProperty <string>("Loader") == typeof(LogicControlScriptAssetLoader).FullName);
 }
예제 #19
0
 /// <summary>
 /// The handle.
 /// </summary>
 /// <param name="assetManager">
 /// The asset manager.
 /// </param>
 /// <param name="name">
 /// The name.
 /// </param>
 /// <param name="data">
 /// The data.
 /// </param>
 /// <returns>
 /// The <see cref="IAsset"/>.
 /// </returns>
 public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
 {
     var value = (AIAsset)this.m_Kernel.Get(data.GetProperty<Type>("Type"));
     value.Name = name;
     return value;
 }
예제 #20
0
 /// <summary>
 /// The can handle.
 /// </summary>
 /// <param name="data">
 /// The data.
 /// </param>
 /// <returns>
 /// The <see cref="bool"/>.
 /// </returns>
 public bool CanHandle(IRawAsset data)
 {
     return typeof(AIAsset).IsAssignableFrom(data.GetProperty<Type>("Type"));
 }
예제 #21
0
        /// <summary>
        /// The handle.
        /// </summary>
        /// <param name="assetManager">
        /// The asset manager.
        /// </param>
        /// <param name="name">
        /// The name.
        /// </param>
        /// <param name="data">
        /// The data.
        /// </param>
        /// <returns>
        /// The <see cref="IAsset"/>.
        /// </returns>
        public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
        {
            if (data.IsCompiled)
            {
                return new AudioAsset(name, null, data.GetProperty<PlatformData>("PlatformData"), false);
            }

            PlatformData platformData = null;
            if (data.GetProperty<PlatformData>("PlatformData") != null)
            {
                platformData = new PlatformData
                {
                    Platform = data.GetProperty<PlatformData>("PlatformData").Platform,
                    Data = data.GetProperty<PlatformData>("PlatformData").Data
                };
            }

            var audio = new AudioAsset(
                name, 
                ByteReader.ReadAsByteArray(data.GetProperty<object>("RawData")), 
                platformData, 
                data.GetProperty<bool>("SourcedFromRaw"));

            return audio;
        }
예제 #22
0
 public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
 {
     return new VariableAsset(name, data.GetProperty<object>("Value"));
 }
예제 #23
0
        /// <summary>
        /// The handle.
        /// </summary>
        /// <param name="assetManager">
        /// The asset manager.
        /// </param>
        /// <param name="name">
        /// The name.
        /// </param>
        /// <param name="data">
        /// The data.
        /// </param>
        /// <returns>
        /// The <see cref="IAsset"/>.
        /// </returns>
        public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
        {
            if (data is CompiledAsset)
            {
                return new ModelAsset(name, null, null, data.GetProperty<PlatformData>("PlatformData"), false, string.Empty);
            }

            PlatformData platformData = null;
            if (data.GetProperty<PlatformData>("PlatformData") != null)
            {
                platformData = new PlatformData
                {
                    Platform = data.GetProperty<PlatformData>("PlatformData").Platform,
                    Data = data.GetProperty<PlatformData>("PlatformData").Data
                };
            }

            var model = new ModelAsset(
                name,
                ByteReader.ReadAsByteArray(data.GetProperty<object>("RawData")),
                data.GetProperty<System.Collections.Generic.Dictionary<string, byte[]>>("RawAdditionalAnimations"),
                platformData,
                data.GetProperty<bool>("SourcedFromRaw"),
                data.GetProperty<string>("Extension"));

            return model;
        }
예제 #24
0
        /// <summary>
        /// The handle.
        /// </summary>
        /// <param name="assetManager">
        /// The asset manager.
        /// </param>
        /// <param name="name">
        /// The name.
        /// </param>
        /// <param name="data">
        /// The data.
        /// </param>
        /// <returns>
        /// The <see cref="IAsset"/>.
        /// </returns>
        public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
        {
            if (data.IsCompiled)
            {
                return new FontAsset(this.m_AssetContentManager, name, null, 0, false, 0, data.GetProperty<PlatformData>("PlatformData"));
            }

            PlatformData platformData = null;
            if (data.GetProperty<PlatformData>("PlatformData") != null)
            {
                platformData = new PlatformData
                {
                    Platform = data.GetProperty<PlatformData>("PlatformData").Platform,
                    Data = ByteReader.ReadAsByteArray(data.GetProperty<PlatformData>("PlatformData").Data)
                };
            }

            var effect = new FontAsset(
                this.m_AssetContentManager,
                name,
                data.GetProperty<string>("FontName"),
                data.GetProperty<int>("FontSize"),
                data.GetProperty<bool>("UseKerning"),
                data.GetProperty<int>("Spacing"),
                platformData);

            return effect;
        }
 /// <summary>
 /// Returns whether this asset loader can handle the specified asset.
 /// </summary>
 /// <param name="data">
 /// The raw asset data to check.
 /// </param>
 /// <returns>
 /// Whether this asset loader can handle the specified asset.
 /// </returns>
 public bool CanHandle(IRawAsset data)
 {
     return data.GetProperty<string>("Loader") == typeof(LogicControlScriptAssetLoader).FullName;
 }
예제 #26
0
        /// <summary>
        /// The handle.
        /// </summary>
        /// <param name="assetManager">
        /// The asset manager.
        /// </param>
        /// <param name="name">
        /// The name.
        /// </param>
        /// <param name="data">
        /// The data.
        /// </param>
        /// <returns>
        /// The <see cref="IAsset"/>.
        /// </returns>
        public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
        {
            if (data is CompiledAsset)
            {
                return new TextureAsset(this.m_AssetContentManager, name, null, data.GetProperty<PlatformData>("PlatformData"), false);
            }

            PlatformData platformData = null;
            if (data.GetProperty<PlatformData>("PlatformData") != null)
            {
                platformData = new PlatformData
                {
                    Platform = data.GetProperty<PlatformData>("PlatformData").Platform,
                    Data = data.GetProperty<PlatformData>("PlatformData").Data
                };
            }

            var texture = new TextureAsset(
                this.m_AssetContentManager,
                name,
                ByteReader.ReadAsByteArray(data.GetProperty<object>("RawData")),
                platformData,
                data.GetProperty<bool>("SourcedFromRaw"));

            return texture;
        }
예제 #27
0
 /// <summary>
 /// The handle.
 /// </summary>
 /// <param name="assetManager">
 /// The asset manager.
 /// </param>
 /// <param name="name">
 /// The name.
 /// </param>
 /// <param name="data">
 /// The data.
 /// </param>
 /// <returns>
 /// The <see cref="IAsset"/>.
 /// </returns>
 public IAsset Handle(IAssetManager assetManager, string name, IRawAsset data)
 {
     // The text key is the asset name.
     return new LanguageAsset(name, data.GetProperty<string>("Value"));
 }