diff options
author | ClxS <slxxls92@gmail.com> | 2016-03-03 09:20:20 +0000 |
---|---|---|
committer | ClxS <slxxls92@gmail.com> | 2016-03-03 09:20:20 +0000 |
commit | 2a9c08e1ad85a28b74b27a3e8d7f568c2f77a38f (patch) | |
tree | e803066b2054ddfeed43ad75819026e18f246be8 /StardewModdingAPI/Inheritance | |
parent | 38bce3315841c66409e02844c86eb7a5e9295565 (diff) | |
parent | 250559d227fa3a8148ad97d75a725ed0a47a0f4f (diff) | |
download | SMAPI-2a9c08e1ad85a28b74b27a3e8d7f568c2f77a38f.tar.gz SMAPI-2a9c08e1ad85a28b74b27a3e8d7f568c2f77a38f.tar.bz2 SMAPI-2a9c08e1ad85a28b74b27a3e8d7f568c2f77a38f.zip |
Merge pull request #1 from Zoryn4163/master
Merge pull request #1 from Zoryn4163/master
Diffstat (limited to 'StardewModdingAPI/Inheritance')
-rw-r--r-- | StardewModdingAPI/Inheritance/SGame.cs | 186 | ||||
-rw-r--r-- | StardewModdingAPI/Inheritance/SGameLocation.cs | 89 | ||||
-rw-r--r-- | StardewModdingAPI/Inheritance/SObject.cs | 100 |
3 files changed, 226 insertions, 149 deletions
diff --git a/StardewModdingAPI/Inheritance/SGame.cs b/StardewModdingAPI/Inheritance/SGame.cs index fdc6f3f7..99db73d9 100644 --- a/StardewModdingAPI/Inheritance/SGame.cs +++ b/StardewModdingAPI/Inheritance/SGame.cs @@ -1,19 +1,12 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.Serialization; -using System.Runtime.Serialization.Formatters.Binary; -using System.Text; -using System.Threading.Tasks; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using StardewValley; using StardewValley.Menus; -using StardewValley.Minigames; namespace StardewModdingAPI.Inheritance { @@ -49,6 +42,21 @@ namespace StardewModdingAPI.Inheritance public GameLocation PreviousGameLocation { get; private set; } public IClickableMenu PreviousActiveMenu { get; private set; } + public Int32 PreviousTimeOfDay { get; private set; } + public Int32 PreviousDayOfMonth { get; private set; } + public String PreviousSeasonOfYear { get; private set; } + public Int32 PreviousYearOfGame { get; private set; } + + public Farmer PreviousFarmer { get; private set; } + + public SGame() + { + if (Program.debug) + { + //SaveGame.serializer. + } + } + protected override void Initialize() { Program.Log("XNA Initialize"); @@ -67,47 +75,18 @@ namespace StardewModdingAPI.Inheritance protected override void Update(GameTime gameTime) { - KStateNow = Keyboard.GetState(); - CurrentlyPressedKeys = KStateNow.GetPressedKeys(); - MStateNow = Mouse.GetState(); - - foreach (Keys k in FramePressedKeys) - Events.InvokeKeyPressed(k); - - if (KStateNow != KStatePrior) - { - Events.InvokeKeyboardChanged(KStateNow); - KStatePrior = KStateNow; - } + UpdateEventCalls(); - if (MStateNow != MStatePrior) + try { - Events.InvokeMouseChanged(MStateNow); - MStatePrior = MStateNow; + base.Update(gameTime); } - - if (Game1.activeClickableMenu != null && Game1.activeClickableMenu != PreviousActiveMenu) + catch (Exception ex) { - Events.InvokeMenuChanged(Game1.activeClickableMenu); - PreviousActiveMenu = Game1.activeClickableMenu; + Program.LogError("An error occured in the base update loop: " + ex); + Console.ReadKey(); } - if (Game1.locations.GetHash() != PreviousGameLocations) - { - Events.InvokeLocationsChanged(Game1.locations); - PreviousGameLocations = Game1.locations.GetHash(); - } - - if (Game1.currentLocation != PreviousGameLocation) - { - Events.InvokeCurrentLocationChanged(Game1.currentLocation); - PreviousGameLocation = Game1.currentLocation; - } - - if (CurrentLocation != null) - CurrentLocation.update(gameTime); - - base.Update(gameTime); Events.InvokeUpdateTick(); PreviouslyPressedKeys = CurrentlyPressedKeys; @@ -118,15 +97,15 @@ namespace StardewModdingAPI.Inheritance base.Draw(gameTime); Events.InvokeDrawTick(); - if (Program.debug) + if (false) { spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); if (CurrentLocation != null) - CurrentLocation.draw(Game1.spriteBatch); + CurrentLocation.draw(spriteBatch); if (player != null && player.position != null) - spriteBatch.DrawString(Game1.dialogueFont, Game1.player.position.ToString(), new Vector2(0, 180), Color.Orange); + spriteBatch.DrawString(dialogueFont, player.position.ToString(), new Vector2(0, 180), Color.Orange); spriteBatch.End(); } @@ -156,24 +135,15 @@ namespace StardewModdingAPI.Inheritance { return ModItems.ElementAt(id).Value.Clone(); } - else - { - Program.LogError("ModItem Dictionary does not contain index: " + id); - return null; - } + Program.LogError("ModItem Dictionary does not contain index: " + id); + return null; } - else + if (ModItems.ContainsKey(id)) { - if (ModItems.ContainsKey(id)) - { - return ModItems[id].Clone(); - } - else - { - Program.LogError("ModItem Dictionary does not contain ID: " + id); - return null; - } + return ModItems[id].Clone(); } + Program.LogError("ModItem Dictionary does not contain ID: " + id); + return null; } public static SGameLocation GetLocationFromName(String name) @@ -184,5 +154,101 @@ namespace StardewModdingAPI.Inheritance } return null; } + + public static SGameLocation LoadOrCreateSGameLocationFromName(String name) + { + if (GetLocationFromName(name) != null) + return GetLocationFromName(name); + GameLocation gl = locations.FirstOrDefault(x => x.name == name); + if (gl != null) + { + Program.LogDebug("A custom location was created for the new name: " + name); + SGameLocation s = SGameLocation.ConstructFromBaseClass(gl); + ModLocations.Add(s); + return s; + } + if (currentLocation != null && currentLocation.name == name) + { + gl = currentLocation; + Program.LogDebug("A custom location was created from the current location for the new name: " + name); + SGameLocation s = SGameLocation.ConstructFromBaseClass(gl); + ModLocations.Add(s); + return s; + } + + Program.LogDebug("A custom location could not be created for: " + name); + return null; + } + + + public void UpdateEventCalls() + { + KStateNow = Keyboard.GetState(); + CurrentlyPressedKeys = KStateNow.GetPressedKeys(); + MStateNow = Mouse.GetState(); + + foreach (Keys k in FramePressedKeys) + Events.InvokeKeyPressed(k); + + if (KStateNow != KStatePrior) + { + Events.InvokeKeyboardChanged(KStateNow); + KStatePrior = KStateNow; + } + + if (MStateNow != MStatePrior) + { + Events.InvokeMouseChanged(MStateNow); + MStatePrior = MStateNow; + } + + if (activeClickableMenu != null && activeClickableMenu != PreviousActiveMenu) + { + Events.InvokeMenuChanged(activeClickableMenu); + PreviousActiveMenu = activeClickableMenu; + } + + if (locations.GetHash() != PreviousGameLocations) + { + Events.InvokeLocationsChanged(locations); + PreviousGameLocations = locations.GetHash(); + } + + if (currentLocation != PreviousGameLocation) + { + Events.InvokeCurrentLocationChanged(currentLocation); + PreviousGameLocation = currentLocation; + } + + if (player != null && player != PreviousFarmer) + { + Events.InvokeFarmerChanged(player); + PreviousFarmer = player; + } + + if (timeOfDay != PreviousTimeOfDay) + { + Events.InvokeTimeOfDayChanged(timeOfDay); + PreviousTimeOfDay = timeOfDay; + } + + if (dayOfMonth != PreviousDayOfMonth) + { + Events.InvokeDayOfMonthChanged(dayOfMonth); + PreviousDayOfMonth = dayOfMonth; + } + + if (currentSeason != PreviousSeasonOfYear) + { + Events.InvokeSeasonOfYearChanged(currentSeason); + PreviousSeasonOfYear = currentSeason; + } + + if (year != PreviousYearOfGame) + { + Events.InvokeYearOfGameChanged(year); + PreviousYearOfGame = year; + } + } } }
\ No newline at end of file diff --git a/StardewModdingAPI/Inheritance/SGameLocation.cs b/StardewModdingAPI/Inheritance/SGameLocation.cs index 14d9afa6..0787c0e1 100644 --- a/StardewModdingAPI/Inheritance/SGameLocation.cs +++ b/StardewModdingAPI/Inheritance/SGameLocation.cs @@ -12,91 +12,47 @@ using StardewValley.BellsAndWhistles; namespace StardewModdingAPI.Inheritance { + [Obsolete] public class SGameLocation : GameLocation { public GameLocation BaseGameLocation { get; private set; } public SerializableDictionary<Vector2, SObject> ModObjects { get; set; } - public static SGameLocation ConstructFromBaseClass(GameLocation baseClass) + public static SGameLocation ConstructFromBaseClass(GameLocation baseClass, bool copyAllData = false) { SGameLocation s = new SGameLocation(); s.BaseGameLocation = baseClass; - s.ModObjects = new SerializableDictionary<Vector2, SObject>(); + s.name = baseClass.name; + + Program.LogDebug("CONSTRUCTED: " + s.name); - foreach (var v in baseClass.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) + if (copyAllData) { - try + foreach (var v in baseClass.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) { - var fi = s.GetType().GetField(v.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); - if (fi != null && !fi.IsStatic) + try { - fi.SetValue(s, v.GetValue(baseClass)); - //Console.WriteLine("SET {0} ON {1} TO {2}", fi.Name, s.name, v.GetValue(baseClass)); + var fi = s.GetType().GetField(v.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + if (fi != null && !fi.IsStatic) + { + fi.SetValue(s, v.GetValue(baseClass)); + //Console.WriteLine("SET {0} ON {1} TO {2}", fi.Name, s.name, v.GetValue(baseClass)); + } + } + catch (Exception ex) + { + Program.LogError(ex); } - } - catch (Exception ex) - { - Program.LogError(ex); } } - //s.IsFarm = baseClass.IsFarm; - //s.IsOutdoors = baseClass.IsOutdoors; - //s.LightLevel = baseClass.LightLevel; - //s.Map = baseClass.Map; - //s.objects = baseClass.objects; - //s.temporarySprites = baseClass.temporarySprites; - - /* - s.actionObjectForQuestionDialogue = baseClass.actionObjectForQuestionDialogue; - s.characters = baseClass.characters; - s.critters = (List<Critter>)typeof(GameLocation).GetField("critters", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(baseClass); - s.currentEvent = baseClass.currentEvent; - s.debris = baseClass.debris; - s.doorSprites = baseClass.doorSprites; - s.doors = baseClass.doors; - s.farmers = baseClass.farmers; - s.fishSplashAnimation = baseClass.fishSplashAnimation; - s.fishSplashPoint = baseClass.fishSplashPoint; - s.forceViewportPlayerFollow = baseClass.forceViewportPlayerFollow; - s.ignoreDebrisWeather = baseClass.ignoreDebrisWeather; - s.ignoreLights = baseClass.ignoreLights; - s.ignoreOutdoorLighting = baseClass.ignoreOutdoorLighting; - s.isFarm = baseClass.isFarm; - s.isOutdoors = baseClass.isOutdoors; - s.isStructure = baseClass.isStructure; - s.largeTerrainFeatures = baseClass.largeTerrainFeatures; - s.lastQuestionKey = baseClass.lastQuestionKey; - s.lastTouchActionLocation = baseClass.lastTouchActionLocation; - s.lightGlows = baseClass.lightGlows; - s.map = baseClass.map; - s.name = baseClass.name; - s.numberOfSpawnedObjectsOnMap = baseClass.numberOfSpawnedObjectsOnMap; - s.objects = baseClass.objects; - s.orePanAnimation = baseClass.orePanAnimation; - s.orePanPoint = baseClass.orePanPoint; - s.projectiles = baseClass.projectiles; - s.temporarySprites = baseClass.temporarySprites; - s.terrainFeatures = baseClass.terrainFeatures; - s.uniqueName = baseClass.uniqueName; - s.warps = baseClass.warps; - s.wasUpdated = (bool)typeof(GameLocation).GetField("wasUpdated", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(baseClass); - s.waterAnimationIndex = baseClass.waterAnimationIndex; - s.waterAnimationTimer = baseClass.waterAnimationTimer; - s.waterColor = baseClass.waterColor; - s.waterTileFlip = baseClass.waterTileFlip; - s.waterTiles = baseClass.waterTiles; - */ - - - return s; } - public static List<SGameLocation> ConvertGameLocations(List<GameLocation> baseGameLocations) + public static List<SGameLocation> ConstructFromBaseClasses(List<GameLocation> baseGameLocations, bool copyAllData = false) { - return baseGameLocations.Select(ConstructFromBaseClass).ToList(); + return baseGameLocations.Select(gl => ConstructFromBaseClass(gl, copyAllData)).ToList(); } public virtual void update(GameTime gameTime) @@ -110,5 +66,10 @@ namespace StardewModdingAPI.Inheritance v.Value.draw(b, (int)v.Key.X, (int)v.Key.Y, 0.999f, 1); } } + + public SGameLocation() + { + ModObjects = new SerializableDictionary<Vector2, SObject>(); + } } } diff --git a/StardewModdingAPI/Inheritance/SObject.cs b/StardewModdingAPI/Inheritance/SObject.cs index 97d2fa41..5c80cd52 100644 --- a/StardewModdingAPI/Inheritance/SObject.cs +++ b/StardewModdingAPI/Inheritance/SObject.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Xml.Serialization; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using StardewValley; @@ -12,7 +13,10 @@ namespace StardewModdingAPI.Inheritance { public class SObject : StardewValley.Object { - public override String Name { get; set; } + public override String Name { + get { return name; } + set { name = value; } + } public String Description { get; set; } public Texture2D Texture { get; set; } public String CategoryName { get; set; } @@ -29,9 +33,18 @@ namespace StardewModdingAPI.Inheritance public Boolean FlaggedForPickup { get; set; } + public Vector2 CurrentMouse { get; protected set; } + public Vector2 PlacedAt { get; protected set; } + + public override int Stack + { + get { return stack; } + set { stack = value; } + } + public SObject() { - Name = "Modded Item Name"; + name = "Modded Item Name"; Description = "Modded Item Description"; CategoryName = "Modded Item Category"; Category = 4163; @@ -39,6 +52,9 @@ namespace StardewModdingAPI.Inheritance IsPassable = false; IsPlaceable = false; boundingBox = new Rectangle(0, 0, 64, 64); + MaxStackSize = 999; + + type = "interactive"; } public override string getDescription() @@ -48,13 +64,19 @@ namespace StardewModdingAPI.Inheritance public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1) { - if (Texture != null) - spriteBatch.Draw(Texture, new Vector2(x, y), new Color(255, 255, 255, 255f * alpha)); + { + int targSize = Game1.tileSize; + + Vector2 local = Game1.GlobalToLocal(Game1.viewport, new Vector2(x,y)); + Rectangle targ = new Rectangle((int)local.X, (int)local.Y, targSize, targSize); + spriteBatch.Draw(Texture, targ, null, new Color(255, 255, 255, 255f * alpha)); + } } public override void draw(SpriteBatch spriteBatch, int xNonTile, int yNonTile, float layerDepth, float alpha = 1) { + Program.LogInfo("THIS DRAW FUNCTION IS NOT IMPLEMENTED I WANT TO KNOW WHERE IT IS CALLED"); return; try { @@ -181,34 +203,62 @@ namespace StardewModdingAPI.Inheritance return this.Clone(); } + public override void actionWhenBeingHeld(Farmer who) + { + Point p = Game1.getMousePosition(); + CurrentMouse = new Vector2((p.X / Game1.tileSize), (p.Y / Game1.tileSize)); + Program.LogInfo(canBePlacedHere(Game1.currentLocation, CurrentMouse)); + base.actionWhenBeingHeld(who); + } + + public override bool canBePlacedHere(GameLocation l, Vector2 tile) + { + Program.LogInfo(CurrentMouse.ToString().Replace("{", "").Replace("}", "")); + if (!l.objects.ContainsKey(tile)) + return true; + + return false; + } + public override bool placementAction(GameLocation location, int x, int y, Farmer who = null) { - SGameLocation s = SGame.GetLocationFromName(location.name); + if (Game1.didPlayerJustRightClick()) + return false; - if (s.GetHashCode() != SGame.CurrentLocation.GetHashCode()) - { - Program.LogError("HASH DIFFERENCE: " + s.GetHashCode() + " | " + SGame.ModLocations[SGame.ModLocations.IndexOf(SGame.ModLocations.First(z => z.name == location.name))].GetHashCode() + " | " + SGame.CurrentLocation.GetHashCode()); - Console.ReadKey(); - } + x = (x / Game1.tileSize) * Game1.tileSize; + y = (y / Game1.tileSize) * Game1.tileSize; - Console.Title = (this.GetHashCode() + " PLACEMENT"); + Vector2 key = new Vector2(x, y); - if (s != null) - { - Vector2 index1 = new Vector2(x - (Game1.tileSize / 2), y - (Game1.tileSize / 2)); - if (!s.ModObjects.ContainsKey(index1)) - { - s.ModObjects.Add(index1, this); - Game1.player.position = index1; - return true; - } - } - else - { - Program.LogError("No SGameLocation could be found for the supplied GameLocation!"); + if (!canBePlacedHere(location, key)) return false; + + SObject s = Clone(); + + s.PlacedAt = key; + s.boundingBox = new Rectangle(x / Game1.tileSize * Game1.tileSize, y / Game1.tileSize * Game1.tileSize, this.boundingBox.Width, this.boundingBox.Height); + + location.objects.Add(key, s); + Program.LogInfo("{0} - {1}", this.GetHashCode(), s.GetHashCode()); + + return true; + } + + public override void actionOnPlayerEntry() + { + //base.actionOnPlayerEntry(); + } + + public override void drawPlacementBounds(SpriteBatch spriteBatch, GameLocation location) + { + if (canBePlacedHere(location, CurrentMouse)) + { + int targSize = Game1.tileSize; + + int x = Game1.oldMouseState.X + Game1.viewport.X; + int y = Game1.oldMouseState.Y + Game1.viewport.Y; + spriteBatch.Draw(Game1.mouseCursors, new Vector2((float)(x / Game1.tileSize * Game1.tileSize - Game1.viewport.X), (float)(y / Game1.tileSize * Game1.tileSize - Game1.viewport.Y)), new Microsoft.Xna.Framework.Rectangle?(new Microsoft.Xna.Framework.Rectangle(Utility.playerCanPlaceItemHere(location, (Item)this, x, y, Game1.player) ? 194 : 210, 388, 16, 16)), Color.White, 0.0f, Vector2.Zero, (float)Game1.pixelZoom, SpriteEffects.None, 0.01f); } - return false; } } }
\ No newline at end of file |