public void AddAnims(KAnimFile anim_file) { KAnimFileData data = anim_file.GetData(); if (data == null) { Debug.LogError("AddAnims() Null animfile data"); } else { maxSymbols = Mathf.Max(maxSymbols, data.maxVisSymbolFrames); for (int i = 0; i < data.animCount; i++) { KAnim.Anim anim = data.GetAnim(i); if (anim.animFile.hashName != data.hashName) { Debug.LogErrorFormat("How did we get an anim from another file? [{0}] != [{1}] for anim [{2}]", data.name, anim.animFile.name, i); } anims[anim.hash] = new AnimLookupData { animIndex = anim.index }; } if (usingNewSymbolOverrideSystem && data.buildIndex != -1 && data.build.symbols != null && data.build.symbols.Length > 0) { SymbolOverrideController component = GetComponent <SymbolOverrideController>(); component.AddBuildOverride(anim_file.GetData(), -1); } } }
private void ApplyShape(KAnim.Build.Symbol variation_symbol, KBatchedAnimController controller, KAnimFile shapes_file, HashedString symbol_name_in_shape_file, bool should_use_sideways_symbol) { HashedString hashedString = HASH_NEUTRAL; if (currentExpression != null) { hashedString = currentExpression.face.hash; } KAnim.Anim anim = null; KAnim.Anim.FrameElement frameElement = default(KAnim.Anim.FrameElement); bool flag = false; bool flag2 = false; for (int i = 0; i < shapes_file.GetData().animCount; i++) { if (flag) { break; } KAnim.Anim anim2 = shapes_file.GetData().GetAnim(i); if (anim2.hash == hashedString) { anim = anim2; KAnim.Anim.Frame frame = anim.GetFrame(shapes_file.GetData().build.batchTag, 0); for (int j = 0; j < frame.numElements; j++) { KBatchGroupData batchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(shapes_file.GetData().animBatchTag); frameElement = batchGroupData.GetFrameElement(frame.firstElementIdx + j); if (!(frameElement.symbol != symbol_name_in_shape_file)) { if (flag2 || !should_use_sideways_symbol) { flag = true; } flag2 = true; break; } } } } if (anim == null) { DebugUtil.Assert(false, "Could not find shape for expression: " + HashCache.Get().Get(hashedString)); } if (!flag2) { DebugUtil.Assert(false, "Could not find shape element for shape:" + HashCache.Get().Get(variation_symbol.hash)); } KAnim.Build.Symbol symbol = KAnimBatchManager.Instance().GetBatchGroupData(controller.batchGroupID).GetSymbol(symbol_name_in_shape_file); KBatchGroupData batchGroupData2 = KAnimBatchManager.Instance().GetBatchGroupData(variation_symbol.build.batchTag); KAnim.Build.SymbolFrameInstance symbol_frame_instance = batchGroupData2.symbolFrameInstances[variation_symbol.firstFrameIdx + frameElement.frame]; symbol_frame_instance.buildImageIdx = GetComponent <SymbolOverrideController>().GetAtlasIdx(variation_symbol.build.GetTexture(0)); controller.SetSymbolOverride(symbol.firstFrameIdx, symbol_frame_instance); }
private static KAnim.Build.Symbol GetSymbol(KAnimFile anim_file, string symbol_name) { KAnim.Build.Symbol result = anim_file.GetData().build.symbols[0]; KAnimHashedString y = new KAnimHashedString(symbol_name); KAnim.Build.Symbol[] symbols = anim_file.GetData().build.symbols; foreach (KAnim.Build.Symbol symbol in symbols) { if (symbol.hash == y) { result = symbol; break; } } return(result); }
protected override void OnSpawn() { GetComponent <Storage>().SetOffsets(DELIVERY_OFFSETS); Storage component = GetComponent <Storage>(); Storage storage = component; storage.OnWorkableEventCB = (Action <Workable.WorkableEvent>)Delegate.Combine(storage.OnWorkableEventCB, new Action <Workable.WorkableEvent>(OnWorkEvent)); KAnimFile anim = Assets.GetAnim("anim_bury_dupe_kanim"); int num = 0; while (true) { KAnim.Anim anim2 = anim.GetData().GetAnim(num); if (anim2 == null) { break; } if (anim2.name == "working_pre") { float workTime = (float)(anim2.numFrames - 3) / anim2.frameRate; component.SetWorkTime(workTime); break; } num++; } base.OnSpawn(); base.smi.StartSM(); Components.Graves.Add(this); }
public void AddAnimOverrides(KAnimFile kanim_file, float priority = 0f) { Debug.Assert((UnityEngine.Object)kanim_file != (UnityEngine.Object)null); if (kanim_file.GetData().build != null && kanim_file.GetData().build.symbols.Length > 0) { SymbolOverrideController component = GetComponent <SymbolOverrideController>(); DebugUtil.Assert((UnityEngine.Object)component != (UnityEngine.Object)null, "Anim overrides containing additional symbols require a symbol override controller."); component.AddBuildOverride(kanim_file.GetData(), 0); } overrideAnimFiles.Add(new OverrideAnimFileData { priority = priority, file = kanim_file }); overrideAnimFiles.Sort((OverrideAnimFileData a, OverrideAnimFileData b) => b.priority.CompareTo(a.priority)); RebuildOverrides(kanim_file); }
public void RemoveAnimOverrides(KAnimFile kanim_file) { Debug.Assert((UnityEngine.Object)kanim_file != (UnityEngine.Object)null); if (kanim_file.GetData().build != null && kanim_file.GetData().build.symbols.Length > 0) { SymbolOverrideController component = GetComponent <SymbolOverrideController>(); DebugUtil.Assert((UnityEngine.Object)component != (UnityEngine.Object)null, "Anim overrides containing additional symbols require a symbol override controller."); component.TryRemoveBuildOverride(kanim_file.GetData(), 0); } for (int i = 0; i < overrideAnimFiles.Count; i++) { OverrideAnimFileData overrideAnimFileData = overrideAnimFiles[i]; if ((UnityEngine.Object)overrideAnimFileData.file == (UnityEngine.Object)kanim_file) { overrideAnimFiles.RemoveAt(i); break; } } RebuildOverrides(kanim_file); }
public AddModResult AddAnimMod(GroupFile gf, AnimCommandFile akf, KAnimFile file) { Debug.Assert(gf != null); Debug.Assert((UnityEngine.Object)file != (UnityEngine.Object)null, gf.groupID); Debug.Assert(akf != null, gf.groupID); int index = AddGroup(akf, gf, file); string name = file.GetData().name; int num = groups[index].files.FindIndex((KAnimFile candidate) => (UnityEngine.Object)candidate != (UnityEngine.Object)null && candidate.GetData().name == name); if (num == -1) { groups[index].files.Add(file); return(AddModResult.Added); } groups[index].files[num].mod = file.mod; return(AddModResult.Replaced); }
// получаем длительность анимации в аним файле. или общую длительность нескольких анимаций public static float GetAnimDuration(KAnimFile kAnimFile, params string[] anims) { if (kAnimFile == null) { throw new ArgumentNullException(nameof(kAnimFile)); } if (anims == null) { throw new ArgumentNullException(nameof(anims)); } var kanim_data = kAnimFile.GetData(); float duration = 0; for (int i = 0; i < kanim_data.animCount; i++) { var anim = kanim_data.GetAnim(i); if (anims.Contains(anim.name)) { duration += anim.numFrames / anim.frameRate; } } return(duration); }
public void AddAccessories(KAnimFile default_build, ResourceSet parent) { KAnim.Build build = file.GetData().build; KAnim.Build.Symbol symbol = default_build.GetData().build.GetSymbol(targetSymbolId); string text = Id.ToLower(); if (symbol != null) { string id = text + "_DEFAULT"; Accessory accessory = new Accessory(id, parent, this, default_build.batchTag, symbol); accessories.Add(accessory); HashCache.Get().Add(accessory.IdHash.HashValue, accessory.Id); } for (int i = 0; i < build.symbols.Length; i++) { string text2 = HashCache.Get().Get(build.symbols[i].hash); if (text2.StartsWith(text)) { Accessory accessory2 = new Accessory(text2, parent, this, file.batchTag, build.symbols[i]); accessories.Add(accessory2); HashCache.Get().Add(accessory2.IdHash.HashValue, accessory2.Id); } } }
public static Sprite GetUISpriteFromMultiObjectAnim(KAnimFile animFile, string animName = "ui", bool centered = false, string symbolName = "") { Tuple <KAnimFile, string, bool> key = new Tuple <KAnimFile, string, bool>(animFile, animName, centered); if (knownUISprites.ContainsKey(key)) { return(knownUISprites[key]); } if ((UnityEngine.Object)animFile == (UnityEngine.Object)null) { DebugUtil.LogWarningArgs(animName, "missing Anim File"); return(null); } KAnimFileData data = animFile.GetData(); if (data == null) { DebugUtil.LogWarningArgs(animName, "KAnimFileData is null"); return(null); } if (data.build == null) { return(null); } KAnim.Anim.Frame frame = KAnim.Anim.Frame.InvalidFrame; for (int i = 0; i < data.animCount; i++) { KAnim.Anim anim = data.GetAnim(i); if (anim.name == animName) { frame = anim.GetFrame(data.batchTag, 0); } } if (!frame.IsValid()) { DebugUtil.LogWarningArgs($"missing '{animName}' anim in '{animFile}'"); return(null); } if (data.elementCount == 0) { return(null); } KAnim.Anim.FrameElement frameElement = default(KAnim.Anim.FrameElement); if (string.IsNullOrEmpty(symbolName)) { symbolName = animName; } frameElement = data.FindAnimFrameElement(symbolName); KAnim.Build.Symbol symbol = data.build.GetSymbol(frameElement.symbol); if (symbol == null) { DebugUtil.LogWarningArgs(animFile.name, animName, "placeSymbol [", frameElement.symbol, "] is missing"); return(null); } int frame2 = frameElement.frame; KAnim.Build.SymbolFrameInstance frame3 = symbol.GetFrame(frame2); KAnim.Build.SymbolFrame symbolFrame = frame3.symbolFrame; if (symbolFrame == null) { DebugUtil.LogWarningArgs(animName, "SymbolFrame [", frameElement.frame, "] is missing"); return(null); } Texture2D texture = data.build.GetTexture(0); float x = symbolFrame.uvMin.x; float x2 = symbolFrame.uvMax.x; float y = symbolFrame.uvMax.y; float y2 = symbolFrame.uvMin.y; int num = (int)((float)texture.width * Mathf.Abs(x2 - x)); int num2 = (int)((float)texture.height * Mathf.Abs(y2 - y)); float num3 = Mathf.Abs(symbolFrame.bboxMax.x - symbolFrame.bboxMin.x); Rect rect = default(Rect); rect.width = (float)num; rect.height = (float)num2; rect.x = (float)(int)((float)texture.width * x); rect.y = (float)(int)((float)texture.height * y); float pixelsPerUnit = 100f; if (num != 0) { pixelsPerUnit = 100f / (num3 / (float)num); } Sprite sprite = Sprite.Create(texture, rect, (!centered) ? Vector2.zero : new Vector2(0.5f, 0.5f), pixelsPerUnit, 0u, SpriteMeshType.FullRect); sprite.name = $"{texture.name}:{animName}:{frameElement.frame.ToString()}:{centered}"; knownUISprites[key] = sprite; return(sprite); }
public void LoadAll() { Debug.Assert(!hasCompletedLoadAll, "You cannot load all the anim data twice!"); fileData.Clear(); for (int i = 0; i < groups.Count; i++) { if (!groups[i].id.IsValid) { Debug.LogErrorFormat("Group invalid groupIndex [{0}]", i); } KBatchGroupData kBatchGroupData = null; kBatchGroupData = ((!groups[i].target.IsValid) ? KAnimBatchManager.Instance().GetBatchGroupData(groups[i].id) : KAnimBatchManager.Instance().GetBatchGroupData(groups[i].target)); HashedString batchTag = groups[i].id; if (groups[i].renderType == KAnimBatchGroup.RendererType.AnimOnly) { if (!groups[i].swapTarget.IsValid) { continue; } kBatchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(groups[i].swapTarget); batchTag = groups[i].swapTarget; } for (int j = 0; j < groups[i].files.Count; j++) { KAnimFile kAnimFile = groups[i].files[j]; if ((UnityEngine.Object)kAnimFile != (UnityEngine.Object)null && kAnimFile.buildBytes != null && !fileData.ContainsKey(kAnimFile.GetInstanceID())) { if (kAnimFile.buildBytes.Length == 0) { Debug.LogWarning("Build File [" + kAnimFile.GetData().name + "] has 0 bytes"); } else { HashedString hash = new HashedString(kAnimFile.name); HashCache.Get().Add(hash.HashValue, kAnimFile.name); KAnimFileData file = KGlobalAnimParser.Get().GetFile(kAnimFile); file.maxVisSymbolFrames = 0; file.batchTag = batchTag; file.buildIndex = KGlobalAnimParser.ParseBuildData(kBatchGroupData, hash, new FastReader(kAnimFile.buildBytes), kAnimFile.textureList); fileData.Add(kAnimFile.GetInstanceID(), file); } } } } for (int k = 0; k < groups.Count; k++) { if (groups[k].renderType == KAnimBatchGroup.RendererType.AnimOnly) { KBatchGroupData batchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(groups[k].swapTarget); KBatchGroupData batchGroupData2 = KAnimBatchManager.Instance().GetBatchGroupData(groups[k].animTarget); for (int l = 0; l < batchGroupData.builds.Count; l++) { KAnim.Build build = batchGroupData.builds[l]; if (build != null && build.symbols != null) { for (int m = 0; m < build.symbols.Length; m++) { KAnim.Build.Symbol symbol = build.symbols[m]; if (symbol != null && symbol.hash.IsValid() && batchGroupData2.GetFirstIndex(symbol.hash) == -1) { KAnim.Build.Symbol symbol2 = new KAnim.Build.Symbol(); symbol2.build = build; symbol2.hash = symbol.hash; symbol2.path = symbol.path; symbol2.colourChannel = symbol.colourChannel; symbol2.flags = symbol.flags; symbol2.firstFrameIdx = batchGroupData2.symbolFrameInstances.Count; symbol2.numFrames = symbol.numFrames; symbol2.symbolIndexInSourceBuild = batchGroupData2.frameElementSymbols.Count; for (int n = 0; n < symbol2.numFrames; n++) { KAnim.Build.SymbolFrameInstance symbolFrameInstance = batchGroupData.GetSymbolFrameInstance(n + symbol.firstFrameIdx); KAnim.Build.SymbolFrameInstance item = default(KAnim.Build.SymbolFrameInstance); item.symbolFrame = symbolFrameInstance.symbolFrame; item.buildImageIdx = -1; item.symbolIdx = batchGroupData2.GetSymbolCount(); batchGroupData2.symbolFrameInstances.Add(item); } batchGroupData2.AddBuildSymbol(symbol2); } } } } } } for (int num = 0; num < groups.Count; num++) { if (!groups[num].id.IsValid) { Debug.LogErrorFormat("Group invalid groupIndex [{0}]", num); } if (groups[num].renderType != KAnimBatchGroup.RendererType.DontRender) { KBatchGroupData kBatchGroupData2 = null; if (groups[num].animTarget.IsValid) { kBatchGroupData2 = KAnimBatchManager.Instance().GetBatchGroupData(groups[num].animTarget); if (kBatchGroupData2 == null) { Debug.LogErrorFormat("Anim group is null for [{0}] -> [{1}]", groups[num].id, groups[num].animTarget); } } else { kBatchGroupData2 = KAnimBatchManager.Instance().GetBatchGroupData(groups[num].id); if (kBatchGroupData2 == null) { Debug.LogErrorFormat("Anim group is null for [{0}]", groups[num].id); } } for (int num2 = 0; num2 < groups[num].files.Count; num2++) { KAnimFile kAnimFile2 = groups[num].files[num2]; if ((UnityEngine.Object)kAnimFile2 != (UnityEngine.Object)null && kAnimFile2.animBytes != null) { if (kAnimFile2.animBytes.Length == 0) { Debug.LogWarning("Anim File [" + kAnimFile2.GetData().name + "] has 0 bytes"); } else { if (!fileData.ContainsKey(kAnimFile2.GetInstanceID())) { KAnimFileData file2 = KGlobalAnimParser.Get().GetFile(kAnimFile2); file2.maxVisSymbolFrames = 0; file2.batchTag = groups[num].id; fileData.Add(kAnimFile2.GetInstanceID(), file2); } HashedString fileNameHash = new HashedString(kAnimFile2.name); FastReader reader = new FastReader(kAnimFile2.animBytes); KAnimFileData animFile = fileData[kAnimFile2.GetInstanceID()]; KGlobalAnimParser.ParseAnimData(kBatchGroupData2, fileNameHash, reader, animFile); } } } } } for (int num3 = 0; num3 < groups.Count; num3++) { if (!groups[num3].id.IsValid) { Debug.LogErrorFormat("Group invalid groupIndex [{0}]", num3); } KBatchGroupData kBatchGroupData3 = null; if (groups[num3].target.IsValid) { kBatchGroupData3 = KAnimBatchManager.Instance().GetBatchGroupData(groups[num3].target); if (kBatchGroupData3 == null) { Debug.LogErrorFormat("Group is null for [{0}] target [{1}]", groups[num3].id, groups[num3].target); } } else { kBatchGroupData3 = KAnimBatchManager.Instance().GetBatchGroupData(groups[num3].id); if (kBatchGroupData3 == null) { Debug.LogErrorFormat("Group is null for [{0}]", groups[num3].id); } } KGlobalAnimParser.PostParse(kBatchGroupData3); } hasCompletedLoadAll = true; }
private void ShowHelmet() { KBatchedAnimController assigneeController = GetAssigneeController(); if (!((Object)assigneeController == (Object)null)) { KAnimHashedString kAnimHashedString = new KAnimHashedString("snapTo_neck"); if (!string.IsNullOrEmpty(anim_file)) { KAnimFile anim = Assets.GetAnim(anim_file); assigneeController.GetComponent <SymbolOverrideController>().AddSymbolOverride(kAnimHashedString, anim.GetData().build.GetSymbol(kAnimHashedString), 6); } assigneeController.SetSymbolVisiblity(kAnimHashedString, true); is_shown = true; UpdateJets(); } }