コード例 #1
0
ファイル: ObjMaterial.cs プロジェクト: mdiller/EffigyMaker
        /// <summary>
        /// Creates an ObjMaterial from a valve material
        /// </summary>
        /// <param name="material">The material to create from</param>
        /// <param name="name">The name of this new material</param>
        /// <param name="vpkLoader">A vpk file loader</param>
        /// <returns>The created ObjMaterial</returns>
        public static ObjMaterial FromVMaterial(Material material, string name, BasicVpkFileLoader vpkLoader)
        {
            var mat = new ObjMaterial();

            mat.Name = name;

            // actual texture
            var filename = material.TextureParams["g_tColor"];
            var data     = vpkLoader.LoadFile(filename + "_c");
            var bitmap   = ((Texture)data.DataBlock).GenerateBitmap();

            mat.TextureImage = SKImage.FromBitmap(bitmap.FlipVertically());

            // Normals
            filename         = material.TextureParams["g_tNormal"];
            data             = vpkLoader.LoadFile(filename + "_c");
            bitmap           = ((Texture)data.DataBlock).GenerateBitmap();
            mat.NormalsImage = SKImage.FromBitmap(bitmap.FlipVertically());

            // Specular
            filename          = material.TextureParams["g_tMasks2"];
            data              = vpkLoader.LoadFile(filename + "_c");
            bitmap            = ((Texture)data.DataBlock).GenerateBitmap();
            mat.SpecularImage = SKImage.FromBitmap(bitmap.FlipVertically());

            return(mat);
        }
コード例 #2
0
ファイル: HeroInfo.cs プロジェクト: mdiller/EffigyMaker
        /// <summary>
        /// Loads the list of hero infos from the vpk
        /// </summary>
        /// <param name="vpkLoader">The vpk file loader</param>
        /// <returns>The loaded hero information</returns>
        public static List <HeroInfo> LoadFromVpk(BasicVpkFileLoader vpkLoader)
        {
            var kvLoader = new KvFileLoader(vpkLoader);
            //var heroScripts = vpkLoader.LoadFile(npcScriptsPath);
            var langJson = (kvLoader.LoadFile(dotaEnglishPath)["lang"]["Tokens"] as JObject);
            var heroJson = kvLoader.LoadFile(npcScriptsPath);

            var heroInfos = new List <HeroInfo>();

            foreach (var heroData in (heroJson["DOTAHeroes"] as JObject))
            {
                var ignoreKeys = new List <string>
                {
                    "Version",
                    "npc_dota_hero_target_dummy",
                    "npc_dota_hero_base"
                };
                if (ignoreKeys.Contains(heroData.Key))
                {
                    continue;
                }
                heroInfos.Add(FromJson(heroData.Key, (JObject)heroData.Value, langJson));
            }

            var itemsJson = kvLoader.LoadFile(itemsScriptsPath);

            foreach (var kv in (itemsJson["items_game"]["items"] as JObject))
            {
                var data = kv.Value as JObject;
                if (data.Value <string>("prefab") == "wearable" || data.Value <string>("prefab") == "default_item")
                {
                    var item = HeroItemInfo.FromJson(kv.Key, data);
                    if (item.HeroName == null || !heroInfos.Any(h => h.Name == item.HeroName))
                    { // this one not assigned to a hero, so skip
                        continue;
                    }
                    if (item.ModelPath == null)
                    { // skip anything missing a model path (this project only cares about models)
                        continue;
                    }
                    heroInfos.FirstOrDefault(h => h.Name == item.HeroName).Cosmetics.Add(item);
                }
            }

            return(heroInfos);
        }
コード例 #3
0
ファイル: ObjExporter.cs プロジェクト: mdiller/EffigyMaker
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="vpkLoader">The fileloader for the vpk</param>
 public ObjExporter(BasicVpkFileLoader vpkLoader)
 {
     VpkLoader = vpkLoader;
 }
コード例 #4
0
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="vpkLoader">The VpkLoader</param>
 public KvFileLoader(BasicVpkFileLoader vpkLoader)
 {
     VpkLoader = vpkLoader;
 }