diff --git a/GeneralMods/Revitalize/Framework/Objects/ResourceManager.cs b/GeneralMods/Revitalize/Framework/Objects/ResourceManager.cs index 59e65565..bcd10b3e 100644 --- a/GeneralMods/Revitalize/Framework/Objects/ResourceManager.cs +++ b/GeneralMods/Revitalize/Framework/Objects/ResourceManager.cs @@ -104,5 +104,34 @@ namespace Revitalize.Framework.Objects return OBJ.canBePlacedHere(Location, TilePosition); } + + //~~~~~~~~~~~~~~~~~~~~~~~// + // Mine ore spawn code // + //~~~~~~~~~~~~~~~~~~~~~~~// + + #region + public void spawnOreInMine() + { + int floorLevel = LocationUtilities.CurrentMineLevel(); + if(floorLevel>=1 && floorLevel <= 9) + { + int amount = Game1.random.Next(1, 10); //Change this to be a frequency table or something. + List openTiles = LocationUtilities.GetOpenObjectTiles(Game1.player.currentLocation, (OreVeinObj)this.ores["Test"].getOne()); + + for(int i = 0; i <= amount; i++) + { + int position = Game1.random.Next(openTiles.Count); + this.spawnOreVein("Test", openTiles[position]); + } + ModCore.log("Spawned :" + amount + " pancake test ores!"); + } + } + + public void OnPlayerLocationChanged(object o,EventArgs playerWarped) + { + this.spawnOreInMine(); + } + + #endregion } } diff --git a/GeneralMods/Revitalize/Framework/Objects/Resources/OreVeins/OreVeinTile.cs b/GeneralMods/Revitalize/Framework/Objects/Resources/OreVeins/OreVeinTile.cs index 46fbe6fe..d4c3e09a 100644 --- a/GeneralMods/Revitalize/Framework/Objects/Resources/OreVeins/OreVeinTile.cs +++ b/GeneralMods/Revitalize/Framework/Objects/Resources/OreVeins/OreVeinTile.cs @@ -131,7 +131,7 @@ namespace Revitalize.Framework.Objects.Resources.OreVeins Item newItem = this.resourceInfo.droppedItem.getOne(); for(int i = 0; i < amount; i++) { - Game1.createItemDebris(newItem, this.TileLocation*Game1.tileSize, Game1.random.Next(0, 3), this.location); + Game1.createItemDebris(newItem.getOne(), this.TileLocation*Game1.tileSize, Game1.random.Next(0, 3), this.location); } if (this.location != null) { diff --git a/GeneralMods/Revitalize/Framework/Utilities/LocationUtilities.cs b/GeneralMods/Revitalize/Framework/Utilities/LocationUtilities.cs new file mode 100644 index 00000000..a1133c33 --- /dev/null +++ b/GeneralMods/Revitalize/Framework/Utilities/LocationUtilities.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using Revitalize.Framework.Objects; +using StardewValley; + +namespace Revitalize.Framework.Utilities +{ + public class LocationUtilities + { + /// + /// Checks to see if the player is in the regular mine. + /// + /// + public static bool IsPlayerInMine() + { + if (Game1.player.currentLocation.Name.StartsWith("UndergroundMine")) + { + return true; + } + return false; + } + /// + /// Checks to see if the player is in skull cave. + /// + /// + public static bool IsPlayerInSkullCave() + { + if (Game1.player.currentLocation.Name == "SkullCave" || Game1.player.currentLocation.Name.StartsWith("SkullCave")) + { + return true; + } + return false; + } + + /// + /// Gets the current mine level for the player. If the player is not in the mine this is -1. + /// + /// + public static int CurrentMineLevel() + { + if (IsPlayerInMine()) + { + return (Game1.player.currentLocation as StardewValley.Locations.MineShaft).mineLevel; + } + else + { + return -1; + } + } + + /// + /// Gets the tile width and height for the map. + /// + /// + /// + public static Vector2 GetLocationTileDimensions(GameLocation location) + { + Vector2 dimensions = new Vector2(location.Map.GetLayer("Back").LayerWidth, location.Map.GetLayer("Back").LayerHeight); + ModCore.log("Dimensions of map is: " + dimensions); + return dimensions; + } + + /// + /// Gets all open positions for this location for this object. + /// + /// + /// + /// + public static List GetOpenObjectTiles(GameLocation Location,MultiTiledObject TestObject) + { + Vector2 dimensions = GetLocationTileDimensions(Location); + List openTiles = new List(); + for(int i = 0; i < dimensions.X; i++) + { + for(int j = 0; j < dimensions.Y; j++) + { + Vector2 tile = new Vector2(i, j); + if (TestObject.canBePlacedHere(Location, tile)) + { + openTiles.Add(tile); + } + } + } + return openTiles; + } + } +} diff --git a/GeneralMods/Revitalize/ModCore.cs b/GeneralMods/Revitalize/ModCore.cs index 0dd2c356..aa1326c6 100644 --- a/GeneralMods/Revitalize/ModCore.cs +++ b/GeneralMods/Revitalize/ModCore.cs @@ -198,11 +198,7 @@ namespace Revitalize this.createDirectories(); this.initailizeComponents(); - ModHelper.Events.GameLoop.SaveLoaded += this.GameLoop_SaveLoaded; - ModHelper.Events.GameLoop.TimeChanged += this.GameLoop_TimeChanged; - ModHelper.Events.GameLoop.UpdateTicked += this.GameLoop_UpdateTicked; - ModHelper.Events.GameLoop.ReturnedToTitle += this.GameLoop_ReturnedToTitle; - ModHelper.Events.Input.ButtonPressed += this.Input_ButtonPressed; + playerInfo = new PlayerInfo(); TextureManager.AddTextureManager(Manifest, "Furniture"); @@ -229,7 +225,12 @@ namespace Revitalize Serializer = new Serializer(); ObjectsToDraw = new Dictionary(); - + ModHelper.Events.GameLoop.SaveLoaded += this.GameLoop_SaveLoaded; + ModHelper.Events.GameLoop.TimeChanged += this.GameLoop_TimeChanged; + ModHelper.Events.GameLoop.UpdateTicked += this.GameLoop_UpdateTicked; + ModHelper.Events.GameLoop.ReturnedToTitle += this.GameLoop_ReturnedToTitle; + ModHelper.Events.Input.ButtonPressed += this.Input_ButtonPressed; + ModHelper.Events.Player.Warped += ObjectManager.resources.OnPlayerLocationChanged; } private void Input_ButtonPressed(object sender, StardewModdingAPI.Events.ButtonPressedEventArgs e) diff --git a/GeneralMods/Revitalize/Revitalize.csproj b/GeneralMods/Revitalize/Revitalize.csproj index ceaf2c71..9c7ea4fe 100644 --- a/GeneralMods/Revitalize/Revitalize.csproj +++ b/GeneralMods/Revitalize/Revitalize.csproj @@ -136,6 +136,7 @@ +