summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI/Inheritance
diff options
context:
space:
mode:
Diffstat (limited to 'src/StardewModdingAPI/Inheritance')
-rw-r--r--src/StardewModdingAPI/Inheritance/ItemStackChange.cs18
-rw-r--r--src/StardewModdingAPI/Inheritance/Menus/SBobberBar.cs288
-rw-r--r--src/StardewModdingAPI/Inheritance/Menus/SGameMenu.cs48
-rw-r--r--src/StardewModdingAPI/Inheritance/Menus/SInventoryPage.cs19
-rw-r--r--src/StardewModdingAPI/Inheritance/Minigames/SMinigameBase.cs34
-rw-r--r--src/StardewModdingAPI/Inheritance/SBareObject.cs20
-rw-r--r--src/StardewModdingAPI/Inheritance/SGame.cs1726
-rw-r--r--src/StardewModdingAPI/Inheritance/SObject.cs277
8 files changed, 2430 insertions, 0 deletions
diff --git a/src/StardewModdingAPI/Inheritance/ItemStackChange.cs b/src/StardewModdingAPI/Inheritance/ItemStackChange.cs
new file mode 100644
index 00000000..88fc002e
--- /dev/null
+++ b/src/StardewModdingAPI/Inheritance/ItemStackChange.cs
@@ -0,0 +1,18 @@
+using StardewValley;
+
+namespace StardewModdingAPI.Inheritance
+{
+ public enum ChangeType
+ {
+ Removed,
+ Added,
+ StackChange
+ }
+
+ public class ItemStackChange
+ {
+ public Item Item { get; set; }
+ public int StackChange { get; set; }
+ public ChangeType ChangeType { get; set; }
+ }
+} \ No newline at end of file
diff --git a/src/StardewModdingAPI/Inheritance/Menus/SBobberBar.cs b/src/StardewModdingAPI/Inheritance/Menus/SBobberBar.cs
new file mode 100644
index 00000000..1e424f73
--- /dev/null
+++ b/src/StardewModdingAPI/Inheritance/Menus/SBobberBar.cs
@@ -0,0 +1,288 @@
+using System.Reflection;
+using Microsoft.Xna.Framework;
+using StardewValley.BellsAndWhistles;
+using StardewValley.Menus;
+
+namespace StardewModdingAPI.Inheritance.Menus
+{
+ public class SBobberBar : BobberBar
+ {
+ /// <summary>
+ /// DO NOT CONSTRUCT THIS CLASS
+ /// To retrieve an instance of SBobberBar, use SBobberBar.ConstructFromBaseClass()
+ /// </summary>
+ public SBobberBar(int whichFish, float fishSize, bool treasure, int bobber) : base(whichFish, fishSize, treasure, bobber)
+ {
+ }
+
+ public BobberBar BaseBobberBar { get; private set; }
+
+ /// <summary>
+ /// The green rectangle bar that moves up and down
+ /// </summary>
+ public float bobberPosition
+ {
+ get { return (float) GetBaseFieldInfo("bobberPosition").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("bobberPosition").SetValue(BaseBobberBar, value); }
+ }
+
+ /// <summary>
+ /// The green bar on the right. How close to catching the fish you are
+ /// Range: 0 - 1 | 1 = catch, 0 = fail
+ /// </summary>
+ public float distanceFromCatching
+ {
+ get { return (float) GetBaseFieldInfo("distanceFromCatching").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("distanceFromCatching").SetValue(BaseBobberBar, value); }
+ }
+
+ public float difficulty
+ {
+ get { return (float) GetBaseFieldInfo("difficulty").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("difficulty").SetValue(BaseBobberBar, value); }
+ }
+
+ public int motionType
+ {
+ get { return (int) GetBaseFieldInfo("motionType").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("motionType").SetValue(BaseBobberBar, value); }
+ }
+
+ public int whichFish
+ {
+ get { return (int) GetBaseFieldInfo("whichFish").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("whichFish").SetValue(BaseBobberBar, value); }
+ }
+
+ public float bobberSpeed
+ {
+ get { return (float) GetBaseFieldInfo("bobberSpeed").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("bobberSpeed").SetValue(BaseBobberBar, value); }
+ }
+
+ public float bobberAcceleration
+ {
+ get { return (float) GetBaseFieldInfo("bobberAcceleration").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("bobberAcceleration").SetValue(BaseBobberBar, value); }
+ }
+
+ public float bobberTargetPosition
+ {
+ get { return (float) GetBaseFieldInfo("bobberTargetPosition").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("bobberTargetPosition").SetValue(BaseBobberBar, value); }
+ }
+
+ public float scale
+ {
+ get { return (float) GetBaseFieldInfo("scale").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("scale").SetValue(BaseBobberBar, value); }
+ }
+
+ public float everythingShakeTimer
+ {
+ get { return (float) GetBaseFieldInfo("everythingShakeTimer").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("everythingShakeTimer").SetValue(BaseBobberBar, value); }
+ }
+
+ public float floaterSinkerAcceleration
+ {
+ get { return (float) GetBaseFieldInfo("floaterSinkerAcceleration").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("floaterSinkerAcceleration").SetValue(BaseBobberBar, value); }
+ }
+
+ public float treasurePosition
+ {
+ get { return (float) GetBaseFieldInfo("treasurePosition").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("treasurePosition").SetValue(BaseBobberBar, value); }
+ }
+
+ public float treasureCatchLevel
+ {
+ get { return (float) GetBaseFieldInfo("treasureCatchLevel").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("treasureCatchLevel").SetValue(BaseBobberBar, value); }
+ }
+
+ public float treasureAppearTimer
+ {
+ get { return (float) GetBaseFieldInfo("treasureAppearTimer").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("treasureAppearTimer").SetValue(BaseBobberBar, value); }
+ }
+
+ public float treasureScale
+ {
+ get { return (float) GetBaseFieldInfo("treasureScale").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("treasureScale").SetValue(BaseBobberBar, value); }
+ }
+
+ public bool bobberInBar
+ {
+ get { return (bool) GetBaseFieldInfo("bobberInBar").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("bobberInBar").SetValue(BaseBobberBar, value); }
+ }
+
+ public bool buttonPressed
+ {
+ get { return (bool) GetBaseFieldInfo("buttonPressed").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("buttonPressed").SetValue(BaseBobberBar, value); }
+ }
+
+ public bool flipBubble
+ {
+ get { return (bool) GetBaseFieldInfo("flipBubble").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("flipBubble").SetValue(BaseBobberBar, value); }
+ }
+
+ public bool fadeIn
+ {
+ get { return (bool) GetBaseFieldInfo("fadeIn").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("fadeIn").SetValue(BaseBobberBar, value); }
+ }
+
+ public bool fadeOut
+ {
+ get { return (bool) GetBaseFieldInfo("fadeOut").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("bobberPfadeOutosition").SetValue(BaseBobberBar, value); }
+ }
+
+ /// <summary>
+ /// Whether or not a treasure chest appears
+ /// </summary>
+ public bool treasure
+ {
+ get { return (bool) GetBaseFieldInfo("treasure").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("treasure").SetValue(BaseBobberBar, value); }
+ }
+
+ public bool treasureCaught
+ {
+ get { return (bool) GetBaseFieldInfo("treasureCaught").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("treasureCaught").SetValue(BaseBobberBar, value); }
+ }
+
+ public bool perfect
+ {
+ get { return (bool) GetBaseFieldInfo("perfect").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("perfect").SetValue(BaseBobberBar, value); }
+ }
+
+ public bool bossFish
+ {
+ get { return (bool) GetBaseFieldInfo("bossFish").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("bossFish").SetValue(BaseBobberBar, value); }
+ }
+
+ public int bobberBarHeight
+ {
+ get { return (int) GetBaseFieldInfo("bobberBarHeight").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("bobberBarHeight").SetValue(BaseBobberBar, value); }
+ }
+
+ public int fishSize
+ {
+ get { return (int) GetBaseFieldInfo("fishSize").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("fishSize").SetValue(BaseBobberBar, value); }
+ }
+
+ public int fishQuality
+ {
+ get { return (int) GetBaseFieldInfo("fishQuality").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("fishQuality").SetValue(BaseBobberBar, value); }
+ }
+
+ public int minFishSize
+ {
+ get { return (int) GetBaseFieldInfo("minFishSize").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("minFishSize").SetValue(BaseBobberBar, value); }
+ }
+
+ public int maxFishSize
+ {
+ get { return (int) GetBaseFieldInfo("maxFishSize").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("maxFishSize").SetValue(BaseBobberBar, value); }
+ }
+
+ public int fishSizeReductionTimer
+ {
+ get { return (int) GetBaseFieldInfo("fishSizeReductionTimer").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("fishSizeReductionTimer").SetValue(BaseBobberBar, value); }
+ }
+
+ public int whichBobber
+ {
+ get { return (int) GetBaseFieldInfo("whichBobber").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("whichBobber").SetValue(BaseBobberBar, value); }
+ }
+
+ public Vector2 barShake
+ {
+ get { return (Vector2) GetBaseFieldInfo("barShake").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("barShake").SetValue(BaseBobberBar, value); }
+ }
+
+ public Vector2 fishShake
+ {
+ get { return (Vector2) GetBaseFieldInfo("fishShake").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("fishShake").SetValue(BaseBobberBar, value); }
+ }
+
+ public Vector2 everythingShake
+ {
+ get { return (Vector2) GetBaseFieldInfo("everythingShake").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("everythingShake").SetValue(BaseBobberBar, value); }
+ }
+
+ public Vector2 treasureShake
+ {
+ get { return (Vector2) GetBaseFieldInfo("treasureShake").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("treasureShake").SetValue(BaseBobberBar, value); }
+ }
+
+ public float reelRotation
+ {
+ get { return (float) GetBaseFieldInfo("reelRotation").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("reelRotation").SetValue(BaseBobberBar, value); }
+ }
+
+ public SparklingText sparkleText
+ {
+ get { return (SparklingText) GetBaseFieldInfo("sparkleText").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("sparkleText").SetValue(BaseBobberBar, value); }
+ }
+
+ public float bobberBarPos
+ {
+ get { return (float) GetBaseFieldInfo("bobberBarPos").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("bobberBarPos").SetValue(BaseBobberBar, value); }
+ }
+
+ public float bobberBarSpeed
+ {
+ get { return (float) GetBaseFieldInfo("bobberBarSpeed").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("bobberBarSpeed").SetValue(BaseBobberBar, value); }
+ }
+
+ public float bobberBarAcceleration
+ {
+ get { return (float) GetBaseFieldInfo("bobberBarAcceleration").GetValue(BaseBobberBar); }
+ set { GetBaseFieldInfo("bobberBarAcceleration").SetValue(BaseBobberBar, value); }
+ }
+
+ public static FieldInfo[] PrivateFields => GetPrivateFields();
+
+ public static SBobberBar ConstructFromBaseClass(BobberBar baseClass)
+ {
+ var b = new SBobberBar(0, 0, false, 0) {BaseBobberBar = baseClass};
+ return b;
+ }
+
+ public static FieldInfo[] GetPrivateFields()
+ {
+ return typeof(BobberBar).GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
+ }
+
+ public static FieldInfo GetBaseFieldInfo(string name)
+ {
+ return typeof(BobberBar).GetField(name, BindingFlags.Instance | BindingFlags.NonPublic);
+ }
+ }
+} \ No newline at end of file
diff --git a/src/StardewModdingAPI/Inheritance/Menus/SGameMenu.cs b/src/StardewModdingAPI/Inheritance/Menus/SGameMenu.cs
new file mode 100644
index 00000000..a4d3d8d0
--- /dev/null
+++ b/src/StardewModdingAPI/Inheritance/Menus/SGameMenu.cs
@@ -0,0 +1,48 @@
+using System.Collections.Generic;
+using System.Reflection;
+using StardewValley.Menus;
+
+namespace StardewModdingAPI.Inheritance.Menus
+{
+ public class SGameMenu : GameMenu
+ {
+ public GameMenu BaseGameMenu { get; private set; }
+
+ public List<ClickableComponent> tabs
+ {
+ get { return (List<ClickableComponent>) GetBaseFieldInfo("tabs").GetValue(BaseGameMenu); }
+ set { GetBaseFieldInfo("tabs").SetValue(BaseGameMenu, value); }
+ }
+
+ public List<IClickableMenu> pages
+ {
+ get { return (List<IClickableMenu>) GetBaseFieldInfo("pages").GetValue(BaseGameMenu); }
+ set { GetBaseFieldInfo("pages").SetValue(BaseGameMenu, value); }
+ }
+
+ public static SGameMenu ConstructFromBaseClass(GameMenu baseClass)
+ {
+ var s = new SGameMenu {BaseGameMenu = baseClass};
+ return s;
+ }
+
+ public override void receiveRightClick(int x, int y, bool playSound = true)
+ {
+ if (pages[currentTab] is InventoryPage)
+ {
+ Log.AsyncY("INV SCREEN");
+ }
+ base.receiveRightClick(x, y, playSound);
+ }
+
+ public static FieldInfo[] GetPrivateFields()
+ {
+ return typeof(GameMenu).GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
+ }
+
+ public static FieldInfo GetBaseFieldInfo(string name)
+ {
+ return typeof(GameMenu).GetField(name, BindingFlags.Instance | BindingFlags.NonPublic);
+ }
+ }
+} \ No newline at end of file
diff --git a/src/StardewModdingAPI/Inheritance/Menus/SInventoryPage.cs b/src/StardewModdingAPI/Inheritance/Menus/SInventoryPage.cs
new file mode 100644
index 00000000..436b834d
--- /dev/null
+++ b/src/StardewModdingAPI/Inheritance/Menus/SInventoryPage.cs
@@ -0,0 +1,19 @@
+using StardewValley.Menus;
+
+namespace StardewModdingAPI.Inheritance.Menus
+{
+ public class SInventoryPage : InventoryPage
+ {
+ public SInventoryPage(int x, int y, int width, int height) : base(x, y, width, height)
+ {
+ }
+
+ public InventoryPage BaseInventoryPage { get; private set; }
+
+ public static SInventoryPage ConstructFromBaseClass(InventoryPage baseClass)
+ {
+ var s = new SInventoryPage(0, 0, 0, 0) {BaseInventoryPage = baseClass};
+ return s;
+ }
+ }
+} \ No newline at end of file
diff --git a/src/StardewModdingAPI/Inheritance/Minigames/SMinigameBase.cs b/src/StardewModdingAPI/Inheritance/Minigames/SMinigameBase.cs
new file mode 100644
index 00000000..f30021de
--- /dev/null
+++ b/src/StardewModdingAPI/Inheritance/Minigames/SMinigameBase.cs
@@ -0,0 +1,34 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+using StardewValley.Minigames;
+
+namespace StardewModdingAPI.Inheritance.Minigames
+{
+ internal abstract class SMinigameBase : IMinigame
+ {
+ public abstract bool tick(GameTime time);
+
+ public abstract void receiveLeftClick(int x, int y, bool playSound = true);
+
+ public abstract void leftClickHeld(int x, int y);
+
+ public abstract void receiveRightClick(int x, int y, bool playSound = true);
+
+ public abstract void releaseLeftClick(int x, int y);
+
+ public abstract void releaseRightClick(int x, int y);
+
+ public abstract void receiveKeyPress(Keys k);
+
+ public abstract void receiveKeyRelease(Keys k);
+
+ public abstract void draw(SpriteBatch b);
+
+ public abstract void changeScreenSize();
+
+ public abstract void unload();
+
+ public abstract void receiveEventPoke(int data);
+ }
+} \ No newline at end of file
diff --git a/src/StardewModdingAPI/Inheritance/SBareObject.cs b/src/StardewModdingAPI/Inheritance/SBareObject.cs
new file mode 100644
index 00000000..5bef7b3e
--- /dev/null
+++ b/src/StardewModdingAPI/Inheritance/SBareObject.cs
@@ -0,0 +1,20 @@
+namespace StardewModdingAPI.Inheritance
+{
+ public struct SBareObject
+ {
+ public int parentSheetIndex { get; set; }
+ public int stack { get; set; }
+ public bool isRecipe { get; set; }
+ public int price { get; set; }
+ public int quality { get; set; }
+
+ public SBareObject(int psi, int sta, bool ir, int pri, int qua)
+ {
+ parentSheetIndex = psi;
+ stack = sta;
+ isRecipe = ir;
+ price = pri;
+ quality = qua;
+ }
+ }
+} \ No newline at end of file
diff --git a/src/StardewModdingAPI/Inheritance/SGame.cs b/src/StardewModdingAPI/Inheritance/SGame.cs
new file mode 100644
index 00000000..9b69434a
--- /dev/null
+++ b/src/StardewModdingAPI/Inheritance/SGame.cs
@@ -0,0 +1,1726 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+using StardewModdingAPI.Events;
+using StardewValley;
+using StardewValley.BellsAndWhistles;
+using StardewValley.Locations;
+using StardewValley.Menus;
+using StardewValley.Tools;
+using xTile.Dimensions;
+using Rectangle = Microsoft.Xna.Framework.Rectangle;
+
+namespace StardewModdingAPI.Inheritance
+{
+ /// <summary>
+ /// The 'SGame' class.
+ /// This summary, and many others, only exists because XML doc tags.
+ /// </summary>
+ public class SGame : Game1
+ {
+ /// <summary>
+ /// Useless right now.
+ /// </summary>
+ public const int LowestModItemID = 1000;
+
+ private bool FireLoadedGameEvent;
+
+ /// <summary>
+ /// Gets a jagged array of all buttons pressed on the gamepad the prior frame.
+ /// </summary>
+ public Buttons[][] PreviouslyPressedButtons;
+
+ internal SGame()
+ {
+ Instance = this;
+ FirstUpdate = true;
+ }
+
+ /// <summary>
+ /// Useless at this time.
+ /// </summary>
+ [Obsolete]
+ // ReSharper disable once UnusedAutoPropertyAccessor.Local
+ public static Dictionary<int, SObject> ModItems { get; private set; }
+
+ /// <summary>
+ /// The current KeyboardState
+ /// </summary>
+ public KeyboardState KStateNow { get; private set; }
+
+ /// <summary>
+ /// The prior KeyboardState
+ /// </summary>
+ public KeyboardState KStatePrior { get; private set; }
+
+ /// <summary>
+ /// The current MouseState
+ /// </summary>
+ public MouseState MStateNow { get; private set; }
+
+ /// <summary>
+ /// The prior MouseState
+ /// </summary>
+ public MouseState MStatePrior { get; private set; }
+
+ /// <summary>
+ /// All keys pressed on the current frame
+ /// </summary>
+ public Keys[] CurrentlyPressedKeys => KStateNow.GetPressedKeys();
+
+ /// <summary>
+ /// All keys pressed on the prior frame
+ /// </summary>
+ public Keys[] PreviouslyPressedKeys => KStatePrior.GetPressedKeys();
+
+ /// <summary>
+ /// All keys pressed on this frame except for the ones pressed on the prior frame
+ /// </summary>
+ public Keys[] FramePressedKeys => CurrentlyPressedKeys.Except(PreviouslyPressedKeys).ToArray();
+
+ /// <summary>
+ /// All keys pressed on the prior frame except for the ones pressed on the current frame
+ /// </summary>
+ public Keys[] FrameReleasedKeys => PreviouslyPressedKeys.Except(CurrentlyPressedKeys).ToArray();
+
+ /// <summary>
+ /// Whether or not a save was tagged as 'Loaded' the prior frame.
+ /// </summary>
+ public bool PreviouslyLoadedGame { get; private set; }
+
+ /// <summary>
+ /// The list of GameLocations on the prior frame
+ /// </summary>
+ public int PreviousGameLocations { get; private set; }
+
+ /// <summary>
+ /// The list of GameObjects on the prior frame
+ /// </summary>
+ public int PreviousLocationObjects { get; private set; }
+
+ /// <summary>
+ /// The list of Items in the player's inventory on the prior frame
+ /// </summary>
+ public Dictionary<Item, int> PreviousItems { get; private set; }
+
+ /// <summary>
+ /// The player's Combat level on the prior frame
+ /// </summary>
+ public int PreviousCombatLevel { get; private set; }
+
+ /// <summary>
+ /// The player's Farming level on the prior frame
+ /// </summary>
+ public int PreviousFarmingLevel { get; private set; }
+
+ /// <summary>
+ /// The player's Fishing level on the prior frame
+ /// </summary>
+ public int PreviousFishingLevel { get; private set; }
+
+ /// <summary>
+ /// The player's Foraging level on the prior frame
+ /// </summary>
+ public int PreviousForagingLevel { get; private set; }
+
+ /// <summary>
+ /// The player's Mining level on the prior frame
+ /// </summary>
+ public int PreviousMiningLevel { get; private set; }
+
+ /// <summary>
+ /// The player's Luck level on the prior frame
+ /// </summary>
+ public int PreviousLuckLevel { get; private set; }
+
+ //Kill me now comments are so boring
+
+ /// <summary>
+ /// The player's previous game location
+ /// </summary>
+ public GameLocation PreviousGameLocation { get; private set; }
+
+ /// <summary>
+ /// The previous ActiveGameMenu in Game1
+ /// </summary>
+ public IClickableMenu PreviousActiveMenu { get; private set; }
+
+ /// <summary>
+ /// Indicates if the MenuClosed event was fired to prevent it from re-firing.
+ /// </summary>
+ internal bool WasMenuClosedInvoked = false;
+
+ /// <summary>
+ /// The previous mine level
+ /// </summary>
+ public int PreviousMineLevel { get; private set; }
+
+ /// <summary>
+ /// The previous TimeOfDay (Int32 between 600 and 2400?)
+ /// </summary>
+ public int PreviousTimeOfDay { get; private set; }
+
+ /// <summary>
+ /// The previous DayOfMonth (Int32 between 1 and 28?)
+ /// </summary>
+ public int PreviousDayOfMonth { get; private set; }
+
+ /// <summary>
+ /// The previous Season (String as follows: "winter", "spring", "summer", "fall")
+ /// </summary>
+ public string PreviousSeasonOfYear { get; private set; }
+
+ /// <summary>
+ /// The previous Year
+ /// </summary>
+ public int PreviousYearOfGame { get; private set; }
+
+ /// <summary>
+ /// The previous result of Game1.newDay
+ /// </summary>
+ public bool PreviousIsNewDay { get; private set; }
+
+ /// <summary>
+ /// The previous 'Farmer' (Player)
+ /// </summary>
+ public Farmer PreviousFarmer { get; private set; }
+
+ /// <summary>
+ /// The current index of the update tick. Recycles every 60th tick to 0. (Int32 between 0 and 59)
+ /// </summary>
+ public int CurrentUpdateTick { get; private set; }
+
+ /// <summary>
+ /// Whether or not this update frame is the very first of the entire game
+ /// </summary>
+ public bool FirstUpdate { get; private set; }
+
+ /// <summary>
+ /// The current RenderTarget in Game1 (Private field, uses reflection)
+ /// </summary>
+ public RenderTarget2D Screen
+ {
+ get { return typeof(Game1).GetBaseFieldValue<RenderTarget2D>(Program.gamePtr, "screen"); }
+ set { typeof(Game1).SetBaseFieldValue<RenderTarget2D>(this, "screen", value); }
+ }
+
+ /// <summary>
+ /// The current Colour in Game1 (Private field, uses reflection)
+ /// </summary>
+ public Color BgColour
+ {
+ get { return (Color) typeof(Game1).GetBaseFieldValue<object>(Program.gamePtr, "bgColor"); }
+ set { typeof(Game1).SetBaseFieldValue<object>(this, "bgColor", value); }
+ }
+
+ /// <summary>
+ /// Static accessor for an Instance of the class SGame
+ /// </summary>
+ public static SGame Instance { get; private set; }
+
+ /// <summary>
+ /// The game's FPS. Re-determined every Draw update.
+ /// </summary>
+ public static float FramesPerSecond { get; private set; }
+
+ /// <summary>
+ /// Whether or not we're in a pseudo 'debug' mode. Mostly for displaying information like FPS.
+ /// </summary>
+ public static bool Debug { get; private set; }
+
+ internal static Queue<String> DebugMessageQueue { get; private set; }
+
+ /// <summary>
+ /// The current player (equal to Farmer.Player)
+ /// </summary>
+ [Obsolete("Use Farmer.Player instead")]
+ public Farmer CurrentFarmer => player;
+
+ /// <summary>
+ /// Gets ALL static fields that belong to 'Game1'
+ /// </summary>
+ public static FieldInfo[] GetStaticFields => typeof(Game1).GetFields();
+
+ /// <summary>
+ /// Whether or not a button was just pressed on the controller
+ /// </summary>
+ /// <param name="button"></param>
+ /// <param name="buttonState"></param>
+ /// <param name="stateIndex"></param>
+ /// <returns></returns>
+ private bool WasButtonJustPressed(Buttons button, ButtonState buttonState, PlayerIndex stateIndex)
+ {
+ return buttonState == ButtonState.Pressed && !PreviouslyPressedButtons[(int) stateIndex].Contains(button);
+ }
+
+ /// <summary>
+ /// Whether or not a button was just released on the controller
+ /// </summary>
+ /// <param name="button"></param>
+ /// <param name="buttonState"></param>
+ /// <param name="stateIndex"></param>
+ /// <returns></returns>
+ private bool WasButtonJustReleased(Buttons button, ButtonState buttonState, PlayerIndex stateIndex)
+ {
+ return buttonState == ButtonState.Released && PreviouslyPressedButtons[(int) stateIndex].Contains(button);
+ }
+
+ /// <summary>
+ /// Whether or not an analog button was just pressed on the controller
+ /// </summary>
+ /// <param name="button"></param>
+ /// <param name="value"></param>
+ /// <param name="stateIndex"></param>
+ /// <returns></returns>
+ private bool WasButtonJustPressed(Buttons button, float value, PlayerIndex stateIndex)
+ {
+ return WasButtonJustPressed(button, value > 0.2f ? ButtonState.Pressed : ButtonState.Released, stateIndex);
+ }
+
+ /// <summary>
+ /// Whether or not an analog button was just released on the controller
+ /// </summary>
+ /// <param name="button"></param>
+ /// <param name="value"></param>
+ /// <param name="stateIndex"></param>
+ /// <returns></returns>
+ private bool WasButtonJustReleased(Buttons button, float value, PlayerIndex stateIndex)
+ {
+ return WasButtonJustReleased(button, value > 0.2f ? ButtonState.Pressed : ButtonState.Released, stateIndex);
+ }
+
+ /// <summary>
+ /// Gets an array of all Buttons pressed on a joystick
+ /// </summary>
+ /// <param name="index"></param>
+ /// <returns></returns>
+ public Buttons[] GetButtonsDown(PlayerIndex index)
+ {
+ var state = GamePad.GetState(index);
+ var buttons = new List<Buttons>();
+ if (state.IsConnected)
+ {
+ if (state.Buttons.A == ButtonState.Pressed) buttons.Add(Buttons.A);
+ if (state.Buttons.B == ButtonState.Pressed) buttons.Add(Buttons.B);
+ if (state.Buttons.Back == ButtonState.Pressed) buttons.Add(Buttons.Back);
+ if (state.Buttons.BigButton == ButtonState.Pressed) buttons.Add(Buttons.BigButton);
+ if (state.Buttons.LeftShoulder == ButtonState.Pressed) buttons.Add(Buttons.LeftShoulder);
+ if (state.Buttons.LeftStick == ButtonState.Pressed) buttons.Add(Buttons.LeftStick);
+ if (state.Buttons.RightShoulder == ButtonState.Pressed) buttons.Add(Buttons.RightShoulder);
+ if (state.Buttons.RightStick == ButtonState.Pressed) buttons.Add(Buttons.RightStick);
+ if (state.Buttons.Start == ButtonState.Pressed) buttons.Add(Buttons.Start);
+ if (state.Buttons.X == ButtonState.Pressed) buttons.Add(Buttons.X);
+ if (state.Buttons.Y == ButtonState.Pressed) buttons.Add(Buttons.Y);
+ if (state.DPad.Up == ButtonState.Pressed) buttons.Add(Buttons.DPadUp);
+ if (state.DPad.Down == ButtonState.Pressed) buttons.Add(Buttons.DPadDown);
+ if (state.DPad.Left == ButtonState.Pressed) buttons.Add(Buttons.DPadLeft);
+ if (state.DPad.Right == ButtonState.Pressed) buttons.Add(Buttons.DPadRight);
+ if (state.Triggers.Left > 0.2f) buttons.Add(Buttons.LeftTrigger);
+ if (state.Triggers.Right > 0.2f) buttons.Add(Buttons.RightTrigger);
+ }
+ return buttons.ToArray();
+ }
+
+ /// <summary>
+ /// Gets all buttons that were pressed on the current frame of a joystick
+ /// </summary>
+ /// <param name="index"></param>
+ /// <returns></returns>
+ public Buttons[] GetFramePressedButtons(PlayerIndex index)
+ {
+ var state = GamePad.GetState(index);
+ var buttons = new List<Buttons>();
+ if (state.IsConnected)
+ {
+ if (WasButtonJustPressed(Buttons.A, state.Buttons.A, index)) buttons.Add(Buttons.A);
+ if (WasButtonJustPressed(Buttons.B, state.Buttons.B, index)) buttons.Add(Buttons.B);
+ if (WasButtonJustPressed(Buttons.Back, state.Buttons.Back, index)) buttons.Add(Buttons.Back);
+ if (WasButtonJustPressed(Buttons.BigButton, state.Buttons.BigButton, index)) buttons.Add(Buttons.BigButton);
+ if (WasButtonJustPressed(Buttons.LeftShoulder, state.Buttons.LeftShoulder, index)) buttons.Add(Buttons.LeftShoulder);
+ if (WasButtonJustPressed(Buttons.LeftStick, state.Buttons.LeftStick, index)) buttons.Add(Buttons.LeftStick);
+ if (WasButtonJustPressed(Buttons.RightShoulder, state.Buttons.RightShoulder, index)) buttons.Add(Buttons.RightShoulder);
+ if (WasButtonJustPressed(Buttons.RightStick, state.Buttons.RightStick, index)) buttons.Add(Buttons.RightStick);
+ if (WasButtonJustPressed(Buttons.Start, state.Buttons.Start, index)) buttons.Add(Buttons.Start);
+ if (WasButtonJustPressed(Buttons.X, state.Buttons.X, index)) buttons.Add(Buttons.X);
+ if (WasButtonJustPressed(Buttons.Y, state.Buttons.Y, index)) buttons.Add(Buttons.Y);
+ if (WasButtonJustPressed(Buttons.DPadUp, state.DPad.Up, index)) buttons.Add(Buttons.DPadUp);
+ if (WasButtonJustPressed(Buttons.DPadDown, state.DPad.Down, index)) buttons.Add(Buttons.DPadDown);
+ if (WasButtonJustPressed(Buttons.DPadLeft, state.DPad.Left, index)) buttons.Add(Buttons.DPadLeft);
+ if (WasButtonJustPressed(Buttons.DPadRight, state.DPad.Right, index)) buttons.Add(Buttons.DPadRight);
+ if (WasButtonJustPressed(Buttons.LeftTrigger, state.Triggers.Left, index)) buttons.Add(Buttons.LeftTrigger);
+ if (WasButtonJustPressed(Buttons.RightTrigger, state.Triggers.Right, index)) buttons.Add(Buttons.RightTrigger);
+ }
+ return buttons.ToArray();
+ }
+
+ /// <summary>
+ /// Gets all buttons that were released on the current frame of a joystick
+ /// </summary>
+ /// <param name="index"></param>
+ /// <returns></returns>
+ public Buttons[] GetFrameReleasedButtons(PlayerIndex index)
+ {
+ var state = GamePad.GetState(index);
+ var buttons = new List<Buttons>();
+ if (state.IsConnected)
+ {
+ if (WasButtonJustReleased(Buttons.A, state.Buttons.A, index)) buttons.Add(Buttons.A);
+ if (WasButtonJustReleased(Buttons.B, state.Buttons.B, index)) buttons.Add(Buttons.B);
+ if (WasButtonJustReleased(Buttons.Back, state.Buttons.Back, index)) buttons.Add(Buttons.Back);
+ if (WasButtonJustReleased(Buttons.BigButton, state.Buttons.BigButton, index)) buttons.Add(Buttons.BigButton);
+ if (WasButtonJustReleased(Buttons.LeftShoulder, state.Buttons.LeftShoulder, index)) buttons.Add(Buttons.LeftShoulder);
+ if (WasButtonJustReleased(Buttons.LeftStick, state.Buttons.LeftStick, index)) buttons.Add(Buttons.LeftStick);
+ if (WasButtonJustReleased(Buttons.RightShoulder, state.Buttons.RightShoulder, index)) buttons.Add(Buttons.RightShoulder);
+ if (WasButtonJustReleased(Buttons.RightStick, state.Buttons.RightStick, index)) buttons.Add(Buttons.RightStick);
+ if (WasButtonJustReleased(Buttons.Start, state.Buttons.Start, index)) buttons.Add(Buttons.Start);
+ if (WasButtonJustReleased(Buttons.X, state.Buttons.X, index)) buttons.Add(Buttons.X);
+ if (WasButtonJustReleased(Buttons.Y, state.Buttons.Y, index)) buttons.Add(Buttons.Y);
+ if (WasButtonJustReleased(Buttons.DPadUp, state.DPad.Up, index)) buttons.Add(Buttons.DPadUp);
+ if (WasButtonJustReleased(Buttons.DPadDown, state.DPad.Down, index)) buttons.Add(Buttons.DPadDown);
+ if (WasButtonJustReleased(Buttons.DPadLeft, state.DPad.Left, index)) buttons.Add(Buttons.DPadLeft);
+ if (WasButtonJustReleased(Buttons.DPadRight, state.DPad.Right, index)) buttons.Add(Buttons.DPadRight);
+ if (WasButtonJustReleased(Buttons.LeftTrigger, state.Triggers.Left, index)) buttons.Add(Buttons.LeftTrigger);
+ if (WasButtonJustReleased(Buttons.RightTrigger, state.Triggers.Right, index)) buttons.Add(Buttons.RightTrigger);
+ }
+ return buttons.ToArray();
+ }
+
+