private void SetAnimToInfo() { GameObject gameObject = Util.KInstantiate(Assets.GetPrefab("Meter".ToTag()), base.gameObject, null); GameObject prefab = Assets.GetPrefab(info.id); KBatchedAnimController component = GetComponent <KBatchedAnimController>(); KBatchedAnimController component2 = prefab.GetComponent <KBatchedAnimController>(); SymbolOverrideController component3 = prefab.GetComponent <SymbolOverrideController>(); KBatchedAnimController component4 = gameObject.GetComponent <KBatchedAnimController>(); component4.transform.SetLocalPosition(Vector3.forward); component4.AnimFiles = component2.AnimFiles; component4.isMovable = true; component4.animWidth = component2.animWidth; component4.animHeight = component2.animHeight; if ((Object)component3 != (Object)null) { SymbolOverrideController symbolOverrideController = SymbolOverrideControllerUtil.AddToPrefab(gameObject); SymbolOverrideController.SymbolEntry[] getSymbolOverrides = component3.GetSymbolOverrides; for (int i = 0; i < getSymbolOverrides.Length; i++) { SymbolOverrideController.SymbolEntry symbolEntry = getSymbolOverrides[i]; symbolOverrideController.AddSymbolOverride(symbolEntry.targetSymbol, symbolEntry.sourceSymbol, 0); } } component4.initialAnim = component2.initialAnim; component4.initialMode = KAnim.PlayMode.Loop; KBatchedAnimTracker component5 = gameObject.GetComponent <KBatchedAnimTracker>(); component5.controller = component; component5.symbol = new HashedString("snapTO_object"); component5.offset = new Vector3(0f, 0.5f, 0f); gameObject.SetActive(true); component.SetSymbolVisiblity("snapTO_object", false); new KAnimLink(component, component4); }
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); } } }
public static void AddHat(string hat_id, KBatchedAnimController controller) { AccessorySlot hat = Db.Get().AccessorySlots.Hat; Accessory accessory = hat.Lookup(hat_id); if (accessory == null) { Debug.LogWarning("Missing hat: " + hat_id); } Accessorizer component = controller.GetComponent <Accessorizer>(); if ((UnityEngine.Object)component != (UnityEngine.Object)null) { Accessory accessory2 = component.GetAccessory(Db.Get().AccessorySlots.Hat); if (accessory2 != null) { component.RemoveAccessory(accessory2); } if (accessory != null) { component.AddAccessory(accessory); } } else { SymbolOverrideController component2 = controller.GetComponent <SymbolOverrideController>(); component2.TryRemoveSymbolOverride(hat.targetSymbolId, 4); component2.AddSymbolOverride(hat.targetSymbolId, accessory.symbol, 4); } controller.SetSymbolVisiblity(hat.targetSymbolId, true); controller.SetSymbolVisiblity(Db.Get().AccessorySlots.HatHair.targetSymbolId, true); controller.SetSymbolVisiblity(Db.Get().AccessorySlots.Hair.targetSymbolId, false); }
public void RemoveAccessory(Accessory accessory) { accessories.RemoveAll((ResourceRef <Accessory> x) => x.Get() == accessory); SymbolOverrideController component = animController.GetComponent <SymbolOverrideController>(); component.TryRemoveSymbolOverride(accessory.slot.targetSymbolId, 0); }
protected override void OnAwake() { LoadAnims(); if (visibilityType == VisibilityType.Default) { visibilityType = ((materialType != KAnimBatchGroup.MaterialType.UI) ? visibilityType : VisibilityType.Always); } symbolOverrideController = GetComponent <SymbolOverrideController>(); UpdateHidden(); hasEnableRun = false; }
private static void AddMouthOverride(Instance smi) { SymbolOverrideController component = smi.GetComponent <SymbolOverrideController>(); KBatchedAnimController component2 = smi.GetComponent <KBatchedAnimController>(); KAnim.Build.Symbol symbol = component2.AnimFiles[0].GetData().build.GetSymbol("sq_mouth_cheeks"); if (symbol != null) { component.AddSymbolOverride("sq_mouth", symbol, 0); } }
// сам носимый баллон: // внедряем в FX-объект баллона контроллер подмены анимации // вытаскиваем индекс из носителя и применяем подмену символа анимации // запоминаем ссылку на новый FX-объект private static void ApplySymbolOverrideBalloonFX(BalloonFX.Instance smi, KBatchedAnimController kbac) { kbac.usingNewSymbolOverrideSystem = true; SymbolOverrideController symbolOverrideController = SymbolOverrideControllerUtil.AddToPrefab(kbac.gameObject); VaricolouredBalloonsHelper receiver = smi.master.GetComponent <VaricolouredBalloonsHelper>(); if (receiver != null) { receiver.fx = smi; VaricolouredBalloonsHelper.ApplySymbolOverrideByIdx(symbolOverrideController, receiver.ReceiverBalloonSymbolIdx); } }
public void LayEgg() { fertility.value = 0f; Vector3 position = base.smi.transform.GetPosition(); position.z = Grid.GetLayerZ(Grid.SceneLayer.Ore); float num = UnityEngine.Random.value; Tag invalid = Tag.Invalid; foreach (BreedingChance breedingChance in breedingChances) { num -= breedingChance.weight; if (num <= 0f) { invalid = breedingChance.egg; break; } } if (GenericGameSettings.instance.acceleratedLifecycle) { float num2 = 0f; foreach (BreedingChance breedingChance2 in breedingChances) { if (breedingChance2.weight > num2) { num2 = breedingChance2.weight; invalid = breedingChance2.egg; } } } Debug.Assert(invalid != Tag.Invalid, "Didn't pick an egg to lay. Weights weren't normalized?"); GameObject prefab = Assets.GetPrefab(invalid); GameObject gameObject = egg = Util.KInstantiate(prefab, position); SymbolOverrideController component = GetComponent <SymbolOverrideController>(); string str = "egg01"; IncubationMonitor.Def def = prefab.GetDef <IncubationMonitor.Def>(); CreatureBrain component2 = Assets.GetPrefab(def.spawnedCreature).GetComponent <CreatureBrain>(); if (!string.IsNullOrEmpty(component2.symbolPrefix)) { str = component2.symbolPrefix + "egg01"; } KAnim.Build.Symbol symbol = egg.GetComponent <KBatchedAnimController>().AnimFiles[0].GetData().build.GetSymbol(str); if (symbol != null) { component.AddSymbolOverride(targetEggSymbol, symbol, 0); } Trigger(1193600993, egg); }
public void AddAccessory(Accessory accessory) { if (accessory != null) { SymbolOverrideController component = animController.GetComponent <SymbolOverrideController>(); component.AddSymbolOverride(accessory.slot.targetSymbolId, accessory.symbol, 0); if (!HasAccessory(accessory)) { ResourceRef <Accessory> resourceRef = new ResourceRef <Accessory>(accessory); if (resourceRef != null) { accessories.Add(resourceRef); } } } }
private void DoAttachSnapOn(SnapPoint point) { OverrideEntry value = null; KAnimFile buildFile = point.buildFile; string symbol_name = string.Empty; if (overrideMap.TryGetValue(point.pointName, out value)) { buildFile = value.buildFile; symbol_name = value.symbolName; } KAnim.Build.Symbol symbol = GetSymbol(buildFile, symbol_name); SymbolOverrideController component = GetComponent <SymbolOverrideController>(); component.AddSymbolOverride(point.overrideSymbol, symbol, 5); kanimController.SetSymbolVisiblity(point.overrideSymbol, true); }
public override void InitializeStates(out BaseState default_state) { default_state = idle; idle.ToggleMainStatusItem(Db.Get().BuildingStatusItems.Baited).Enter(delegate(StatesInstance smi) { Element element = ElementLoader.FindElementByName(smi.master.baitElement.ToString()); KAnim.Build build = element.substance.anim.GetData().build; KAnim.Build.Symbol symbol = build.GetSymbol(new KAnimHashedString(build.name)); HashedString target_symbol = "snapTo_bait"; SymbolOverrideController component = smi.GetComponent <SymbolOverrideController>(); component.AddSymbolOverride(target_symbol, symbol, 0); }).TagTransition(GameTags.LureUsed, destroy, false); destroy.PlayAnim("use").EventHandler(GameHashes.AnimQueueComplete, delegate(StatesInstance smi) { Util.KDestroyGameObject(smi.master.gameObject); }); }
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 DetachSnapOnByName(string name) { foreach (SnapPoint snapPoint in snapPoints) { if (snapPoint.pointName == name) { HashedString context = GetComponent <AnimEventHandler>().GetContext(); if (!context.IsValid || !snapPoint.context.IsValid || context == snapPoint.context) { SymbolOverrideController component = GetComponent <SymbolOverrideController>(); component.RemoveSymbolOverride(snapPoint.overrideSymbol, 5); kanimController.SetSymbolVisiblity(snapPoint.overrideSymbol, false); break; } } } }
public static GameObject ExtendEntityToFertileCreature(GameObject prefab, string eggId, string eggName, string eggDesc, string egg_anim, float egg_mass, string baby_id, float fertility_cycles, float incubation_cycles, List <FertilityMonitor.BreedingChance> egg_chances, int eggSortOrder = -1, bool is_ranchable = true, bool add_fish_overcrowding_monitor = false, bool add_fixed_capturable_monitor = true, float egg_anim_scale = 1f) { FertilityMonitor.Def def = prefab.AddOrGetDef <FertilityMonitor.Def>(); def.baseFertileCycles = fertility_cycles; DebugUtil.DevAssert(eggSortOrder > -1, "Added a fertile creature without an egg sort order!"); float base_incubation_rate = 100f / (600f * incubation_cycles); GameObject gameObject = EggConfig.CreateEgg(eggId, eggName, eggDesc, baby_id, egg_anim, egg_mass, eggSortOrder, base_incubation_rate); def.eggPrefab = new Tag(eggId); def.initialBreedingWeights = egg_chances; if (egg_anim_scale != 1f) { KBatchedAnimController component = gameObject.GetComponent <KBatchedAnimController>(); component.animWidth = egg_anim_scale; component.animHeight = egg_anim_scale; } KPrefabID egg_prefab_id = gameObject.GetComponent <KPrefabID>(); SymbolOverrideController symbol_override_controller = SymbolOverrideControllerUtil.AddToPrefab(gameObject); string symbolPrefix = prefab.GetComponent <CreatureBrain>().symbolPrefix; if (!string.IsNullOrEmpty(symbolPrefix)) { symbol_override_controller.ApplySymbolOverridesByAffix(Assets.GetAnim(egg_anim), symbolPrefix, null, 0); } KPrefabID creature_prefab_id = prefab.GetComponent <KPrefabID>(); creature_prefab_id.prefabSpawnFn += delegate { WorldInventory.Instance.Discover(eggId.ToTag(), WorldInventory.GetCategoryForTags(egg_prefab_id.Tags)); WorldInventory.Instance.Discover(baby_id.ToTag(), WorldInventory.GetCategoryForTags(creature_prefab_id.Tags)); }; if (is_ranchable) { prefab.AddOrGetDef <RanchableMonitor.Def>(); } if (add_fixed_capturable_monitor) { prefab.AddOrGetDef <FixedCapturableMonitor.Def>(); } if (add_fish_overcrowding_monitor) { gameObject.AddOrGetDef <FishOvercrowdingMonitor.Def>(); } return(prefab); }
public override void InitializeStates(out BaseState default_state) { default_state = idle; idle.PlayAnim("off", KAnim.PlayMode.Loop).Enter(delegate(StatesInstance smi) { if (smi.master.activeBaitSetting != Tag.Invalid) { if (smi.master.baitStorage.IsEmpty()) { smi.master.CreateFetchChore(); } else if (smi.master.operational.IsOperational) { smi.GoTo(working); } } }).EventTransition(GameHashes.OnStorageChange, working, (StatesInstance smi) => !smi.master.baitStorage.IsEmpty() && smi.master.activeBaitSetting != Tag.Invalid && smi.master.operational.IsOperational) .EventTransition(GameHashes.OperationalChanged, working, (StatesInstance smi) => !smi.master.baitStorage.IsEmpty() && smi.master.activeBaitSetting != Tag.Invalid && smi.master.operational.IsOperational); working.Enter(delegate(StatesInstance smi) { smi.master.GetComponent <KSelectable>().RemoveStatusItem(Db.Get().BuildingStatusItems.AwaitingBaitDelivery, false); HashedString batchTag = ElementLoader.FindElementByName(smi.master.activeBaitSetting.ToString()).substance.anim.batchTag; KAnim.Build build = ElementLoader.FindElementByName(smi.master.activeBaitSetting.ToString()).substance.anim.GetData().build; KAnim.Build.Symbol symbol = build.GetSymbol(new KAnimHashedString(build.name)); HashedString target_symbol = "slime_mold"; SymbolOverrideController component = smi.GetComponent <SymbolOverrideController>(); component.TryRemoveSymbolOverride(target_symbol, 0); component.AddSymbolOverride(target_symbol, symbol, 0); smi.GetSMI <Lure.Instance>().SetActiveLures(new Tag[1] { smi.master.activeBaitSetting }); }).Exit(ClearBait).QueueAnim("working_pre", false, null) .QueueAnim("working_loop", true, null) .EventTransition(GameHashes.OnStorageChange, empty, (StatesInstance smi) => smi.master.baitStorage.IsEmpty() && smi.master.activeBaitSetting != Tag.Invalid) .EventTransition(GameHashes.OperationalChanged, idle, (StatesInstance smi) => !smi.master.operational.IsOperational && !smi.master.baitStorage.IsEmpty()); empty.QueueAnim("working_pst", false, null).QueueAnim("off", false, null).Enter(delegate(StatesInstance smi) { smi.master.CreateFetchChore(); }) .EventTransition(GameHashes.OnStorageChange, working, (StatesInstance smi) => !smi.master.baitStorage.IsEmpty() && smi.master.operational.IsOperational) .EventTransition(GameHashes.OperationalChanged, working, (StatesInstance smi) => !smi.master.baitStorage.IsEmpty() && smi.master.operational.IsOperational); }
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); }
protected override void OnStart() { if (batch == null) { Initialize(); } if (visibilityType == VisibilityType.Always || visibilityType == VisibilityType.OffscreenUpdate) { ConfigureUpdateListener(); } CellChangeMonitor instance = Singleton <CellChangeMonitor> .Instance; if (instance != null) { instance.RegisterMovementStateChanged(base.transform, OnMovementStateChanged); moving = instance.IsMoving(base.transform); } symbolOverrideController = GetComponent <SymbolOverrideController>(); SetDirty(); }
private void HideHelmet() { is_shown = false; KBatchedAnimController assigneeController = GetAssigneeController(); if (!((Object)assigneeController == (Object)null)) { KAnimHashedString kAnimHashedString = "snapTo_neck"; if (!string.IsNullOrEmpty(anim_file)) { SymbolOverrideController component = assigneeController.GetComponent <SymbolOverrideController>(); if ((Object)component == (Object)null) { return; } component.RemoveSymbolOverride(kAnimHashedString, 6); } assigneeController.SetSymbolVisiblity(kAnimHashedString, false); UpdateJets(); } }
private void DisplayDuplicants(RetiredColonyData data, GameObject container, int range_min = -1, int range_max = -1) { for (int num = container.transform.childCount - 1; num >= 0; num--) { UnityEngine.Object.DestroyImmediate(container.transform.GetChild(num).gameObject); } for (int i = 0; i < data.Duplicants.Length; i++) { if (i < range_min || (i > range_max && range_max != -1)) { GameObject gameObject = new GameObject(); gameObject.transform.SetParent(container.transform); } else { RetiredColonyData.RetiredDuplicantData retiredDuplicantData = data.Duplicants[i]; GameObject gameObject2 = Util.KInstantiateUI(duplicantPrefab, container, true); HierarchyReferences component = gameObject2.GetComponent <HierarchyReferences>(); component.GetReference <LocText>("NameLabel").SetText(retiredDuplicantData.name); component.GetReference <LocText>("AgeLabel").SetText(string.Format(UI.RETIRED_COLONY_INFO_SCREEN.DUPLICANT_AGE, retiredDuplicantData.age.ToString())); component.GetReference <LocText>("SkillLabel").SetText(string.Format(UI.RETIRED_COLONY_INFO_SCREEN.SKILL_LEVEL, retiredDuplicantData.skillPointsGained.ToString())); SymbolOverrideController reference = component.GetReference <SymbolOverrideController>("SymbolOverrideController"); reference.RemoveAllSymbolOverrides(0); KBatchedAnimController componentInChildren = gameObject2.GetComponentInChildren <KBatchedAnimController>(); componentInChildren.SetSymbolVisiblity("snapTo_neck", false); componentInChildren.SetSymbolVisiblity("snapTo_goggles", false); componentInChildren.SetSymbolVisiblity("snapTo_hat", false); componentInChildren.SetSymbolVisiblity("snapTo_hat_hair", false); foreach (KeyValuePair <string, string> accessory in retiredDuplicantData.accessories) { KAnim.Build.Symbol symbol = Db.Get().Accessories.Get(accessory.Value).symbol; AccessorySlot accessorySlot = Db.Get().AccessorySlots.Get(accessory.Key); reference.AddSymbolOverride(accessorySlot.targetSymbolId, symbol, 0); gameObject2.GetComponentInChildren <KBatchedAnimController>().SetSymbolVisiblity(accessory.Key, true); } reference.ApplyOverrides(); } } StartCoroutine(ActivatePortraitsWhenReady(container)); }
private void FillFeeder(float mass) { KBatchedAnimController component = smi.GetComponent <KBatchedAnimController>(); SymbolOverrideController component2 = smi.GetComponent <SymbolOverrideController>(); KAnim.Build.Symbol symbol = null; Storage component3 = smi.GetComponent <Storage>(); if (component3.items.Count > 0 && (Object)component3.items[0] != (Object)null) { symbol = smi.GetComponent <Storage>().items[0].GetComponent <KBatchedAnimController>().AnimFiles[0].GetData().build.GetSymbol("algae"); } for (int i = 0; i < ballSymbols.Length; i++) { bool is_visible = mass > (float)(i + 1) * massPerBall; component.SetSymbolVisiblity(ballSymbols[i], is_visible); if (symbol != null) { component2.AddSymbolOverride(ballSymbols[i], symbol, 0); } } }
protected virtual List <GameObject> SpawnOrderProduct(ComplexRecipe recipe) { List <GameObject> list = new List <GameObject>(); SimUtil.DiseaseInfo diseaseInfo = default(SimUtil.DiseaseInfo); diseaseInfo.count = 0; diseaseInfo.idx = 0; float num = 0f; float num2 = 0f; ComplexRecipe.RecipeElement[] ingredients = recipe.ingredients; foreach (ComplexRecipe.RecipeElement recipeElement in ingredients) { num2 += recipeElement.amount; } ComplexRecipe.RecipeElement[] ingredients2 = recipe.ingredients; foreach (ComplexRecipe.RecipeElement recipeElement2 in ingredients2) { float num3 = recipeElement2.amount / num2; buildStorage.ConsumeAndGetDisease(recipeElement2.material, recipeElement2.amount, out SimUtil.DiseaseInfo disease_info, out float aggregate_temperature); if (disease_info.count > diseaseInfo.count) { diseaseInfo = disease_info; } num += aggregate_temperature * num3; } ComplexRecipe.RecipeElement[] results = recipe.results; foreach (ComplexRecipe.RecipeElement recipeElement3 in results) { GameObject gameObject = buildStorage.FindFirst(recipeElement3.material); if ((UnityEngine.Object)gameObject != (UnityEngine.Object)null) { Edible component = gameObject.GetComponent <Edible>(); if ((bool)component) { ReportManager.Instance.ReportValue(ReportManager.ReportType.CaloriesCreated, 0f - component.Calories, StringFormatter.Replace(UI.ENDOFDAYREPORT.NOTES.CRAFTED_USED, "{0}", component.GetProperName()), UI.ENDOFDAYREPORT.NOTES.CRAFTED_CONTEXT); } } switch (resultState) { case ResultState.PassTemperature: case ResultState.Heated: { GameObject prefab = Assets.GetPrefab(recipeElement3.material); GameObject gameObject2 = GameUtil.KInstantiate(prefab, Grid.SceneLayer.Ore, null, 0); int cell = Grid.PosToCell(this); gameObject2.transform.SetPosition(Grid.CellToPosCCC(cell, Grid.SceneLayer.Ore) + outputOffset); PrimaryElement component2 = gameObject2.GetComponent <PrimaryElement>(); component2.Units = recipeElement3.amount; component2.Temperature = ((resultState != 0) ? heatedTemperature : num); gameObject2.SetActive(true); float num4 = recipeElement3.amount / recipe.TotalResultUnits(); component2.AddDisease(diseaseInfo.idx, Mathf.RoundToInt((float)diseaseInfo.count * num4), "ComplexFabricator.CompleteOrder"); gameObject2.GetComponent <KMonoBehaviour>().Trigger(748399584, null); list.Add(gameObject2); if (storeProduced) { outStorage.Store(gameObject2, false, false, true, false); } break; } case ResultState.Melted: if (storeProduced) { float temperature = ElementLoader.GetElement(recipeElement3.material).lowTemp + (ElementLoader.GetElement(recipeElement3.material).highTemp - ElementLoader.GetElement(recipeElement3.material).lowTemp) / 2f; outStorage.AddLiquid(ElementLoader.GetElementID(recipeElement3.material), recipeElement3.amount, temperature, 0, 0, false, true); } break; } if (list.Count > 0) { SymbolOverrideController component3 = GetComponent <SymbolOverrideController>(); if ((UnityEngine.Object)component3 != (UnityEngine.Object)null) { KBatchedAnimController component4 = list[0].GetComponent <KBatchedAnimController>(); KAnim.Build build = component4.AnimFiles[0].GetData().build; KAnim.Build.Symbol symbol = build.GetSymbol(build.name); if (symbol != null) { component3.TryRemoveSymbolOverride("output_tracker", 0); component3.AddSymbolOverride("output_tracker", symbol, 0); } else { Debug.LogWarning(component3.name + " is missing symbol " + build.name); } } } } return(list); }
private static void RemoveMouthOverride(Instance smi) { SymbolOverrideController component = smi.GetComponent <SymbolOverrideController>(); component.TryRemoveSymbolOverride("sq_mouth", 0); }
public GameObject CreatePrefab() { string name = DUPLICANTS.MODIFIERS.BASEDUPLICANT.NAME; GameObject gameObject = EntityTemplates.CreateEntity(ID, name, true); gameObject.AddOrGet <StateMachineController>(); MinionModifiers modifiers = gameObject.AddOrGet <MinionModifiers>(); AddMinionAmounts(modifiers); AddMinionTraits(name, modifiers); gameObject.AddOrGet <MinionBrain>(); gameObject.AddOrGet <KPrefabID>().AddTag(GameTags.DupeBrain, false); gameObject.AddOrGet <Worker>(); gameObject.AddOrGet <ChoreConsumer>(); Storage storage = gameObject.AddOrGet <Storage>(); storage.fxPrefix = Storage.FXPrefix.PickedUp; storage.dropOnLoad = true; storage.SetDefaultStoredItemModifiers(new List <Storage.StoredItemModifier> { Storage.StoredItemModifier.Preserve, Storage.StoredItemModifier.Seal }); gameObject.AddOrGet <Health>(); OxygenBreather oxygenBreather = gameObject.AddOrGet <OxygenBreather>(); oxygenBreather.O2toCO2conversion = 0.02f; oxygenBreather.lowOxygenThreshold = 0.52f; oxygenBreather.noOxygenThreshold = 0.05f; oxygenBreather.mouthOffset = new Vector2f(0.25f, 0.7f); oxygenBreather.minCO2ToEmit = 0.02f; oxygenBreather.breathableCells = new CellOffset[6] { new CellOffset(0, 0), new CellOffset(0, 1), new CellOffset(1, 1), new CellOffset(-1, 1), new CellOffset(1, 0), new CellOffset(-1, 0) }; gameObject.AddOrGet <WarmBlooded>(); gameObject.AddOrGet <MinionIdentity>(); GridVisibility gridVisibility = gameObject.AddOrGet <GridVisibility>(); gridVisibility.radius = 30f; gridVisibility.innerRadius = 20f; gameObject.AddOrGet <MiningSounds>(); gameObject.AddOrGet <SaveLoadRoot>(); gameObject.AddOrGet <AntiCluster>(); Navigator navigator = gameObject.AddOrGet <Navigator>(); navigator.NavGridName = "MinionNavGrid"; navigator.CurrentNavType = NavType.Floor; KBatchedAnimController kBatchedAnimController = gameObject.AddOrGet <KBatchedAnimController>(); kBatchedAnimController.isMovable = true; kBatchedAnimController.sceneLayer = Grid.SceneLayer.Move; kBatchedAnimController.AnimFiles = new KAnimFile[8] { Assets.GetAnim("body_comp_default_kanim"), Assets.GetAnim("anim_construction_default_kanim"), Assets.GetAnim("anim_idles_default_kanim"), Assets.GetAnim("anim_loco_firepole_kanim"), Assets.GetAnim("anim_loco_new_kanim"), Assets.GetAnim("anim_loco_tube_kanim"), Assets.GetAnim("anim_construction_firepole_kanim"), Assets.GetAnim("anim_construction_jetsuit_kanim") }; KBoxCollider2D kBoxCollider2D = gameObject.AddOrGet <KBoxCollider2D>(); kBoxCollider2D.offset = new Vector2(0f, 0.8f); kBoxCollider2D.size = new Vector2(1f, 1.5f); SnapOn snapOn = gameObject.AddOrGet <SnapOn>(); snapOn.snapPoints = new List <SnapOn.SnapPoint>(new SnapOn.SnapPoint[17] { new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"dig", buildFile = Assets.GetAnim("excavator_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"build", buildFile = Assets.GetAnim("constructor_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"fetchliquid", buildFile = Assets.GetAnim("water_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"paint", buildFile = Assets.GetAnim("painting_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"harvest", buildFile = Assets.GetAnim("plant_harvester_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"capture", buildFile = Assets.GetAnim("net_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"attack", buildFile = Assets.GetAnim("attack_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"pickup", buildFile = Assets.GetAnim("pickupdrop_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"store", buildFile = Assets.GetAnim("pickupdrop_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"disinfect", buildFile = Assets.GetAnim("plant_spray_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"tend", buildFile = Assets.GetAnim("plant_harvester_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "carry", automatic = false, context = (HashedString)string.Empty, buildFile = null, overrideSymbol = (HashedString)"snapTo_chest" }, new SnapOn.SnapPoint { pointName = "build", automatic = false, context = (HashedString)string.Empty, buildFile = null, overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "remote", automatic = false, context = (HashedString)string.Empty, buildFile = null, overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "snapTo_neck", automatic = false, context = (HashedString)string.Empty, buildFile = Assets.GetAnim("helm_oxygen_kanim"), overrideSymbol = (HashedString)"snapTo_neck" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"powertinker", buildFile = Assets.GetAnim("electrician_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"specialistdig", buildFile = Assets.GetAnim("excavator_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" } }); gameObject.AddOrGet <Effects>(); gameObject.AddOrGet <Traits>(); gameObject.AddOrGet <AttributeLevels>(); gameObject.AddOrGet <AttributeConverters>(); PrimaryElement primaryElement = gameObject.AddOrGet <PrimaryElement>(); primaryElement.InternalTemperature = 310.15f; primaryElement.MassPerUnit = 30f; primaryElement.ElementID = SimHashes.Creature; gameObject.AddOrGet <ChoreProvider>(); gameObject.AddOrGetDef <DebugGoToMonitor.Def>(); gameObject.AddOrGetDef <SpeechMonitor.Def>(); gameObject.AddOrGetDef <BlinkMonitor.Def>(); gameObject.AddOrGetDef <ConversationMonitor.Def>(); gameObject.AddOrGet <Sensors>(); gameObject.AddOrGet <Chattable>(); gameObject.AddOrGet <FaceGraph>(); gameObject.AddOrGet <Accessorizer>(); gameObject.AddOrGet <Schedulable>(); LoopingSounds loopingSounds = gameObject.AddOrGet <LoopingSounds>(); loopingSounds.updatePosition = true; gameObject.AddOrGet <AnimEventHandler>(); FactionAlignment factionAlignment = gameObject.AddOrGet <FactionAlignment>(); factionAlignment.Alignment = FactionManager.FactionID.Duplicant; gameObject.AddOrGet <Weapon>(); gameObject.AddOrGet <RangedAttackable>(); gameObject.AddOrGet <CharacterOverlay>(); OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>(); occupyArea.objectLayers = new ObjectLayer[1]; occupyArea.ApplyToCells = false; occupyArea.OccupiedCellsOffsets = new CellOffset[2] { new CellOffset(0, 0), new CellOffset(0, 1) }; gameObject.AddOrGet <Pickupable>(); CreatureSimTemperatureTransfer creatureSimTemperatureTransfer = gameObject.AddOrGet <CreatureSimTemperatureTransfer>(); creatureSimTemperatureTransfer.SurfaceArea = 10f; creatureSimTemperatureTransfer.Thickness = 0.01f; gameObject.AddOrGet <SicknessTrigger>(); gameObject.AddOrGet <ClothingWearer>(); gameObject.AddOrGet <SuitEquipper>(); DecorProvider decorProvider = gameObject.AddOrGet <DecorProvider>(); decorProvider.baseRadius = 3f; decorProvider.isMovable = true; gameObject.AddOrGet <ConsumableConsumer>(); gameObject.AddOrGet <NoiseListener>(); gameObject.AddOrGet <MinionResume>(); DuplicantNoiseLevels.SetupNoiseLevels(); SetupLaserEffects(gameObject); SymbolOverrideController symbolOverrideController = SymbolOverrideControllerUtil.AddToPrefab(gameObject); symbolOverrideController.applySymbolOverridesEveryFrame = true; ConfigureSymbols(gameObject); return(gameObject); }
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 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 static bool Prefix(ComplexFabricator __instance, ref ComplexRecipe recipe, ref List <GameObject> __result) { if (recipe == GeneticSamplerConfig.RECIPE_RECOMBINATION) { Debug.Log("Should recombinate"); var ingredient_0 = recipe.ingredients[0]; Debug.Log(ingredient_0); float amount = ingredient_0.amount; var tag = ingredient_0.material; Storage storage = __instance.buildStorage; Debug.Log(amount); Debug.Log(tag); Debug.Log(storage.items.Count); DebugHelper.LogForEach(storage.items); for (int index = 0; index < storage.items.Count && (double)amount > 0.0; ++index) { GameObject item_0 = storage.items[index]; Debug.Log(item_0); Debug.Log(item_0.HasTag(tag)); if (!((UnityEngine.Object)item_0 == (UnityEngine.Object)null) && item_0.HasTag(tag)) { Debug.Log("About to add traits to add"); var traitsToAdd = GeneticTraits.GeneticTraits.ChooseTraitsFromEggToEgg(item_0).Select(Db.Get().traits.Get); //to the result List <GameObject> gameObjectList = new List <GameObject>(); SimUtil.DiseaseInfo diseaseInfo; diseaseInfo.count = 0; diseaseInfo.idx = (byte)0; float num1 = 0.0f; float num2 = 0.0f; foreach (ComplexRecipe.RecipeElement ingredient in recipe.ingredients) { num2 += ingredient.amount; } foreach (ComplexRecipe.RecipeElement ingredient in recipe.ingredients) { float num3 = ingredient.amount / num2; SimUtil.DiseaseInfo disease_info; float aggregate_temperature; __instance.buildStorage.ConsumeAndGetDisease(ingredient.material, ingredient.amount, out disease_info, out aggregate_temperature); if (disease_info.count > diseaseInfo.count) { diseaseInfo = disease_info; } num1 += aggregate_temperature * num3; } foreach (ComplexRecipe.RecipeElement result in recipe.results) { GameObject first = __instance.buildStorage.FindFirst(result.material); if ((UnityEngine.Object)first != (UnityEngine.Object)null) { Edible component = first.GetComponent <Edible>(); if ((bool)((UnityEngine.Object)component)) { ReportManager.Instance.ReportValue(ReportManager.ReportType.CaloriesCreated, -component.Calories, StringFormatter.Replace((string)UI.ENDOFDAYREPORT.NOTES.CRAFTED_USED, "{0}", component.GetProperName()), (string)UI.ENDOFDAYREPORT.NOTES.CRAFTED_CONTEXT); } } switch (__instance.resultState) { case ComplexFabricator.ResultState.PassTemperature: case ComplexFabricator.ResultState.Heated: GameObject go = GameUtil.KInstantiate(Assets.GetPrefab(result.material), Grid.SceneLayer.Ore, (string)null, 0); int cell = Grid.PosToCell((KMonoBehaviour)__instance); go.transform.SetPosition(Grid.CellToPosCCC(cell, Grid.SceneLayer.Ore) + __instance.outputOffset); PrimaryElement component1 = go.GetComponent <PrimaryElement>(); component1.Units = result.amount; component1.Temperature = __instance.resultState != ComplexFabricator.ResultState.PassTemperature ? __instance.heatedTemperature : num1; go.SetActive(true); float num3 = result.amount / recipe.TotalResultUnits(); component1.AddDisease(diseaseInfo.idx, Mathf.RoundToInt((float)diseaseInfo.count * num3), "ComplexFabricator.CompleteOrder"); go.GetComponent <KMonoBehaviour>().Trigger(748399584, (object)null); var gtc = go.AddOrGet <GeneticTraitComponent>(); gtc.addTraits(traitsToAdd, item_0); gameObjectList.Add(go); if (__instance.storeProduced) { __instance.outStorage.Store(go, false, false, true, false); break; } break; case ComplexFabricator.ResultState.Melted: if (__instance.storeProduced) { float temperature = ElementLoader.GetElement(result.material).lowTemp + (float)(((double)ElementLoader.GetElement(result.material).highTemp - (double)ElementLoader.GetElement(result.material).lowTemp) / 2.0); __instance.outStorage.AddLiquid(ElementLoader.GetElementID(result.material), result.amount, temperature, (byte)0, 0, false, true); break; } break; } if (gameObjectList.Count > 0) { SymbolOverrideController component2 = __instance.GetComponent <SymbolOverrideController>(); if ((UnityEngine.Object)component2 != (UnityEngine.Object)null) { KAnim.Build build = gameObjectList[0].GetComponent <KBatchedAnimController>().AnimFiles[0].GetData().build; KAnim.Build.Symbol symbol = build.GetSymbol((KAnimHashedString)build.name); if (symbol != null) { component2.TryRemoveSymbolOverride((HashedString)"output_tracker", 0); component2.AddSymbolOverride((HashedString)"output_tracker", symbol, 0); } else { Debug.LogWarning((object)(component2.name + " is missing symbol " + build.name)); } } } } __result = gameObjectList; } } return(false); } else { Debug.Log("Should NO recombinate"); return(true); } }