// Injects the favorites into the slime diet or adapts if present private static void InjectFavoriteDiet(Identifiable.Id slime, SlimeDiet diet, Identifiable.Id slimeB = Identifiable.Id.NONE) { if (!FAVORITES.ContainsKey(slime)) { return; } foreach (Identifiable.Id fav in FAVORITES[slime]) { bool found = false; foreach (SlimeDiet.EatMapEntry entry in diet.EatMap.Where(entry => entry.eats == fav)) { entry.isFavorite = true; entry.favoriteProductionCount = SlimeUtils.DEFAULT_FAV_COUNT; found = true; } if (found) { continue; } diet.EatMap.Add(new SlimeDiet.EatMapEntry { eats = fav, isFavorite = true, favoriteProductionCount = SlimeUtils.DEFAULT_FAV_COUNT, driver = SlimeEmotions.Emotion.HUNGER, minDrive = SlimeUtils.EAT_MIN_DRIVE, producesId = SlimeUtils.SlimeToPlort(slime) }); if (slimeB != Identifiable.Id.NONE) { diet.EatMap.Add(new SlimeDiet.EatMapEntry { eats = fav, isFavorite = true, favoriteProductionCount = SlimeUtils.DEFAULT_FAV_COUNT, driver = SlimeEmotions.Emotion.HUNGER, minDrive = SlimeUtils.EAT_MIN_DRIVE, producesId = SlimeUtils.SlimeToPlort(slimeB) }); } } }
/// <summary> /// Adds a specific largo to a slime /// </summary> /// <param name="slimeA">The slime A to add to</param> /// <param name="slimeB">The slime B to add to</param> /// <param name="result">The result to generate</param> public static void AddSpecificLargo(Identifiable.Id slimeA, Identifiable.Id slimeB, Identifiable.Id result) { Tuple <Identifiable.Id, Identifiable.Id> mixA = Tuple.Create(SlimeUtils.SlimeToPlort(slimeB), result); Tuple <Identifiable.Id, Identifiable.Id> mixB = Tuple.Create(SlimeUtils.SlimeToPlort(slimeA), result); if (SPEC_LARGOS.ContainsKey(slimeA)) { SPEC_LARGOS[slimeA] = mixA; } else { SPEC_LARGOS.Add(slimeA, mixA); } if (SPEC_LARGOS.ContainsKey(slimeB)) { SPEC_LARGOS[slimeB] = mixB; } else { SPEC_LARGOS.Add(slimeB, mixB); } }
// Injects the Kookadoba Diets into the slimes private static void InjectKookadobaDiet(Identifiable.Id slime, SlimeDiet diet) { }
public static void AddPlortEntry(Identifiable.Id plortId) { AddPlortEntry(plortId, new ProgressDirector.ProgressType[0]); }
public static void RegisterPlort(Identifiable.Id id, float value, float fullSaturationValue) { AddPlortEntry(id); AddEconomyEntry(id, value, fullSaturationValue); }
// To setup the controller internal static void Setup() { MissingImage = SRObjects.MissingIcon?.texture; GadgetSite = SRObjects.Get <Sprite>("iconPlaceGadget")?.texture; foreach (string name in Enum.GetNames(typeof(Identifiable.Id))) { Identifiable.Id ID = EnumUtils.Parse <Identifiable.Id>(name); if (toIgnoreIden.Contains(ID)) { continue; } GameObject obj = Identifiable.GORDO_CLASS.Contains(ID) ? ExceptionUtils.IgnoreErrors(() => GameContext.Instance.LookupDirector.GetGordo(ID)) : ExceptionUtils.IgnoreErrors(() => GameContext.Instance.LookupDirector.GetPrefab(ID)); if (obj == null) { continue; } InstallIDMarker(ID, obj); } foreach (string name in Enum.GetNames(typeof(Gadget.Id))) { Gadget.Id ID = EnumUtils.Parse <Gadget.Id>(name); if (toIgnoreGadget.Contains(ID)) { continue; } GameObject obj = ExceptionUtils.IgnoreErrors(() => GameContext.Instance.LookupDirector.GetGadgetDefinition(ID).prefab); if (obj == null) { continue; } InstallGadgetMarker(ID, obj); } foreach (Identifiable found in UnityEngine.Object.FindObjectsOfType <Identifiable>()) { if (found.gameObject.scene.buildIndex == 3) { InstallIDMarker(found.id, found.gameObject); } } foreach (GordoIdentifiable found in UnityEngine.Object.FindObjectsOfType <GordoIdentifiable>()) { if (found.gameObject.scene.buildIndex == 3) { InstallIDMarker(found.id, found.gameObject); } } foreach (Gadget found in UnityEngine.Object.FindObjectsOfType <Gadget>()) { if (found.gameObject.scene.buildIndex == 3) { InstallGadgetMarker(found.id, found.gameObject); } } foreach (GadgetSite found in UnityEngine.Object.FindObjectsOfType <GadgetSite>()) { if (found.gameObject.scene.buildIndex == 3) { found.gameObject.InstallMarker <GadgetSiteMarker>(); } } OnMarkerSetup?.Invoke(); }
/// <summary> /// Checks if there is a prefab for the given identifiable ID /// </summary> /// <param name="dir">The lookup director</param> /// <param name="id">The ID to check</param> public static bool HasPrefab(this LookupDirector dir, Identifiable.Id id) { return(dir.GetPrivateField <Dictionary <Identifiable.Id, GameObject> >("identifiablePrefabDict").ContainsKey(id)); }
/// <summary> /// Adds a new bonus spawn to the list /// </summary> /// <param name="ID">The ID for the spawnable</param> public BushPlantableTemplate AddBonusSpawn(Identifiable.Id ID) { bonusToSpawn.Add(GameContext.Instance.LookupDirector.GetPrefab(ID)); return(this); }
/// <summary> /// Adds a spawn to the list /// </summary> /// <param name="ID">The ID for the spawnable</param> public FruitPlantableTemplate AddSpawn(Identifiable.Id ID) { toSpawn.Add(GameContext.Instance.LookupDirector.GetPrefab(ID)); return(this); }
public static void Postfix(ref bool __result, Identifiable.Id id) { __result = __result || AmmoRegistry.customRefineryResources.Contains(id); }
private static bool IsWater_Prefix(out bool @return, Identifiable.Id id) { @return = IdentifiableHandler.IsWater(id); return(false); }
public static Identifiable.Id CraftLargo(this LookupDirector director, Identifiable.Id slimeA, Identifiable.Id slimeB, Action <SlimeDefinition> extraLargoBehaviour = null, Predicate <Identifiable.Id> canBeTarr = null, Predicate <Identifiable.Id> forceLargo = null) { if (director.LargoExists(slimeA, slimeB)) { return(Identifiable.Id.NONE); } string prefabName = "slime" + slimeA.ToString().Replace("_SLIME", "").ToUpper()[0] + slimeA.ToString().Replace("_SLIME", "").ToLower().Substring(1) + slimeB.ToString().Replace("_SLIME", "").ToUpper()[0] + slimeB.ToString().Replace("_SLIME", "").ToLower().Substring(1); string name = slimeA.ToString().Replace("_SLIME", "") + slimeB.ToString().Replace("_SLIME", "") + "_LARGO"; Identifiable.Id largoID = IdentifiableRegistry.CreateIdentifiableId(EnumPatcher.GetFirstFreeValue(typeof(Identifiable.Id)), name); SlimeDefinitions defs = GameContext.Instance.SlimeDefinitions; SlimeDefinition curr = defs.GetSlimeByIdentifiableId(slimeA); SlimeDefinition other = defs.GetSlimeByIdentifiableId(slimeB); bool largofyState = curr.CanLargofy; curr.CanLargofy = true; if (!other.CanLargofy && !(forceLargo?.Invoke(slimeB) ?? false)) { return(Identifiable.Id.NONE); } bool largofyStateB = other.CanLargofy; other.CanLargofy = true; SlimeDefinition largoDef = defs.GetLargoByBaseSlimes(curr, other); largoDef.IdentifiableId = largoID; curr.CanLargofy = largofyState; other.CanLargofy = largofyStateB; if (!(canBeTarr?.Invoke(slimeB) ?? true)) { largoDef.Diet.EatMap.RemoveAll((entry) => entry.becomesId == Identifiable.Id.TARR_SLIME); largoDef.Diet.EatMap.RemoveAll((entry) => entry.becomesId == Identifiable.Id.GLITCH_TARR_SLIME); } extraLargoBehaviour?.Invoke(largoDef); SlimeTemplate largoTemplate = new SlimeTemplate(prefabName, largoDef).SetVacSize(Vacuumable.Size.LARGE) .SetTranslation(curr.Name + " " + other.Name + " Largo").Create(); LookupRegistry.RegisterIdentifiablePrefab(largoTemplate.ToPrefab()); return(largoID); }
// Check Methods public static bool LargoExists(this LookupDirector director, Identifiable.Id slimeA, Identifiable.Id slimeB) { string nameA = slimeA.ToString().Replace("_SLIME", ""); string nameB = slimeB.ToString().Replace("_SLIME", ""); string largoA = $"{nameA}_{nameB}_LARGO"; string largoB = $"{nameB}_{nameA}_LARGO"; object result = Enum.Parse(typeof(Identifiable.Id), largoA) ?? Enum.Parse(typeof(Identifiable.Id), largoB); return(result != null); }
// Get Component Methods public static Identifiable GetIdentifiable(this LookupDirector director, Identifiable.Id ID) { return(director.GetPrefab(ID).GetComponent <Identifiable>()); }
public static GameObject GetLargoPrefab(this LookupDirector director, Identifiable.Id slimeA, Identifiable.Id slimeB) { Identifiable.Id largo = Identifiable.Id.NONE; string nameA = slimeA.ToString().Replace("_SLIME", ""); string nameB = slimeB.ToString().Replace("_SLIME", ""); string largoA = $"{nameA}_{nameB}_LARGO"; string largoB = $"{nameB}_{nameA}_LARGO"; object result = Enum.Parse(typeof(Identifiable.Id), largoA) ?? Enum.Parse(typeof(Identifiable.Id), largoB); if (result != null) { largo = (Identifiable.Id)result; } return(largo == Identifiable.Id.NONE ? null : director.GetPrefab(largo)); }
public static GordoTemplate MakeStaticGordo(this LookupDirector director, string name, Identifiable.Id gordoID, SlimeDefinition definition, Material[] gordoMaterials) { return(new GordoTemplate(name, gordoID, definition, gordoMaterials).SetTranslation(definition.Name + " Gordo")); }