Exemplo n.º 1
0
 public static void RegisterRange(Identifiable.Id[] ids, SlimeEat.FoodGroup group)
 {
     foreach (Identifiable.Id id in ids)
     {
         Register(id, group);
     }
 }
Exemplo n.º 2
0
 public static void RegisterIdRange(this SlimeEat.FoodGroup foodGroup, Identifiable.Id[] idRange)
 {
     foreach (Identifiable.Id id in idRange)
     {
         foodGroup.RegisterId(id);
     }
 }
Exemplo n.º 3
0
 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);*/
 }
Exemplo n.º 4
0
 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);
     }
 }
Exemplo n.º 5
0
 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
         });
     }
 }
Exemplo n.º 6
0
        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();
        }
Exemplo n.º 7
0
 public static void AddRange(this SlimeEat.FoodGroup group, Identifiable.Id[] ids) => RegisterRange(ids, group);
Exemplo n.º 8
0
 public static void Add(this SlimeEat.FoodGroup group, Identifiable.Id id) => Register(id, group);
Exemplo n.º 9
0
        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();
            }
        }
Exemplo n.º 10
0
 public static void RegisterToFoodGroup(this Identifiable.Id id, SlimeEat.FoodGroup foodGroup) => RegisterId(foodGroup, id);