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 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(); } }
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 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); }