Example #1
0
        public void balanceSpawning()
        {
            int    numBugs    = AllPossibleHomesByBug.Keys.Count;
            double sumRarity  = BugCatchingMod.AllBugs.Where(bug => AllPossibleHomesByBug.ContainsKey(bug.Id)).Aggregate(0.0, (acc, bug) => acc + (1f - bug.Rarity));
            int    nTotalBugs = (int)Math.Floor(numBugs * sumRarity);

            Log.info($"location has ({nTotalBugs}) total bugs with a sumRarity of ({sumRarity})");

            foreach (KeyValuePair <string, List <Vector2> > kvp in AllPossibleHomesByBug)
            {
                CritterEntry   critterEntry           = CritterEntry.critters[kvp.Key];
                List <Vector2> possibleSpawnLocations = new List <Vector2>();
                possibleSpawnLocations = kvp.Value;
                int nCritterSpawned = (int)Math.Ceiling(critterEntry.BugModel.Rarity * nTotalBugs);
                Log.info($"({nCritterSpawned}) {critterEntry.BugModel.Name} will spawn");
                if (possibleSpawnLocations.Count > 0)
                {
                    for (int i = 0; i <= nCritterSpawned; i++)
                    {
                        Vector2 tile = possibleSpawnLocations.PopRandom();
                        Log.info($"Adding {critterEntry.BugModel.Name} at location {tile}");
                        CritterLocation critterLocation = new CritterLocation(critterEntry)
                        {
                            tilePosition = tile
                        };
                        registerCritterHome(critterLocation);
                    }
                }
                else
                {
                    Log.error($"{critterEntry.BugModel.Name} lacks Suitable Housing");
                }
            }
        }
Example #2
0
        public CritterLocation getCritterHome(string layerName, Vector2 tile)
        {
            CritterLocation locationEntry = new CritterLocation();

            locationEntry = CritterHomes.Find(c => c.layerName == layerName && c.tilePosition == tile);
            return(locationEntry);
        }
Example #3
0
 public void addDisturbableHome(CritterLocation critterLocationEntry)
 {
     if (critterLocationEntry.CritterEntry.Classification == "Digger")
     {
         Location.setTileProperty((int)critterLocationEntry.tilePosition.X, (int)critterLocationEntry.tilePosition.Y, "Back", "Diggable", "T");
     }
     else if (critterLocationEntry.CritterEntry.Behavior.DisturbableHome)
     {
         this.Location.Map.addTouchAction(critterLocationEntry.tilePosition, "disturbBug", "");
     }
 }
Example #4
0
        public bool DisturbBug(string action, GameLocation location, Vector2 tile, string layerName)
        {
            Log.debug($"{action} | {location} | {tile} | {layerName}");
            bool flag = false;

            CritterLocations CritterLocator  = AllCritterLocations.Where(l => l.Location == Game1.currentLocation).Single();
            CritterLocation  critterLocation = CritterLocator.getCritterHome(layerName, tile);

            if (critterLocation != null)
            {
                CritterLocator.activateCritter(critterLocation);
                flag = true;
            }

            return(flag);
        }
Example #5
0
        public void activateCritter(CritterLocation critterLocationEntry)
        {
            if (critterLocationEntry == null)
            {
                Log.error("cannot activate; null critterLocationEntry");
                return;
            }

            CritterEntry critterEntry = CritterEntry.critters.Find(ce => ce.Value == critterLocationEntry.CritterEntry).Value;

            if (critterEntry == null)
            {
                Log.error("cannot activate; null critterEntry");
                return;
            }
            Location.addCritter(critterEntry.makeCritter(critterLocationEntry.tilePosition));
            CritterHomes.Remove(critterLocationEntry);
        }
Example #6
0
 public void registerCritterHome(CritterLocation critterLocation)
 {
     Log.info($"Registering critterLocation {Location} {critterLocation.layerName} {critterLocation.tilePosition} {critterLocation.CritterEntry}");
     CritterHomes.AddOrReplace(critterLocation);
 }