public static void RegisterRange(Identifiable.Id[] ids, SlimeEat.FoodGroup group) { foreach (Identifiable.Id id in ids) { Register(id, group); } }
public static void RegisterIdRange(this SlimeEat.FoodGroup foodGroup, Identifiable.Id[] idRange) { foreach (Identifiable.Id id in idRange) { foodGroup.RegisterId(id); } }
public static void RegisterFoodGroup(SlimeEat.FoodGroup group, HashSet <Identifiable.Id> hashSet) { /*if (!FOOD_GROUPS.ContainsKey(group)) * { * GuuCore.LOGGER.LogError($"The food group {group} is already registered"); * return; * } * * FOOD_GROUPS.Add(group, hashSet);*/ }
public static void RegisterId(this SlimeEat.FoodGroup foodGroup, Identifiable.Id id) { if (!SlimeEat.foodGroupIds.ContainsKey(foodGroup)) { SlimeEat.foodGroupIds.Add(foodGroup, new Identifiable.Id[] { id }); } else { SlimeEat.foodGroupIds[foodGroup] = SlimeEat.foodGroupIds[foodGroup].AddToArray(id); } }
public static void Register(Identifiable.Id id, SlimeEat.FoodGroup group) { if (FOOD_GROUPS.ContainsKey(group)) { if (!FOOD_GROUPS[group].Contains(id)) { FOOD_GROUPS[group].Add(id); } } else { FOOD_GROUPS.Add(group, new HashSet <Identifiable.Id>(Identifiable.idComparer) { id }); } }
private void RandomizeSlimeDiets(System.Random rand) { if (!diet_enabled) { return; } // Build list of food items that cannot be set as favorite // List <Identifiable.Id> restrictedFavorites = new List <Identifiable.Id>(); if (!diet_allowElderFavorite) { restrictedFavorites.Add(Identifiable.Id.ELDER_HEN); restrictedFavorites.Add(Identifiable.Id.ELDER_ROOSTER); } if (!diet_allowGildedGingerFavorite) { restrictedFavorites.Add(Identifiable.Id.GINGER_VEGGIE); } if (!diet_allowKookadobaFavorite) { restrictedFavorites.Add(Identifiable.Id.KOOKADOBA_FRUIT); } if (!diet_allowTofuFavorite) { restrictedFavorites.Add(Identifiable.Id.SPICY_TOFU); } // Build list of allowed slime & largo types // SlimeDefinitions slimeDefinitions = SRSingleton <GameContext> .Instance.SlimeDefinitions; List <Identifiable.Id> allowedSlimes = new List <Identifiable.Id>(Identifiable.EATERS_CLASS); //remove slimes from the list that are special cases or have no diet allowedSlimes.Remove(Identifiable.Id.FIRE_SLIME); allowedSlimes.Remove(Identifiable.Id.GLITCH_SLIME); allowedSlimes.Remove(Identifiable.Id.GLITCH_TARR_SLIME); allowedSlimes.Remove(Identifiable.Id.PUDDLE_SLIME); allowedSlimes.Remove(Identifiable.Id.QUICKSILVER_SLIME); allowedSlimes.Remove(Identifiable.Id.TARR_SLIME); //remove slimes as specified by options if (!diet_changeGoldSlimeDiet) { allowedSlimes.Remove(Identifiable.Id.GOLD_SLIME); } if (!diet_changeLuckySlimeDiet) { allowedSlimes.Remove(Identifiable.Id.LUCKY_SLIME); } if (!diet_changePinkSlimeDiet) { allowedSlimes.Remove(Identifiable.Id.PINK_SLIME); } // Handle base slime types // IEnumerable <Identifiable.Id> baseSlimes = from slime in allowedSlimes where slime.ToString().EndsWith("_SLIME") select slime; foreach (Identifiable.Id slime in baseSlimes) { SlimeDefinition currSlime = slimeDefinitions.GetSlimeByIdentifiableId(slime); Log("Slime: " + currSlime); //set new food group SlimeEat.FoodGroup newFoodGroup = PickRandom(VALID_FOOD_GROUPS, rand); currSlime.Diet.MajorFoodGroups = new SlimeEat.FoodGroup[] { newFoodGroup }; Log("Food group: " + newFoodGroup.ToString()); //set new favorite food Identifiable.Id newFavoriteFood = Identifiable.Id.NONE; while (newFavoriteFood == Identifiable.Id.NONE || restrictedFavorites.Contains(newFavoriteFood)) { IEnumerable <Identifiable.Id> idClass = null; if (newFoodGroup == SlimeEat.FoodGroup.FRUIT) { idClass = Identifiable.FRUIT_CLASS; } else if (newFoodGroup == SlimeEat.FoodGroup.VEGGIES) { idClass = Identifiable.VEGGIE_CLASS; } else if (newFoodGroup == SlimeEat.FoodGroup.MEAT) { idClass = Identifiable.MEAT_CLASS; } else { Log("Invalid food group in RandomizeSlimeDiets. Applying fallback..."); newFavoriteFood = Identifiable.Id.POGO_FRUIT; break; } newFavoriteFood = PickRandom(idClass, rand); } Log("Favorite food: " + newFavoriteFood.ToString()); currSlime.Diet.Favorites = new Identifiable.Id[] { newFavoriteFood }; } // Handle largo types // IEnumerable <Identifiable.Id> largos = from largo in allowedSlimes where largo.ToString().EndsWith("_LARGO") select largo; foreach (Identifiable.Id largo in largos) { SlimeDefinition currLargo = slimeDefinitions.GetSlimeByIdentifiableId(largo); if (currLargo.IsLargo && currLargo.BaseSlimes.Length == 2) //coherence check { currLargo.Diet = SlimeDiet.Combine(currLargo.BaseSlimes[0].Diet, currLargo.BaseSlimes[1].Diet); } else { Log("Non-largo coming through largo diet randomization? Id: " + largo.ToString()); } } //refresh the EatMap of every slime definition (apply the changes, essentially) slimeDefinitions.RefreshDefinitions(); }
public static void AddRange(this SlimeEat.FoodGroup group, Identifiable.Id[] ids) => RegisterRange(ids, group);
public static void Add(this SlimeEat.FoodGroup group, Identifiable.Id id) => Register(id, group);
public static void Postfix(SlimeEat __instance, ref Identifiable.Id[] __result, SlimeEat.FoodGroup group) { if (FoodGroupRegistry.FOOD_GROUPS.ContainsKey(group)) { List <Identifiable.Id> foodGroupIds; if (__result != null) { foodGroupIds = __result.ToList(); } else { foodGroupIds = new List <Identifiable.Id>(); } foreach (Identifiable.Id id in FoodGroupRegistry.FOOD_GROUPS[group]) { if (!foodGroupIds.Contains(id)) { foodGroupIds.Add(id); } } __result = foodGroupIds.ToArray(); } }
public static void RegisterToFoodGroup(this Identifiable.Id id, SlimeEat.FoodGroup foodGroup) => RegisterId(foodGroup, id);