/// <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); }
/// <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); }
/// <summary> /// ctor /// </summary> /// <param name="vpkLoader">The fileloader for the vpk</param> public ObjExporter(BasicVpkFileLoader vpkLoader) { VpkLoader = vpkLoader; }
/// <summary> /// ctor /// </summary> /// <param name="vpkLoader">The VpkLoader</param> public KvFileLoader(BasicVpkFileLoader vpkLoader) { VpkLoader = vpkLoader; }