public void TestPersistence() { var cache = new HashCache(); cache.Put("test_key", "test_value"); Assert.AreEqual(cache.Get("test_key"), "test_value"); }
public void Refresh() { List <ToggleInfo> list = new List <ToggleInfo>(); if (tagCategoryMap == null) { int building_index = 0; tagCategoryMap = new Dictionary <Tag, HashedString>(); tagOrderMap = new Dictionary <Tag, int>(); if (TUNING.BUILDINGS.PLANORDER.Count > 12) { DebugUtil.LogWarningArgs("Insufficient keys to cover root plan menu", "Max of 12 keys supported but TUNING.BUILDINGS.PLANORDER has " + TUNING.BUILDINGS.PLANORDER.Count); } toggleEntries.Clear(); for (int i = 0; i < TUNING.BUILDINGS.PLANORDER.Count; i++) { PlanInfo planInfo = TUNING.BUILDINGS.PLANORDER[i]; Action hotkey = (Action)((i >= 12) ? 247 : (36 + i)); string icon = iconNameMap[planInfo.category]; string str = HashCache.Get().Get(planInfo.category).ToUpper(); ToggleInfo toggleInfo = new ToggleInfo(UI.StripLinkFormatting(Strings.Get("STRINGS.UI.BUILDCATEGORIES." + str + ".NAME")), icon, planInfo.category, hotkey, Strings.Get("STRINGS.UI.BUILDCATEGORIES." + str + ".TOOLTIP"), string.Empty); list.Add(toggleInfo); PopulateOrderInfo(planInfo.category, planInfo.data, tagCategoryMap, tagOrderMap, ref building_index); List <BuildingDef> list2 = new List <BuildingDef>(); foreach (BuildingDef buildingDef in Assets.BuildingDefs) { HashedString value; if (!buildingDef.Deprecated && tagCategoryMap.TryGetValue(buildingDef.Tag, out value) && !(value != planInfo.category)) { list2.Add(buildingDef); } } toggleEntries.Add(new ToggleEntry(toggleInfo, planInfo.category, list2, planInfo.hideIfNotResearched)); } Setup(list); toggles.ForEach(delegate(KToggle to) { ImageToggleState[] components = to.GetComponents <ImageToggleState>(); ImageToggleState[] array = components; foreach (ImageToggleState imageToggleState in array) { if ((UnityEngine.Object)imageToggleState.TargetImage.sprite != (UnityEngine.Object)null && imageToggleState.TargetImage.name == "FG" && !imageToggleState.useSprites) { imageToggleState.SetSprites(Assets.GetSprite(imageToggleState.TargetImage.sprite.name + "_disabled"), imageToggleState.TargetImage.sprite, imageToggleState.TargetImage.sprite, Assets.GetSprite(imageToggleState.TargetImage.sprite.name + "_disabled")); } } to.GetComponent <KToggle>().soundPlayer.Enabled = false; }); for (int j = 0; j < toggleEntries.Count; j++) { ToggleEntry value2 = toggleEntries[j]; value2.CollectToggleImages(); toggleEntries[j] = value2; } } }
public void WriteAnimData(int start_index, float[] data) { List <KAnim.Anim.Frame> animFrames = GetAnimFrames(); List <KAnim.Anim.FrameElement> animFrameElements = GetAnimFrameElements(); int num = 1 + ((animFrames.Count != 0) ? animFrames.Count : symbolFrameInstances.Count); if (animFrames.Count == 0 && symbolFrameInstances.Count == 0 && animFrameElements.Count == 0) { Debug.LogError("Eh, no data " + animFrames.Count + " " + symbolFrameInstances.Count + " " + animFrameElements.Count); } data[start_index++] = (float)num; data[start_index++] = (float)animFrames.Count; data[start_index++] = (float)animFrameElements.Count; data[start_index++] = (float)symbolFrameInstances.Count; if (animFrames.Count == 0) { for (int i = 0; i < symbolFrameInstances.Count; i++) { WriteAnimFrame(data, start_index, i, i, 1, i); start_index += 4; } for (int j = 0; j < symbolFrameInstances.Count; j++) { WriteAnimFrameElement(data, start_index, j, j, Matrix2x3.identity, Color.white, 0); start_index += 16; } } else { for (int k = 0; k < animFrames.Count; k++) { Write(data, start_index, k, animFrames[k]); start_index += 4; } for (int l = 0; l < animFrameElements.Count; l++) { KAnim.Anim.FrameElement element = animFrameElements[l]; if (element.symbol == KGlobalAnimParser.MISSING_SYMBOL) { WriteAnimFrameElement(data, start_index, -1, l, Matrix2x3.identity, Color.white, 0); } else { KAnim.Build.Symbol buildSymbol = GetBuildSymbol(element.symbolIdx); if (buildSymbol == null) { Debug.LogError("Missing symbol for Anim Frame Element: [" + HashCache.Get().Get(element.symbol) + ": " + element.symbol + "]"); } int frameIdx = buildSymbol.GetFrameIdx(element.frame); Write(data, start_index, frameIdx, l, element); } start_index += 16; } } }
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 void ParseHashTable(FastReader reader) { int num = reader.ReadInt32(); for (int i = 0; i < num; i++) { int hash = reader.ReadInt32(); string text = reader.ReadKleiString(); HashCache.Get().Add(hash, text); } }
public static KCompBuilder.BodyData CreateBodyData(Personality p) { KCompBuilder.BodyData result = default(KCompBuilder.BodyData); result.eyes = HashCache.Get().Add($"eyes_{p.eyes:000}"); result.hair = HashCache.Get().Add($"hair_{p.hair:000}"); result.headShape = HashCache.Get().Add($"headshape_{p.headShape:000}"); result.mouth = HashCache.Get().Add($"mouth_{p.mouth:000}"); result.neck = HashCache.Get().Add($"neck_{p.neck:000}"); result.arms = HashCache.Get().Add($"arm_{p.body:000}"); result.body = HashCache.Get().Add($"body_{p.body:000}"); result.hat = HashedString.Invalid; return(result); }
public override void BeginTransition(Navigator navigator, Navigator.ActiveTransition transition) { base.BeginTransition(navigator, transition); CreatureCalorieMonitor.Instance sMI = navigator.GetSMI <CreatureCalorieMonitor.Instance>(); if (sMI != null && sMI.stomach.IsReadyToPoop()) { KBatchedAnimController component = navigator.GetComponent <KBatchedAnimController>(); string s = HashCache.Get().Get(transition.anim.HashValue) + "_full"; if (component.HasAnimation(s)) { transition.anim = s; } } }
public void Configure(HashedString category, int depth, object data, Dictionary <HashedString, List <BuildingDef> > categorized_building_map, Dictionary <HashedString, List <HashedString> > categorized_category_map, BuildMenuBuildingsScreen buildings_screen) { this.category = category; categorizedBuildingMap = categorized_building_map; categorizedCategoryMap = categorized_category_map; buildingsScreen = buildings_screen; List <ToggleInfo> list = new List <ToggleInfo>(); if (typeof(IList <BuildMenu.BuildingInfo>).IsAssignableFrom(data.GetType())) { buildingInfos = (IList <BuildMenu.BuildingInfo>)data; } else if (typeof(IList <BuildMenu.DisplayInfo>).IsAssignableFrom(data.GetType())) { subcategories = new List <HashedString>(); IList <BuildMenu.DisplayInfo> list2 = (IList <BuildMenu.DisplayInfo>)data; foreach (BuildMenu.DisplayInfo item2 in list2) { BuildMenu.DisplayInfo current = item2; string iconName = current.iconName; string text = HashCache.Get().Get(current.category).ToUpper(); text = text.Replace(" ", string.Empty); ToggleInfo item = new ToggleInfo(Strings.Get("STRINGS.UI.NEWBUILDCATEGORIES." + text + ".NAME"), iconName, new UserData { category = current.category, depth = depth, requirementsState = PlanScreen.RequirementsState.Tech }, current.hotkey, Strings.Get("STRINGS.UI.NEWBUILDCATEGORIES." + text + ".TOOLTIP"), string.Empty); list.Add(item); subcategories.Add(current.category); } Setup(list); toggles.ForEach(delegate(KToggle to) { ImageToggleState[] components = to.GetComponents <ImageToggleState>(); ImageToggleState[] array = components; foreach (ImageToggleState imageToggleState in array) { if ((UnityEngine.Object)imageToggleState.TargetImage.sprite != (UnityEngine.Object)null && imageToggleState.TargetImage.name == "FG" && !imageToggleState.useSprites) { imageToggleState.SetSprites(Assets.GetSprite(imageToggleState.TargetImage.sprite.name + "_disabled"), imageToggleState.TargetImage.sprite, imageToggleState.TargetImage.sprite, Assets.GetSprite(imageToggleState.TargetImage.sprite.name + "_disabled")); } } to.GetComponent <KToggle>().soundPlayer.Enabled = false; }); } UpdateBuildableStates(true); }
public void CopyBuildingOrder(Building building) { foreach (PlanInfo item in TUNING.BUILDINGS.PLANORDER) { PlanInfo current = item; foreach (string item2 in (List <string>)current.data) { if (building.Def.PrefabID == item2) { OpenCategoryByName(HashCache.Get().Get(current.category)); OnSelectBuilding(ActiveToggles[building.Def].gameObject, building.Def); productInfoScreen.materialSelectionPanel.SelectSourcesMaterials(building); break; } } } }
private static void AddBindings(HashedString parent_category, BuildMenu.DisplayInfo display_info, List <BindingEntry> bindings) { if (display_info.data != null) { Type type = display_info.data.GetType(); if (typeof(IList <BuildMenu.DisplayInfo>).IsAssignableFrom(type)) { IList <BuildMenu.DisplayInfo> list = (IList <BuildMenu.DisplayInfo>)display_info.data; foreach (BuildMenu.DisplayInfo item2 in list) { AddBindings(display_info.category, item2, bindings); } } else if (typeof(IList <BuildMenu.BuildingInfo>).IsAssignableFrom(type)) { string str = HashCache.Get().Get(parent_category); TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; string group = textInfo.ToTitleCase(str) + " Menu"; BindingEntry item = new BindingEntry(group, GamepadButton.NumButtons, display_info.keyCode, Modifier.None, display_info.hotkey, true, true); bindings.Add(item); } } }
/// <summary> /// Warms up the game hash cache. This is run every load for some reason... /// </summary> private static void LoadGameHashes() { foreach (object gh in Enum.GetValues(typeof(GameHashes))) { if (gh is GameHashes hash) { HashCache.Get().Add((int)hash, hash.ToString()); } } foreach (object uh in Enum.GetValues(typeof(UtilHashes))) { if (uh is UtilHashes hash) { HashCache.Get().Add((int)hash, hash.ToString()); } } foreach (object ih in Enum.GetValues(typeof(UIHashes))) { if (ih is UIHashes hash) { HashCache.Get().Add((int)hash, hash.ToString()); } } }
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 void PostParse(KBatchGroupData data) { for (int i = 0; i < data.GetSymbolCount(); i++) { KAnim.Build.Symbol symbol = data.GetSymbol(i); if (symbol == null) { Debug.LogWarning("Symbol null for [" + data.groupID + "] idx: [" + i + "]"); } else { if (symbol.numLookupFrames <= 0) { int num = symbol.numFrames; for (int j = symbol.firstFrameIdx; j < symbol.firstFrameIdx + symbol.numFrames; j++) { KAnim.Build.SymbolFrameInstance symbolFrameInstance = data.GetSymbolFrameInstance(j); num = Mathf.Max(num, symbolFrameInstance.symbolFrame.sourceFrameNum + symbolFrameInstance.symbolFrame.duration); } symbol.numLookupFrames = num; } symbol.frameLookup = new int[symbol.numLookupFrames]; if (symbol.numLookupFrames <= 0) { Debug.LogWarning("No lookup frames for [" + data.groupID + "] build: [" + symbol.build.name + "] idx: [" + i + "] id: [" + symbol.hash + "]"); } else { for (int k = 0; k < symbol.numLookupFrames; k++) { symbol.frameLookup[k] = -1; } for (int l = symbol.firstFrameIdx; l < symbol.firstFrameIdx + symbol.numFrames; l++) { KAnim.Build.SymbolFrameInstance symbolFrameInstance2 = data.GetSymbolFrameInstance(l); if (symbolFrameInstance2.symbolFrame == null) { Debug.LogWarning("No symbol frame [" + data.groupID + "] symFrameIdx: [" + l + "] id: [" + symbol.hash + "]"); } else { for (int m = symbolFrameInstance2.symbolFrame.sourceFrameNum; m < symbolFrameInstance2.symbolFrame.sourceFrameNum + symbolFrameInstance2.symbolFrame.duration; m++) { if (m >= symbol.frameLookup.Length) { Debug.LogWarning("Too many lookup frames [" + m + ">=" + symbol.frameLookup.Length + "] for [" + data.groupID + "] idx: [" + i + "] id: [" + symbol.hash + "]"); } else { symbol.frameLookup[m] = l; } } } } string text = HashCache.Get().Get(symbol.path); if (!string.IsNullOrEmpty(text)) { int num2 = text.IndexOf("/"); if (num2 != -1) { string text2 = text.Substring(0, num2); symbol.folder = new KAnimHashedString(text2); HashCache.Get().Add(symbol.folder.HashValue, text2); } } } } } }
public static void SetPortraitData(IAssignableIdentity identityObject, KBatchedAnimController controller, bool useDefaultExpression = true) { if (identityObject == null) { controller.gameObject.SetActive(false); } else { MinionIdentity minionIdentity = identityObject as MinionIdentity; if ((UnityEngine.Object)minionIdentity == (UnityEngine.Object)null) { MinionAssignablesProxy minionAssignablesProxy = identityObject as MinionAssignablesProxy; if ((UnityEngine.Object)minionAssignablesProxy != (UnityEngine.Object)null && minionAssignablesProxy.target != null) { minionIdentity = (minionAssignablesProxy.target as MinionIdentity); } } controller.gameObject.SetActive(true); controller.Play("ui_idle", KAnim.PlayMode.Once, 1f, 0f); SymbolOverrideController component = controller.GetComponent <SymbolOverrideController>(); component.RemoveAllSymbolOverrides(0); if ((UnityEngine.Object)minionIdentity != (UnityEngine.Object)null) { Accessorizer component2 = minionIdentity.GetComponent <Accessorizer>(); foreach (AccessorySlot resource in Db.Get().AccessorySlots.resources) { Accessory accessory = component2.GetAccessory(resource); if (accessory != null) { component.AddSymbolOverride(resource.targetSymbolId, accessory.symbol, 0); controller.SetSymbolVisiblity(resource.targetSymbolId, true); } } component.AddSymbolOverride(Db.Get().AccessorySlots.HatHair.targetSymbolId, Db.Get().AccessorySlots.HatHair.Lookup("hat_" + HashCache.Get().Get(component2.GetAccessory(Db.Get().AccessorySlots.Hair).symbol.hash)).symbol, 1); RefreshHat(minionIdentity, controller); } else { StoredMinionIdentity storedMinionIdentity = identityObject as StoredMinionIdentity; if ((UnityEngine.Object)storedMinionIdentity == (UnityEngine.Object)null) { MinionAssignablesProxy minionAssignablesProxy2 = identityObject as MinionAssignablesProxy; if ((UnityEngine.Object)minionAssignablesProxy2 != (UnityEngine.Object)null && minionAssignablesProxy2.target != null) { storedMinionIdentity = (minionAssignablesProxy2.target as StoredMinionIdentity); } } if (!((UnityEngine.Object)storedMinionIdentity != (UnityEngine.Object)null)) { controller.gameObject.SetActive(false); return; } foreach (AccessorySlot resource2 in Db.Get().AccessorySlots.resources) { Accessory accessory2 = storedMinionIdentity.GetAccessory(resource2); if (accessory2 != null) { component.AddSymbolOverride(resource2.targetSymbolId, accessory2.symbol, 0); controller.SetSymbolVisiblity(resource2.targetSymbolId, true); } } component.AddSymbolOverride(Db.Get().AccessorySlots.HatHair.targetSymbolId, Db.Get().AccessorySlots.HatHair.Lookup("hat_" + HashCache.Get().Get(storedMinionIdentity.GetAccessory(Db.Get().AccessorySlots.Hair).symbol.hash)).symbol, 1); RefreshHat(storedMinionIdentity, controller); } float animScale = 1f; if ((UnityEngine.Object)GameScreenManager.Instance != (UnityEngine.Object)null && (UnityEngine.Object)GameScreenManager.Instance.ssOverlayCanvas != (UnityEngine.Object)null) { animScale = 0.2f * (1f / GameScreenManager.Instance.ssOverlayCanvas.GetComponent <KCanvasScaler>().GetUserScale()); } controller.animScale = animScale; string s = "ui"; controller.Play(s, KAnim.PlayMode.Loop, 1f, 0f); controller.SetSymbolVisiblity("snapTo_neck", false); controller.SetSymbolVisiblity("snapTo_goggles", false); } }
public void Configure(HashedString category, IList <BuildMenu.BuildingInfo> building_infos) { ClearButtons(); SetHasFocus(true); List <ToggleInfo> list = new List <ToggleInfo>(); string text = HashCache.Get().Get(category).ToUpper(); text = text.Replace(" ", string.Empty); titleLabel.text = Strings.Get("STRINGS.UI.NEWBUILDCATEGORIES." + text + ".BUILDMENUTITLE"); foreach (BuildMenu.BuildingInfo building_info in building_infos) { BuildMenu.BuildingInfo current = building_info; BuildingDef def = Assets.GetBuildingDef(current.id); if (def.ShowInBuildMenu && !def.Deprecated) { ToggleInfo item = new ToggleInfo(def.Name, new UserData(def, PlanScreen.RequirementsState.Tech), def.HotKey, () => def.GetUISprite("ui", false)); list.Add(item); } } Setup(list); for (int i = 0; i < toggleInfo.Count; i++) { RefreshToggle(toggleInfo[i]); } int num = 0; IEnumerator enumerator2 = gridSizer.transform.GetEnumerator(); try { while (enumerator2.MoveNext()) { Transform transform = (Transform)enumerator2.Current; if (transform.gameObject.activeSelf) { num++; } } } finally { IDisposable disposable; if ((disposable = (enumerator2 as IDisposable)) != null) { disposable.Dispose(); } } gridSizer.constraintCount = Mathf.Min(num, 3); int num2 = Mathf.Min(num, gridSizer.constraintCount); int num3 = (num + gridSizer.constraintCount - 1) / gridSizer.constraintCount; int num4 = num2 - 1; int num5 = num3 - 1; float num6 = (float)num2; Vector2 cellSize = gridSizer.cellSize; float num7 = num6 * cellSize.x; float num8 = (float)num4; Vector2 spacing = gridSizer.spacing; float x = num7 + num8 * spacing.x + (float)gridSizer.padding.left + (float)gridSizer.padding.right; float num9 = (float)num3; Vector2 cellSize2 = gridSizer.cellSize; float num10 = num9 * cellSize2.y; float num11 = (float)num5; Vector2 spacing2 = gridSizer.spacing; Vector2 vector = new Vector2(x, num10 + num11 * spacing2.y + (float)gridSizer.padding.top + (float)gridSizer.padding.bottom); contentSizeLayout.minWidth = vector.x; contentSizeLayout.minHeight = vector.y; }
protected override void OnSpawn() { if (addToIdentityList) { ValidateProxy(); CleanupLimboMinions(); } PathProber component = GetComponent <PathProber>(); if ((UnityEngine.Object)component != (UnityEngine.Object)null) { component.SetGroupProber(MinionGroupProber.Get()); } SetName(name); if (nameStringKey == null) { nameStringKey = name; } SetGender(gender); if (genderStringKey == null) { genderStringKey = "NB"; } if (addToIdentityList) { Components.MinionIdentities.Add(this); if (!base.gameObject.HasTag(GameTags.Dead)) { Components.LiveMinionIdentities.Add(this); } } SymbolOverrideController component2 = GetComponent <SymbolOverrideController>(); if ((UnityEngine.Object)component2 != (UnityEngine.Object)null) { Accessorizer component3 = base.gameObject.GetComponent <Accessorizer>(); if ((UnityEngine.Object)component3 != (UnityEngine.Object)null) { bodyData = default(KCompBuilder.BodyData); component3.GetBodySlots(ref bodyData); string text = HashCache.Get().Get(component3.GetAccessory(Db.Get().AccessorySlots.HeadShape).symbol.hash); string str = text.Replace("headshape", "cheek"); component2.AddSymbolOverride("snapto_cheek", Assets.GetAnim("head_swap_kanim").GetData().build.GetSymbol(str), 1); component2.AddSymbolOverride(Db.Get().AccessorySlots.HairAlways.targetSymbolId, component3.GetAccessory(Db.Get().AccessorySlots.Hair).symbol, 1); component2.AddSymbolOverride(Db.Get().AccessorySlots.HatHair.targetSymbolId, Db.Get().AccessorySlots.HatHair.Lookup("hat_" + HashCache.Get().Get(component3.GetAccessory(Db.Get().AccessorySlots.Hair).symbol.hash)).symbol, 1); } } voiceId = "0"; voiceId += (voiceIdx + 1).ToString(); Prioritizable component4 = GetComponent <Prioritizable>(); if ((UnityEngine.Object)component4 != (UnityEngine.Object)null) { component4.showIcon = false; } Pickupable component5 = GetComponent <Pickupable>(); if ((UnityEngine.Object)component5 != (UnityEngine.Object)null) { component5.carryAnimOverride = Assets.GetAnim("anim_incapacitated_carrier_kanim"); } ApplyCustomGameSettings(); }
public void TestGetInvalidKey() { var cache = new HashCache(); cache.Get("Doesn't exist"); }
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 static HashedString CacheHashString(string str) { return(HashCache.Get().Add(str)); }
public static void ParseAnimData(KBatchGroupData data, HashedString fileNameHash, FastReader reader, KAnimFileData animFile) { CheckHeader("ANIM", reader); uint num = reader.ReadUInt32(); Assert(num == 5, "Invalid anim.bytes version"); reader.ReadInt32(); reader.ReadInt32(); int num2 = reader.ReadInt32(); animFile.maxVisSymbolFrames = 0; animFile.animCount = 0; animFile.frameCount = 0; animFile.elementCount = 0; animFile.firstAnimIndex = data.anims.Count; animFile.animBatchTag = data.groupID; data.animIndex.Add(fileNameHash, data.anims.Count); animFile.firstElementIndex = data.frameElements.Count; for (int i = 0; i < num2; i++) { KAnim.Anim anim = new KAnim.Anim(animFile, data.anims.Count); anim.name = reader.ReadKleiString(); string text = animFile.name + "." + anim.name; anim.id = text; HashCache.Get().Add(anim.name); HashCache.Get().Add(text); anim.hash = anim.name; anim.rootSymbol.HashValue = reader.ReadInt32(); anim.frameRate = reader.ReadSingle(); anim.firstFrameIdx = data.animFrames.Count; anim.numFrames = reader.ReadInt32(); anim.totalTime = (float)anim.numFrames / anim.frameRate; anim.scaledBoundingRadius = 0f; for (int j = 0; j < anim.numFrames; j++) { KAnim.Anim.Frame item = default(KAnim.Anim.Frame); float num3 = reader.ReadSingle(); float num4 = reader.ReadSingle(); float num5 = reader.ReadSingle(); float num6 = reader.ReadSingle(); item.bbox = new AABB3(new Vector3(num3 - num5 * 0.5f, 0f - (num4 + num6 * 0.5f), 0f) * 0.005f, new Vector3(num3 + num5 * 0.5f, 0f - (num4 - num6 * 0.5f), 0f) * 0.005f); float num7 = Math.Max(Math.Abs(item.bbox.max.x), Math.Abs(item.bbox.min.x)); float num8 = Math.Max(Math.Abs(item.bbox.max.y), Math.Abs(item.bbox.min.y)); float num9 = Math.Max(num7, num8); anim.unScaledSize.x = Math.Max(anim.unScaledSize.x, num7 / 0.005f); anim.unScaledSize.y = Math.Max(anim.unScaledSize.y, num8 / 0.005f); anim.scaledBoundingRadius = Math.Max(anim.scaledBoundingRadius, Mathf.Sqrt(num9 * num9 + num9 * num9)); item.idx = data.animFrames.Count; item.firstElementIdx = data.frameElements.Count; item.numElements = reader.ReadInt32(); int num10 = 0; for (int k = 0; k < item.numElements; k++) { KAnim.Anim.FrameElement item2 = default(KAnim.Anim.FrameElement); item2.fileHash = fileNameHash; item2.symbol = new KAnimHashedString(reader.ReadInt32()); item2.frame = reader.ReadInt32(); item2.folder = new KAnimHashedString(reader.ReadInt32()); item2.flags = reader.ReadInt32(); float a = reader.ReadSingle(); float b = reader.ReadSingle(); float g = reader.ReadSingle(); float r = reader.ReadSingle(); item2.multColour = new Color(r, g, b, a); float m = reader.ReadSingle(); float m2 = reader.ReadSingle(); float m3 = reader.ReadSingle(); float m4 = reader.ReadSingle(); float m5 = reader.ReadSingle(); float m6 = reader.ReadSingle(); reader.ReadSingle(); item2.transform.m00 = m; item2.transform.m01 = m3; item2.transform.m02 = m5; item2.transform.m10 = m2; item2.transform.m11 = m4; item2.transform.m12 = m6; int symbolIndex = data.GetSymbolIndex(item2.symbol); if (symbolIndex == -1) { num10++; item2.symbol = MISSING_SYMBOL; } else { item2.symbolIdx = symbolIndex; data.frameElements.Add(item2); animFile.elementCount++; } } item.numElements -= num10; data.animFrames.Add(item); animFile.frameCount++; } data.AddAnim(anim); animFile.animCount++; } Debug.Assert(num2 == animFile.animCount); data.animCount[fileNameHash] = animFile.animCount; animFile.maxVisSymbolFrames = Math.Max(animFile.maxVisSymbolFrames, reader.ReadInt32()); data.UpdateMaxVisibleSymbols(animFile.maxVisSymbolFrames); ParseHashTable(reader); }
private void SetPortraitAnimator(IAssignableIdentity identity) { if (identity != null && !identity.IsNull()) { if ((UnityEngine.Object)animController == (UnityEngine.Object)null) { animController = Util.KInstantiateUI(Assets.GetPrefab(new Tag("FullMinionUIPortrait")), duplicantAnimAnchor.gameObject, false).GetComponent <KBatchedAnimController>(); animController.gameObject.SetActive(true); KCanvasScaler kCanvasScaler = UnityEngine.Object.FindObjectOfType <KCanvasScaler>(); animController.animScale = baseCharacterScale * (1f / kCanvasScaler.GetCanvasScale()); ScreenResize instance = ScreenResize.Instance; instance.OnResize = (System.Action)Delegate.Combine(instance.OnResize, new System.Action(OnResize)); } string value = string.Empty; Accessorizer component = animController.GetComponent <Accessorizer>(); for (int num = component.GetAccessories().Count - 1; num >= 0; num--) { component.RemoveAccessory(component.GetAccessories()[num].Get()); } MinionIdentity minionIdentity = identity as MinionIdentity; StoredMinionIdentity storedMinionIdentity = identity as StoredMinionIdentity; Accessorizer accessorizer = null; if ((UnityEngine.Object)minionIdentity != (UnityEngine.Object)null) { accessorizer = minionIdentity.GetComponent <Accessorizer>(); foreach (ResourceRef <Accessory> accessory in accessorizer.GetAccessories()) { component.AddAccessory(accessory.Get()); } value = minionIdentity.GetComponent <MinionResume>().CurrentHat; } else if ((UnityEngine.Object)storedMinionIdentity != (UnityEngine.Object)null) { foreach (ResourceRef <Accessory> accessory2 in storedMinionIdentity.accessories) { component.AddAccessory(accessory2.Get()); } value = storedMinionIdentity.currentHat; } HashedString name = "anim_idle_healthy_kanim"; idle_anim = Assets.GetAnim(name); if ((UnityEngine.Object)idle_anim != (UnityEngine.Object)null) { animController.AddAnimOverrides(idle_anim, 0f); } animController.Queue("idle_default", KAnim.PlayMode.Loop, 1f, 0f); AccessorySlot hat = Db.Get().AccessorySlots.Hat; animController.SetSymbolVisiblity(hat.targetSymbolId, (!string.IsNullOrEmpty(value)) ? true : false); animController.SetSymbolVisiblity(Db.Get().AccessorySlots.Hair.targetSymbolId, string.IsNullOrEmpty(value) ? true : false); animController.SetSymbolVisiblity(Db.Get().AccessorySlots.HatHair.targetSymbolId, (!string.IsNullOrEmpty(value)) ? true : false); KAnim.Build.Symbol source_symbol = null; KAnim.Build.Symbol source_symbol2 = null; if ((bool)accessorizer) { source_symbol = accessorizer.GetAccessory(Db.Get().AccessorySlots.Hair).symbol; source_symbol2 = Db.Get().AccessorySlots.HatHair.Lookup("hat_" + HashCache.Get().Get(accessorizer.GetAccessory(Db.Get().AccessorySlots.Hair).symbol.hash)).symbol; } else if ((UnityEngine.Object)storedMinionIdentity != (UnityEngine.Object)null) { source_symbol = storedMinionIdentity.GetAccessory(Db.Get().AccessorySlots.Hair).symbol; source_symbol2 = Db.Get().AccessorySlots.HatHair.Lookup("hat_" + HashCache.Get().Get(storedMinionIdentity.GetAccessory(Db.Get().AccessorySlots.Hair).symbol.hash)).symbol; } animController.GetComponent <SymbolOverrideController>().AddSymbolOverride(Db.Get().AccessorySlots.HairAlways.targetSymbolId, source_symbol, 1); animController.GetComponent <SymbolOverrideController>().AddSymbolOverride(Db.Get().AccessorySlots.HatHair.targetSymbolId, source_symbol2, 1); } }