private static KBatchGroupData GetAnimBatchGroupData(KAnimFileData animFile) { if (!animFile.batchTag.IsValid) { Debug.LogErrorFormat("Invalid batchTag for anim [{0}]", animFile.name); } Debug.Assert(animFile.batchTag.IsValid, "Invalid batch tag"); KAnimGroupFile.Group group = KAnimGroupFile.GetGroup(animFile.batchTag); if (group == null) { Debug.LogErrorFormat("Null group for tag [{0}]", animFile.batchTag); } HashedString hashedString = animFile.batchTag; KBatchGroupData kBatchGroupData = null; if (group.renderType == KAnimBatchGroup.RendererType.DontRender || group.renderType == KAnimBatchGroup.RendererType.AnimOnly) { if (!group.swapTarget.IsValid) { Debug.LogErrorFormat("Invalid swap target for group [{0}]", group.id); } hashedString = group.swapTarget; } kBatchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(hashedString); if (kBatchGroupData == null) { Debug.LogErrorFormat("Null batch group for tag [{0}]", hashedString); } return(kBatchGroupData); }
public static KAnimGroupFile GetGroupFile() { if ((UnityEngine.Object)groupfile == (UnityEngine.Object)null) { groupfile = (KAnimGroupFile)Resources.Load("animgrouptags", typeof(KAnimGroupFile)); } return(groupfile); }
private void Awake() { KAnimBatchManager.DestroyInstance(); KAnimGroupFile.DestroyInstance(); KGlobalAnimParser.DestroyInstance(); KAnimBatchManager.CreateInstance(); KGlobalAnimParser.CreateInstance(); Global.Instance.modManager.Load(Content.Animation); KAnimGroupFile.GetGroupFile().LoadAll(); KAnimBatchManager.Instance().CompleteInit(); }
/// <summary> /// Loads the anims on a background thread. /// </summary> private static void AsyncLoadAnims() { #if DEBUG PUtil.LogDebug("Loading anims on thread " + Thread.CurrentThread.ManagedThreadId); #endif try { KAnimGroupFile.LoadAll(); KAnimBatchManager.Instance().CompleteInit(); } catch (Exception e) { DebugUtil.LogException(Assets.instance, e.Message, e); } animsDone.Set(); LoadGameHashes(); }
public KAnimBatchGroup(HashedString id) { data = KAnimBatchManager.Instance().GetBatchGroupData(id); materials = new Material[5]; batchID = id; KAnimGroupFile.Group group = KAnimGroupFile.GetGroup(id); if (group != null) { maxGroupSize = group.maxGroupSize; if (maxGroupSize <= 0) { maxGroupSize = 30; } SetupMeshData(); InitBuildAndAnimTex(); } }
public static KAnimFile AddKAnim(string name, TextAsset anim_file, TextAsset build_file, IList <Texture2D> textures) { KAnimFile kAnimFile = ScriptableObject.CreateInstance <KAnimFile>(); kAnimFile.Initialize(anim_file, build_file, textures); kAnimFile.name = name; AnimCommandFile animCommandFile = new AnimCommandFile(); KAnimGroupFile.GroupFile groupFile = new KAnimGroupFile.GroupFile(); groupFile.groupID = animCommandFile.GetGroupName(kAnimFile); groupFile.commandDirectory = "assets/" + name; animCommandFile.AddGroupFile(groupFile); KAnimGroupFile groupFile2 = KAnimGroupFile.GetGroupFile(); groupFile2.AddAnimFile(groupFile, animCommandFile, kAnimFile); Assets.ModLoadedKAnims.Add(kAnimFile); return(kAnimFile); }
public static KAnimFile AddKAnimMod(string name, KAnimFile.Mod anim_mod) { KAnimFile kAnimFile = ScriptableObject.CreateInstance <KAnimFile>(); kAnimFile.mod = anim_mod; kAnimFile.name = name; AnimCommandFile animCommandFile = new AnimCommandFile(); KAnimGroupFile.GroupFile groupFile = new KAnimGroupFile.GroupFile(); groupFile.groupID = animCommandFile.GetGroupName(kAnimFile); groupFile.commandDirectory = "assets/" + name; animCommandFile.AddGroupFile(groupFile); KAnimGroupFile groupFile2 = KAnimGroupFile.GetGroupFile(); if (groupFile2.AddAnimMod(groupFile, animCommandFile, kAnimFile) == KAnimGroupFile.AddModResult.Added) { Assets.ModLoadedKAnims.Add(kAnimFile); } return(kAnimFile); }
private void SetBatchGroup(KAnimFileData kafd) { DebugUtil.Assert(!this.batchGroupID.IsValid, "Should only be setting the batch group once."); DebugUtil.Assert(kafd != null, "Null anim data!! For", base.name); base.curBuild = kafd.build; DebugUtil.Assert(base.curBuild != null, "Null build for anim!! ", base.name, kafd.name); KAnimGroupFile.Group group = KAnimGroupFile.GetGroup(base.curBuild.batchTag); HashedString batchGroupID = kafd.build.batchTag; if (group.renderType == KAnimBatchGroup.RendererType.DontRender || group.renderType == KAnimBatchGroup.RendererType.AnimOnly) { Debug.Assert(group.swapTarget.IsValid, "Invalid swap target fro group [" + group.id + "]"); batchGroupID = group.swapTarget; } this.batchGroupID = batchGroupID; base.symbolInstanceGpuData = new SymbolInstanceGpuData(KAnimBatchManager.instance.GetBatchGroupData(this.batchGroupID).maxSymbolsPerBuild); base.symbolOverrideInfoGpuData = new SymbolOverrideInfoGpuData(KAnimBatchManager.instance.GetBatchGroupData(this.batchGroupID).symbolFrameInstances.Count); if (!this.batchGroupID.IsValid || this.batchGroupID == KAnimBatchManager.NO_BATCH) { Debug.LogError("Batch is not ready: " + base.name); } }
public static bool Prefix(string name, KAnimFile.Mod anim_mod) { if (!name.StartsWith(INTERACTION_ANIM_PREFIX)) { return(true); } KAnimFile instance = ScriptableObject.CreateInstance <KAnimFile>(); instance.mod = anim_mod; instance.name = name; KAnimGroupFile groupFile = KAnimGroupFile.GetGroupFile(); HashedString groupId = INTERACTION_ANIM_GROUP; List <KAnimGroupFile.Group> groups = Traverse.Create(groupFile).Field("groups").GetValue <List <KAnimGroupFile.Group> >(); var group = groups.Find(t => t.id == groupId); if (group == null) { Debug.LogError($"Could not find animation group {INTERACTION_ANIM_GROUP.HashValue} when adding animation {name}. Loading animation as normal and not as interaction. Perhaps Klei changed the name of the interaction group?"); return(true); } group.files.Add(instance); Assets.ModLoadedKAnims.Add(instance); return(false); }
public static void SetGroupFile(KAnimGroupFile file) { groupfile = file; groupfile.Sort(); }
public static void DestroyInstance() { groupfile = null; }
public static int ParseBuildData(KBatchGroupData data, KAnimHashedString fileNameHash, FastReader reader, List <Texture2D> textures) { CheckHeader("BILD", reader); int num = reader.ReadInt32(); if (num != 10 && num != 9) { Debug.LogError(fileNameHash + " has invalid build.bytes version [" + num + "]"); return(-1); } KAnimGroupFile.Group group = KAnimGroupFile.GetGroup(data.groupID); if (group == null) { Debug.LogErrorFormat("[{1}] Failed to get group [{0}]", data.groupID, fileNameHash.DebuggerDisplay); } KAnim.Build build = null; int num2 = reader.ReadInt32(); int num3 = reader.ReadInt32(); build = data.AddNewBuildFile(fileNameHash); build.textureCount = textures.Count; if (textures.Count > 0) { data.AddTextures(textures); } build.symbols = new KAnim.Build.Symbol[num2]; build.frames = new KAnim.Build.SymbolFrame[num3]; build.name = reader.ReadKleiString(); build.batchTag = ((!group.swapTarget.IsValid) ? data.groupID : group.target); build.fileHash = fileNameHash; int num4 = 0; for (int i = 0; i < build.symbols.Length; i++) { KAnimHashedString hash = new KAnimHashedString(reader.ReadInt32()); KAnim.Build.Symbol symbol = new KAnim.Build.Symbol(); symbol.build = build; symbol.hash = hash; if (num > 9) { symbol.path = new KAnimHashedString(reader.ReadInt32()); } symbol.colourChannel = new KAnimHashedString(reader.ReadInt32()); symbol.flags = reader.ReadInt32(); symbol.firstFrameIdx = data.symbolFrameInstances.Count; symbol.numFrames = reader.ReadInt32(); symbol.symbolIndexInSourceBuild = i; int num5 = 0; for (int j = 0; j < symbol.numFrames; j++) { KAnim.Build.SymbolFrame symbolFrame = new KAnim.Build.SymbolFrame(); KAnim.Build.SymbolFrameInstance item = default(KAnim.Build.SymbolFrameInstance); item.symbolFrame = symbolFrame; symbolFrame.fileNameHash = fileNameHash; symbolFrame.sourceFrameNum = reader.ReadInt32(); symbolFrame.duration = reader.ReadInt32(); item.buildImageIdx = data.textureStartIndex[fileNameHash] + reader.ReadInt32(); if (item.buildImageIdx >= textures.Count + data.textureStartIndex[fileNameHash]) { Debug.LogErrorFormat("{0} Symbol: [{1}] tex count: [{2}] buildImageIdx: [{3}] group total [{4}]", fileNameHash.ToString(), symbol.hash, textures.Count, item.buildImageIdx, data.textureStartIndex[fileNameHash]); } item.symbolIdx = data.GetSymbolCount(); num5 = Math.Max(symbolFrame.sourceFrameNum + symbolFrame.duration, num5); float num6 = reader.ReadSingle(); float num7 = reader.ReadSingle(); float num8 = reader.ReadSingle(); float num9 = reader.ReadSingle(); symbolFrame.bboxMin = new Vector2(num6 - num8 * 0.5f, num7 - num9 * 0.5f); symbolFrame.bboxMax = new Vector2(num6 + num8 * 0.5f, num7 + num9 * 0.5f); float x = reader.ReadSingle(); float num10 = reader.ReadSingle(); float x2 = reader.ReadSingle(); float num11 = reader.ReadSingle(); symbolFrame.uvMin = new Vector2(x, 1f - num10); symbolFrame.uvMax = new Vector2(x2, 1f - num11); build.frames[num4] = symbolFrame; data.symbolFrameInstances.Add(item); num4++; } symbol.numLookupFrames = num5; data.AddBuildSymbol(symbol); build.symbols[i] = symbol; } ParseHashTable(reader); return(build.index); }