summaryrefslogtreecommitdiff
path: root/StardewModdingAPI/Inheritance
diff options
context:
space:
mode:
authorZoryn Aaron <zoryn4163@gmail.com>2016-03-02 22:54:37 -0500
committerZoryn Aaron <zoryn4163@gmail.com>2016-03-02 22:54:37 -0500
commit47fecbd81eeecd9244ee2384f99bc224d5475029 (patch)
treea209ac7178474fc7c97b950471618edbb298d1bc /StardewModdingAPI/Inheritance
parent5a33d4c7f2f136fdd821ab46e2a44325e4559627 (diff)
downloadSMAPI-47fecbd81eeecd9244ee2384f99bc224d5475029.tar.gz
SMAPI-47fecbd81eeecd9244ee2384f99bc224d5475029.tar.bz2
SMAPI-47fecbd81eeecd9244ee2384f99bc224d5475029.zip
more events
Diffstat (limited to 'StardewModdingAPI/Inheritance')
-rw-r--r--StardewModdingAPI/Inheritance/SGame.cs197
-rw-r--r--StardewModdingAPI/Inheritance/SGameLocation.cs1
-rw-r--r--StardewModdingAPI/Inheritance/SObject.cs103
3 files changed, 173 insertions, 128 deletions
diff --git a/StardewModdingAPI/Inheritance/SGame.cs b/StardewModdingAPI/Inheritance/SGame.cs
index fbea47bd..27eb3c4b 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,11 @@ 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; }
protected override void Initialize()
@@ -69,53 +67,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;
- }
-
- if (MStateNow != MStatePrior)
- {
- Events.InvokeMouseChanged(MStateNow);
- MStatePrior = MStateNow;
- }
-
- if (Game1.activeClickableMenu != null && Game1.activeClickableMenu != PreviousActiveMenu)
- {
- Events.InvokeMenuChanged(Game1.activeClickableMenu);
- PreviousActiveMenu = Game1.activeClickableMenu;
- }
-
- if (Game1.locations.GetHash() != PreviousGameLocations)
- {
- Events.InvokeLocationsChanged(Game1.locations);
- PreviousGameLocations = Game1.locations.GetHash();
- }
+ UpdateEventCalls();
- if (Game1.currentLocation != PreviousGameLocation)
+ try
{
- Events.InvokeCurrentLocationChanged(Game1.currentLocation);
- PreviousGameLocation = Game1.currentLocation;
+ base.Update(gameTime);
}
-
- if (Game1.player != null && Game1.player != PreviousFarmer)
+ catch (Exception ex)
{
- Events.InvokeFarmerChanged(Game1.player);
- PreviousFarmer = Game1.player;
+ Program.LogError("An error occured in the base update loop: " + ex);
+ Console.ReadKey();
}
- if (CurrentLocation != null)
- CurrentLocation.update(gameTime);
-
- base.Update(gameTime);
Events.InvokeUpdateTick();
PreviouslyPressedKeys = CurrentlyPressedKeys;
@@ -126,15 +89,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();
}
@@ -164,24 +127,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)
@@ -197,30 +151,95 @@ namespace StardewModdingAPI.Inheritance
{
if (GetLocationFromName(name) != null)
return GetLocationFromName(name);
- else
+ GameLocation gl = locations.FirstOrDefault(x => x.name == name);
+ if (gl != null)
{
- GameLocation gl = Game1.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;
- }
- else
- {
- if (Game1.currentLocation != null && Game1.currentLocation.name == name)
- {
- gl = Game1.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;
- }
+ 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;
}
}
}
diff --git a/StardewModdingAPI/Inheritance/SGameLocation.cs b/StardewModdingAPI/Inheritance/SGameLocation.cs
index 50058bff..0787c0e1 100644
--- a/StardewModdingAPI/Inheritance/SGameLocation.cs
+++ b/StardewModdingAPI/Inheritance/SGameLocation.cs
@@ -12,6 +12,7 @@ using StardewValley.BellsAndWhistles;
namespace StardewModdingAPI.Inheritance
{
+ [Obsolete]
public class SGameLocation : GameLocation
{
public GameLocation BaseGameLocation { get; private set; }
diff --git a/StardewModdingAPI/Inheritance/SObject.cs b/StardewModdingAPI/Inheritance/SObject.cs
index 5e36b5b7..9d112859 100644
--- a/StardewModdingAPI/Inheritance/SObject.cs
+++ b/StardewModdingAPI/Inheritance/SObject.cs
@@ -12,7 +12,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 +32,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 +51,9 @@ namespace StardewModdingAPI.Inheritance
IsPassable = false;
IsPlaceable = false;
boundingBox = new Rectangle(0, 0, 64, 64);
+ MaxStackSize = 999;
+
+ type = "interactive";
}
public override string getDescription()
@@ -49,22 +64,20 @@ namespace StardewModdingAPI.Inheritance
public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1)
{
if (Texture != null)
- {
- int targSize = Game1.tileSize;
- int midX = (int) ((x) + 32);
- int midY = (int) ((y) + 32);
-
- int targX = midX - targSize / 2;
- int targY = midY - targSize / 2;
+ {
+ int targSize = Game1.tileSize;
+ int midX = (int) ((x) + 32);
+ int midY = (int) ((y) + 32);
- Rectangle targ = new Rectangle(targX, targY, targSize, targSize);
- spriteBatch.Draw(Texture, targ, null, new Color(255, 255, 255, 255f * alpha), 0, Vector2.Zero, SpriteEffects.None, 0.999f);
- }
+ 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("DRAW ME2");
+ Program.LogInfo("THIS DRAW FUNCTION IS NOT IMPLEMENTED I WANT TO KNOW WHERE IT IS CALLED");
return;
try
{
@@ -191,39 +204,51 @@ namespace StardewModdingAPI.Inheritance
return this.Clone();
}
+ public override void actionWhenBeingHeld(Farmer who)
+ {
+ Point p = Game1.getMousePosition();
+ CurrentMouse = new Vector2(p.X, p.Y);
+ base.actionWhenBeingHeld(who);
+ }
+
+ public override bool canBePlacedHere(GameLocation l, Vector2 tile)
+ {
+ if (!l.objects.ContainsKey(tile))
+ return true;
+
+ return false;
+ }
+
public override bool placementAction(GameLocation location, int x, int y, Farmer who = null)
{
+ x = (x / Game1.tileSize) * Game1.tileSize;
+ y = (y / Game1.tileSize) * Game1.tileSize;
+
Vector2 key = new Vector2(x, y);
- if (!location.objects.ContainsKey(key))
- location.objects.Add(key, this);
- return false;
- SGameLocation s = SGame.GetLocationFromName(location.name);
+ if (!canBePlacedHere(location, key))
+ 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();
- }
+ SObject s = Clone();
- Console.Title = (this.GetHashCode() + " PLACEMENT");
+ s.PlacedAt = key;
+ s.boundingBox = new Rectangle(x / Game1.tileSize * Game1.tileSize, y / Game1.tileSize * Game1.tileSize, this.boundingBox.Width, this.boundingBox.Height);
- 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!");
- return false;
- }
- return false;
+ 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))
+ base.drawPlacementBounds(spriteBatch, location);
}
}
} \ No newline at end of file