From 27dece2cf445147c5e2848f9ec26f38a101f50fc Mon Sep 17 00:00:00 2001 From: Gormogon Date: Sun, 29 May 2016 18:23:01 -0400 Subject: Attempt to migrate to new directory structure. --- StardewModdingAPI/App.config | 10 - StardewModdingAPI/Command.cs | 109 -- StardewModdingAPI/Config.cs | 176 -- StardewModdingAPI/Constants.cs | 67 - StardewModdingAPI/Entities/SCharacter.cs | 6 - StardewModdingAPI/Entities/SFarm.cs | 6 - StardewModdingAPI/Entities/SFarmAnimal.cs | 6 - StardewModdingAPI/Entities/SNpc.cs | 6 - StardewModdingAPI/Entities/SPlayer.cs | 33 - StardewModdingAPI/Events/Controls.cs | 58 - StardewModdingAPI/Events/EventArgs.cs | 272 --- StardewModdingAPI/Events/Game.cs | 123 -- StardewModdingAPI/Events/Graphics.cs | 162 -- StardewModdingAPI/Events/Location.cs | 30 - StardewModdingAPI/Events/Menu.cs | 21 - StardewModdingAPI/Events/Mine.cs | 14 - StardewModdingAPI/Events/Player.cs | 35 - StardewModdingAPI/Events/Time.cs | 42 - StardewModdingAPI/Extensions.cs | 135 -- StardewModdingAPI/FodyWeavers.xml | 5 - StardewModdingAPI/Inheritance/ItemStackChange.cs | 18 - StardewModdingAPI/Inheritance/Menus/SBobberBar.cs | 288 ---- StardewModdingAPI/Inheritance/Menus/SGameMenu.cs | 48 - .../Inheritance/Menus/SInventoryPage.cs | 19 - .../Inheritance/Minigames/SMinigameBase.cs | 34 - StardewModdingAPI/Inheritance/SBareObject.cs | 20 - StardewModdingAPI/Inheritance/SGame.cs | 1726 -------------------- StardewModdingAPI/Inheritance/SObject.cs | 277 ---- StardewModdingAPI/JsonResolver.cs | 212 --- StardewModdingAPI/Logger.cs | 326 ---- StardewModdingAPI/Manifest.cs | 89 - StardewModdingAPI/Mod.cs | 51 - StardewModdingAPI/ModItem.cs | 15 - StardewModdingAPI/Program.cs | 451 ----- StardewModdingAPI/Properties/AssemblyInfo.cs | 39 - StardewModdingAPI/StardewModdingAPI.csproj | 216 --- StardewModdingAPI/Version.cs | 23 - StardewModdingAPI/icon.ico | Bin 4286 -> 0 bytes StardewModdingAPI/packages.config | 7 - StardewModdingAPI/steam_appid.txt | 1 - 40 files changed, 5176 deletions(-) delete mode 100644 StardewModdingAPI/App.config delete mode 100644 StardewModdingAPI/Command.cs delete mode 100644 StardewModdingAPI/Config.cs delete mode 100644 StardewModdingAPI/Constants.cs delete mode 100644 StardewModdingAPI/Entities/SCharacter.cs delete mode 100644 StardewModdingAPI/Entities/SFarm.cs delete mode 100644 StardewModdingAPI/Entities/SFarmAnimal.cs delete mode 100644 StardewModdingAPI/Entities/SNpc.cs delete mode 100644 StardewModdingAPI/Entities/SPlayer.cs delete mode 100644 StardewModdingAPI/Events/Controls.cs delete mode 100644 StardewModdingAPI/Events/EventArgs.cs delete mode 100644 StardewModdingAPI/Events/Game.cs delete mode 100644 StardewModdingAPI/Events/Graphics.cs delete mode 100644 StardewModdingAPI/Events/Location.cs delete mode 100644 StardewModdingAPI/Events/Menu.cs delete mode 100644 StardewModdingAPI/Events/Mine.cs delete mode 100644 StardewModdingAPI/Events/Player.cs delete mode 100644 StardewModdingAPI/Events/Time.cs delete mode 100644 StardewModdingAPI/Extensions.cs delete mode 100644 StardewModdingAPI/FodyWeavers.xml delete mode 100644 StardewModdingAPI/Inheritance/ItemStackChange.cs delete mode 100644 StardewModdingAPI/Inheritance/Menus/SBobberBar.cs delete mode 100644 StardewModdingAPI/Inheritance/Menus/SGameMenu.cs delete mode 100644 StardewModdingAPI/Inheritance/Menus/SInventoryPage.cs delete mode 100644 StardewModdingAPI/Inheritance/Minigames/SMinigameBase.cs delete mode 100644 StardewModdingAPI/Inheritance/SBareObject.cs delete mode 100644 StardewModdingAPI/Inheritance/SGame.cs delete mode 100644 StardewModdingAPI/Inheritance/SObject.cs delete mode 100644 StardewModdingAPI/JsonResolver.cs delete mode 100644 StardewModdingAPI/Logger.cs delete mode 100644 StardewModdingAPI/Manifest.cs delete mode 100644 StardewModdingAPI/Mod.cs delete mode 100644 StardewModdingAPI/ModItem.cs delete mode 100644 StardewModdingAPI/Program.cs delete mode 100644 StardewModdingAPI/Properties/AssemblyInfo.cs delete mode 100644 StardewModdingAPI/StardewModdingAPI.csproj delete mode 100644 StardewModdingAPI/Version.cs delete mode 100644 StardewModdingAPI/icon.ico delete mode 100644 StardewModdingAPI/packages.config delete mode 100644 StardewModdingAPI/steam_appid.txt (limited to 'StardewModdingAPI') diff --git a/StardewModdingAPI/App.config b/StardewModdingAPI/App.config deleted file mode 100644 index 6664f1ed..00000000 --- a/StardewModdingAPI/App.config +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/StardewModdingAPI/Command.cs b/StardewModdingAPI/Command.cs deleted file mode 100644 index 4214b1a7..00000000 --- a/StardewModdingAPI/Command.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System; -using System.Collections.Generic; -using StardewModdingAPI.Events; - -namespace StardewModdingAPI -{ - public class Command - { - internal static List RegisteredCommands = new List(); - public string[] CalledArgs; - public string[] CommandArgs; - public string CommandDesc; - - public string CommandName; - - /// - /// Creates a Command from a Name, Description, and Arguments - /// - /// Name - /// Description - /// Arguments - public Command(string cname, string cdesc, string[] args = null) - { - CommandName = cname; - CommandDesc = cdesc; - if (args == null) - args = new string[0]; - CommandArgs = args; - } - - public event EventHandler CommandFired; - - /// - /// Calls the specified command. (It runs the command) - /// - /// The command to run - public static void CallCommand(string input) - { - input = input.TrimEnd(' '); - var args = new string[0]; - Command fnd; - if (input.Contains(" ")) - { - args = input.Split(new[] {" "}, 2, StringSplitOptions.RemoveEmptyEntries); - fnd = FindCommand(args[0]); - args = args[1].Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries); - } - else - { - fnd = FindCommand(input); - } - - if (fnd != null) - { - fnd.CalledArgs = args; - fnd.Fire(); - } - else - { - Log.AsyncR("Unknown Command"); - } - } - - /// - /// Registers a command to the list of commands properly - /// - /// Name of the command to register - /// Description - /// Arguments (these are purely for viewing so that a user can see what an argument needs to be) - /// - public static Command RegisterCommand(string command, string cdesc, string[] args = null) - { - var c = new Command(command, cdesc, args); - if (RegisteredCommands.Contains(c)) - { - Log.AsyncR($"Command already registered! [{c.CommandName}]"); - return RegisteredCommands.Find(x => x.Equals(c)); - } - - RegisteredCommands.Add(c); - Log.Async("Registered command: " + command); - - return c; - } - - /// - /// Looks up a command in the list of registered commands. Returns null if it doesn't exist (I think) - /// - /// Name of command to find - /// - public static Command FindCommand(string name) - { - return RegisteredCommands.Find(x => x.CommandName.Equals(name)); - } - - /// - /// Runs a command. Fires it. Calls it. Any of those. - /// - public void Fire() - { - if (CommandFired == null) - { - Log.AsyncR("Command failed to fire because it's fire event is null: " + CommandName); - return; - } - CommandFired.Invoke(this, new EventArgsCommand(this)); - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Config.cs b/StardewModdingAPI/Config.cs deleted file mode 100644 index c5b7beca..00000000 --- a/StardewModdingAPI/Config.cs +++ /dev/null @@ -1,176 +0,0 @@ -/* - Copyright 2016 Zoey (Zoryn) -*/ - -using System; -using System.IO; -using System.Linq; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace StardewModdingAPI -{ - public class Config - { - [JsonIgnore] - public virtual string ConfigLocation { get; protected internal set; } - - [JsonIgnore] - public virtual string ConfigDir => Path.GetDirectoryName(ConfigLocation); - - public virtual Config Instance() where T : Config => Activator.CreateInstance(); - - /// - /// Loads the config from the json blob on disk, updating and re-writing to the disk if needed. - /// - /// - /// - public virtual T LoadConfig() where T : Config - { - if (string.IsNullOrEmpty(ConfigLocation)) - { - Log.AsyncR("A config tried to load without specifying a location on the disk."); - return null; - } - - T ret = null; - - if (!File.Exists(ConfigLocation)) - { - //no config exists, generate default values - var c = GenerateDefaultConfig(); - c.ConfigLocation = ConfigLocation; - ret = c; - } - else - { - try - { - //try to load the config from a json blob on disk - var c = JsonConvert.DeserializeObject(File.ReadAllText(ConfigLocation), new JsonSerializerSettings {ContractResolver = new JsonResolver()}); - - c.ConfigLocation = ConfigLocation; - - //update the config with default values if needed - ret = c.UpdateConfig(); - - c = null; - } - catch (Exception ex) - { - Log.AsyncR($"Invalid JSON ({GetType().Name}): {ConfigLocation} \n{ex}"); - return GenerateDefaultConfig(); - } - } - - ret.WriteConfig(); - return ret; - } - - /// - /// MUST be implemented in inheriting class! - /// - public virtual T GenerateDefaultConfig() where T : Config - { - return null; - } - - /// - /// Merges a default-value config with the user-config on disk. - /// - /// - /// - public virtual T UpdateConfig() where T : Config - { - try - { - //default config - var b = JObject.FromObject(Instance().GenerateDefaultConfig(), new JsonSerializer {ContractResolver = new JsonResolver()}); - - //user config - var u = JObject.FromObject(this, new JsonSerializer {ContractResolver = new JsonResolver()}); - - //overwrite default values with user values - b.Merge(u, new JsonMergeSettings {MergeArrayHandling = MergeArrayHandling.Replace}); - - //cast json object to config - var c = b.ToObject(); - - //re-write the location on disk to the object - c.ConfigLocation = ConfigLocation; - - return c; - } - catch (Exception ex) - { - Log.AsyncR("An error occured when updating a config: " + ex); - return this as T; - } - } - } - - public static class ConfigExtensions - { - /// - /// Initializes an instance of any class that inherits from Config. - /// This method performs the loading, saving, and merging of the config on the disk and in memory at a default state. - /// This method should not be used to re-load or to re-save a config. - /// NOTE: You MUST set your config EQUAL to the return of this method! - /// - /// - /// - /// - /// - public static T InitializeConfig(this T baseConfig, string configLocation) where T : Config - { - if (baseConfig == null) - { - baseConfig = Activator.CreateInstance(); - /* - Log.AsyncR("A config tried to initialize whilst being null."); - return null; - */ - } - - if (string.IsNullOrEmpty(configLocation)) - { - Log.AsyncR("A config tried to initialize without specifying a location on the disk."); - return null; - } - - baseConfig.ConfigLocation = configLocation; - var c = baseConfig.LoadConfig(); - - return c; - } - - /// - /// Writes a config to a json blob on the disk specified in the config's properties. - /// - public static void WriteConfig(this T baseConfig) where T : Config - { - if (string.IsNullOrEmpty(baseConfig?.ConfigLocation) || string.IsNullOrEmpty(baseConfig.ConfigDir)) - { - Log.AsyncR("A config attempted to save when it itself or it's location were null."); - return; - } - - var s = JsonConvert.SerializeObject(baseConfig, typeof(T), Formatting.Indented, new JsonSerializerSettings {ContractResolver = new JsonResolver()}); - - if (!Directory.Exists(baseConfig.ConfigDir)) - Directory.CreateDirectory(baseConfig.ConfigDir); - - if (!File.Exists(baseConfig.ConfigLocation) || !File.ReadAllText(baseConfig.ConfigLocation).SequenceEqual(s)) - File.WriteAllText(baseConfig.ConfigLocation, s); - } - - /// - /// Re-reads the json blob on the disk and merges its values with a default config. - /// NOTE: You MUST set your config EQUAL to the return of this method! - /// - public static T ReloadConfig(this T baseConfig) where T : Config - { - return baseConfig.LoadConfig(); - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Constants.cs b/StardewModdingAPI/Constants.cs deleted file mode 100644 index 0dd387b3..00000000 --- a/StardewModdingAPI/Constants.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System; -using System.IO; -using System.Reflection; -using StardewValley; - -namespace StardewModdingAPI -{ - /// - /// Static class containing readonly values. - /// - public static class Constants - { - public static readonly Version Version = new Version(0, 40, 0, "Alpha"); - - /// - /// Not quite "constant", but it makes more sense for it to be here, at least for now - /// - public static int ModsLoaded = 0; - - /// - /// Stardew Valley's roaming app data location. - /// %AppData%//StardewValley - /// - public static string DataPath => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley"); - - public static string SavesPath => Path.Combine(DataPath, "Saves"); - - private static string saveFolderName => PlayerNull ? string.Empty : Game1.player.name.RemoveNumerics() + "_" + Game1.uniqueIDForThisGame; - public static string SaveFolderName => CurrentSavePathExists ? saveFolderName : ""; - - private static string currentSavePath => PlayerNull ? string.Empty : Path.Combine(SavesPath, saveFolderName); - public static string CurrentSavePath => CurrentSavePathExists ? currentSavePath : ""; - - public static bool CurrentSavePathExists => Directory.Exists(currentSavePath); - - public static bool PlayerNull => !Game1.hasLoadedGame || Game1.player == null || string.IsNullOrEmpty(Game1.player.name); - - /// - /// Execution path to execute the code. - /// - public static string ExecutionPath => Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - - /// - /// Title for the API console - /// - public static string ConsoleTitle => $"Stardew Modding API Console - Version {Version.VersionString} - Mods Loaded: {ModsLoaded}"; - - /// - /// Path for log files to be output to. - /// %LocalAppData%//StardewValley//ErrorLogs - /// - public static string LogDir => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley", "ErrorLogs"); - - public static string LogPath => Path.Combine(LogDir, "MODDED_ProgramLog.Log_LATEST.txt"); - - /// - /// Whether or not to enable the Render Target drawing code offered by ClxS - /// Do not mark as 'const' or else 'if' checks will complain that the expression is always true in ReSharper - /// - public static bool EnableDrawingIntoRenderTarget => true; - - /// - /// Completely overrides the base game's draw call to the one is SGame - /// - public static bool EnableCompletelyOverridingBaseCalls => true; - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Entities/SCharacter.cs b/StardewModdingAPI/Entities/SCharacter.cs deleted file mode 100644 index 2d941d55..00000000 --- a/StardewModdingAPI/Entities/SCharacter.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace StardewModdingAPI.Entities -{ - internal class SCharacter - { - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Entities/SFarm.cs b/StardewModdingAPI/Entities/SFarm.cs deleted file mode 100644 index c6c64681..00000000 --- a/StardewModdingAPI/Entities/SFarm.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace StardewModdingAPI.Entities -{ - internal class SFarm - { - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Entities/SFarmAnimal.cs b/StardewModdingAPI/Entities/SFarmAnimal.cs deleted file mode 100644 index fb8ee267..00000000 --- a/StardewModdingAPI/Entities/SFarmAnimal.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace StardewModdingAPI.Entities -{ - internal class SFarmAnimal - { - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Entities/SNpc.cs b/StardewModdingAPI/Entities/SNpc.cs deleted file mode 100644 index 727dcff7..00000000 --- a/StardewModdingAPI/Entities/SNpc.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace StardewModdingAPI.Entities -{ - internal class SNpc - { - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Entities/SPlayer.cs b/StardewModdingAPI/Entities/SPlayer.cs deleted file mode 100644 index d464cded..00000000 --- a/StardewModdingAPI/Entities/SPlayer.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Collections.Generic; -using StardewValley; - -namespace StardewModdingAPI.Entities -{ - /// - /// Static class for intergrating with the player - /// - public class SPlayer - { - /// - /// Calls 'getAllFarmers' in Game1 - /// - public static List AllFarmers => Game1.getAllFarmers(); - - /// - /// Do not use. - /// - [Obsolete("Use 'Player' instead.")] - public static Farmer CurrentFarmer => Game1.player; - - /// - /// Gets the current player from Game1 - /// - public static Farmer Player => Game1.player; - - /// - /// Gets the player's current location from Game1 - /// - public static GameLocation CurrentFarmerLocation => Player.currentLocation; - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Events/Controls.cs b/StardewModdingAPI/Events/Controls.cs deleted file mode 100644 index 6415561a..00000000 --- a/StardewModdingAPI/Events/Controls.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Input; - -namespace StardewModdingAPI.Events -{ - public static class ControlEvents - { - public static event EventHandler KeyboardChanged = delegate { }; - public static event EventHandler KeyPressed = delegate { }; - public static event EventHandler KeyReleased = delegate { }; - public static event EventHandler MouseChanged = delegate { }; - public static event EventHandler ControllerButtonPressed = delegate { }; - public static event EventHandler ControllerButtonReleased = delegate { }; - public static event EventHandler ControllerTriggerPressed = delegate { }; - public static event EventHandler ControllerTriggerReleased = delegate { }; - - internal static void InvokeKeyboardChanged(KeyboardState priorState, KeyboardState newState) - { - KeyboardChanged.Invoke(null, new EventArgsKeyboardStateChanged(priorState, newState)); - } - - internal static void InvokeMouseChanged(MouseState priorState, MouseState newState) - { - MouseChanged.Invoke(null, new EventArgsMouseStateChanged(priorState, newState)); - } - - internal static void InvokeKeyPressed(Keys key) - { - KeyPressed.Invoke(null, new EventArgsKeyPressed(key)); - } - - internal static void InvokeKeyReleased(Keys key) - { - KeyReleased.Invoke(null, new EventArgsKeyPressed(key)); - } - - internal static void InvokeButtonPressed(PlayerIndex playerIndex, Buttons buttons) - { - ControllerButtonPressed.Invoke(null, new EventArgsControllerButtonPressed(playerIndex, buttons)); - } - - internal static void InvokeButtonReleased(PlayerIndex playerIndex, Buttons buttons) - { - ControllerButtonReleased.Invoke(null, new EventArgsControllerButtonReleased(playerIndex, buttons)); - } - - internal static void InvokeTriggerPressed(PlayerIndex playerIndex, Buttons buttons, float value) - { - ControllerTriggerPressed.Invoke(null, new EventArgsControllerTriggerPressed(playerIndex, buttons, value)); - } - - internal static void InvokeTriggerReleased(PlayerIndex playerIndex, Buttons buttons, float value) - { - ControllerTriggerReleased.Invoke(null, new EventArgsControllerTriggerReleased(playerIndex, buttons, value)); - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Events/EventArgs.cs b/StardewModdingAPI/Events/EventArgs.cs deleted file mode 100644 index 2bce964e..00000000 --- a/StardewModdingAPI/Events/EventArgs.cs +++ /dev/null @@ -1,272 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Input; -using StardewModdingAPI.Inheritance; -using StardewValley; -using StardewValley.Menus; -using Object = StardewValley.Object; - -namespace StardewModdingAPI.Events -{ - public class EventArgsKeyboardStateChanged : EventArgs - { - public EventArgsKeyboardStateChanged(KeyboardState priorState, KeyboardState newState) - { - NewState = newState; - NewState = newState; - } - - public KeyboardState NewState { get; private set; } - public KeyboardState PriorState { get; private set; } - } - - public class EventArgsKeyPressed : EventArgs - { - public EventArgsKeyPressed(Keys keyPressed) - { - KeyPressed = keyPressed; - } - - public Keys KeyPressed { get; private set; } - } - - public class EventArgsControllerButtonPressed : EventArgs - { - public EventArgsControllerButtonPressed(PlayerIndex playerIndex, Buttons buttonPressed) - { - PlayerIndex = playerIndex; - ButtonPressed = buttonPressed; - } - - public PlayerIndex PlayerIndex { get; private set; } - public Buttons ButtonPressed { get; private set; } - } - - public class EventArgsControllerButtonReleased : EventArgs - { - public EventArgsControllerButtonReleased(PlayerIndex playerIndex, Buttons buttonReleased) - { - PlayerIndex = playerIndex; - ButtonReleased = buttonReleased; - } - - public PlayerIndex PlayerIndex { get; private set; } - public Buttons ButtonReleased { get; private set; } - } - - public class EventArgsControllerTriggerPressed : EventArgs - { - public EventArgsControllerTriggerPressed(PlayerIndex playerIndex, Buttons buttonPressed, float value) - { - PlayerIndex = playerIndex; - ButtonPressed = buttonPressed; - Value = value; - } - - public PlayerIndex PlayerIndex { get; private set; } - public Buttons ButtonPressed { get; private set; } - public float Value { get; private set; } - } - - public class EventArgsControllerTriggerReleased : EventArgs - { - public EventArgsControllerTriggerReleased(PlayerIndex playerIndex, Buttons buttonReleased, float value) - { - PlayerIndex = playerIndex; - ButtonReleased = buttonReleased; - Value = value; - } - - public PlayerIndex PlayerIndex { get; private set; } - public Buttons ButtonReleased { get; private set; } - public float Value { get; private set; } - } - - public class EventArgsMouseStateChanged : EventArgs - { - public EventArgsMouseStateChanged(MouseState priorState, MouseState newState) - { - NewState = newState; - NewState = newState; - } - - public MouseState NewState { get; private set; } - public MouseState PriorState { get; private set; } - } - - public class EventArgsClickableMenuChanged : EventArgs - { - public EventArgsClickableMenuChanged(IClickableMenu priorMenu, IClickableMenu newMenu) - { - NewMenu = newMenu; - PriorMenu = priorMenu; - } - - public IClickableMenu NewMenu { get; private set; } - public IClickableMenu PriorMenu { get; private set; } - } - - public class EventArgsClickableMenuClosed : EventArgs - { - public EventArgsClickableMenuClosed(IClickableMenu priorMenu) - { - PriorMenu = priorMenu; - } - - public IClickableMenu PriorMenu { get; private set; } - } - - public class EventArgsGameLocationsChanged : EventArgs - { - public EventArgsGameLocationsChanged(List newLocations) - { - NewLocations = newLocations; - } - - public List NewLocations { get; private set; } - } - - public class EventArgsMineLevelChanged : EventArgs - { - public EventArgsMineLevelChanged(int previousMineLevel, int currentMineLevel) - { - PreviousMineLevel = previousMineLevel; - CurrentMineLevel = currentMineLevel; - } - - public int PreviousMineLevel { get; private set; } - public int CurrentMineLevel { get; private set; } - } - - public class EventArgsLocationObjectsChanged : EventArgs - { - public EventArgsLocationObjectsChanged(SerializableDictionary newObjects) - { - NewObjects = newObjects; - } - - public SerializableDictionary NewObjects { get; private set; } - } - - public class EventArgsCurrentLocationChanged : EventArgs - { - public EventArgsCurrentLocationChanged(GameLocation priorLocation, GameLocation newLocation) - { - NewLocation = newLocation; - PriorLocation = priorLocation; - } - - public GameLocation NewLocation { get; private set; } - public GameLocation PriorLocation { get; private set; } - } - - public class EventArgsFarmerChanged : EventArgs - { - public EventArgsFarmerChanged(Farmer priorFarmer, Farmer newFarmer) - { - NewFarmer = NewFarmer; - PriorFarmer = PriorFarmer; - } - - public Farmer NewFarmer { get; } - public Farmer PriorFarmer { get; } - } - - public class EventArgsInventoryChanged : EventArgs - { - public EventArgsInventoryChanged(List inventory, List changedItems) - { - Inventory = inventory; - Added = changedItems.Where(n => n.ChangeType == ChangeType.Added).ToList(); - Removed = changedItems.Where(n => n.ChangeType == ChangeType.Removed).ToList(); - QuantityChanged = changedItems.Where(n => n.ChangeType == ChangeType.StackChange).ToList(); - } - - public List Inventory { get; private set; } - public List Added { get; private set; } - public List Removed { get; private set; } - public List QuantityChanged { get; private set; } - } - - public class EventArgsLevelUp : EventArgs - { - public enum LevelType - { - Combat, - Farming, - Fishing, - Foraging, - Mining, - Luck - } - - public EventArgsLevelUp(LevelType type, int newLevel) - { - Type = type; - NewLevel = newLevel; - } - - public LevelType Type { get; private set; } - public int NewLevel { get; private set; } - } - - public class EventArgsIntChanged : EventArgs - { - public EventArgsIntChanged(int priorInt, int newInt) - { - NewInt = NewInt; - PriorInt = PriorInt; - } - - public int NewInt { get; } - public int PriorInt { get; } - } - - public class EventArgsStringChanged : EventArgs - { - public EventArgsStringChanged(string priorString, string newString) - { - NewString = newString; - PriorString = priorString; - } - - public string NewString { get; private set; } - public string PriorString { get; private set; } - } - - public class EventArgsLoadedGameChanged : EventArgs - { - public EventArgsLoadedGameChanged(bool loadedGame) - { - LoadedGame = loadedGame; - } - - public bool LoadedGame { get; private set; } - } - - public class EventArgsNewDay : EventArgs - { - public EventArgsNewDay(int prevDay, int curDay, bool newDay) - { - PreviousDay = prevDay; - CurrentDay = curDay; - IsNewDay = newDay; - } - - public int PreviousDay { get; private set; } - public int CurrentDay { get; private set; } - public bool IsNewDay { get; private set; } - } - - public class EventArgsCommand : EventArgs - { - public EventArgsCommand(Command command) - { - Command = command; - } - - public Command Command { get; private set; } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Events/Game.cs b/StardewModdingAPI/Events/Game.cs deleted file mode 100644 index 8b8042ed..00000000 --- a/StardewModdingAPI/Events/Game.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System; - -namespace StardewModdingAPI.Events -{ - public static class GameEvents - { - public static event EventHandler GameLoaded = delegate { }; - public static event EventHandler Initialize = delegate { }; - public static event EventHandler LoadContent = delegate { }; - public static event EventHandler FirstUpdateTick = delegate { }; - - /// - /// Fires every update (1/60 of a second) - /// - public static event EventHandler UpdateTick = delegate { }; - - /// - /// Fires every other update (1/30 of a second) - /// - public static event EventHandler SecondUpdateTick = delegate { }; - - /// - /// Fires every fourth update (1/15 of a second) - /// - public static event EventHandler FourthUpdateTick = delegate { }; - - /// - /// Fires every eighth update (roughly 1/8 of a second) - /// - public static event EventHandler EighthUpdateTick = delegate { }; - - /// - /// Fires every fifthteenth update (1/4 of a second) - /// - public static event EventHandler QuarterSecondTick = delegate { }; - - /// - /// Fires every thirtieth update (1/2 of a second) - /// - public static event EventHandler HalfSecondTick = delegate { }; - - /// - /// Fires every sixtieth update (a second) - /// - public static event EventHandler OneSecondTick = delegate { }; - - internal static void InvokeGameLoaded() - { - GameLoaded.Invoke(null, EventArgs.Empty); - } - - internal static void InvokeInitialize() - { - try - { - Initialize.Invoke(null, EventArgs.Empty); - } - catch (Exception ex) - { - Log.AsyncR("An exception occured in XNA Initialize: " + ex); - } - } - - internal static void InvokeLoadContent() - { - try - { - LoadContent.Invoke(null, EventArgs.Empty); - } - catch (Exception ex) - { - Log.AsyncR("An exception occured in XNA LoadContent: " + ex); - } - } - - internal static void InvokeUpdateTick() - { - try - { - UpdateTick.Invoke(null, EventArgs.Empty); - } - catch (Exception ex) - { - Log.AsyncR("An exception occured in XNA UpdateTick: " + ex); - } - } - - internal static void InvokeSecondUpdateTick() - { - SecondUpdateTick.Invoke(null, EventArgs.Empty); - } - - internal static void InvokeFourthUpdateTick() - { - FourthUpdateTick.Invoke(null, EventArgs.Empty); - } - - internal static void InvokeEighthUpdateTick() - { - EighthUpdateTick.Invoke(null, EventArgs.Empty); - } - - internal static void InvokeQuarterSecondTick() - { - QuarterSecondTick.Invoke(null, EventArgs.Empty); - } - - internal static void InvokeHalfSecondTick() - { - HalfSecondTick.Invoke(null, EventArgs.Empty); - } - - internal static void InvokeOneSecondTick() - { - OneSecondTick.Invoke(null, EventArgs.Empty); - } - - internal static void InvokeFirstUpdateTick() - { - FirstUpdateTick.Invoke(null, EventArgs.Empty); - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Events/Graphics.cs b/StardewModdingAPI/Events/Graphics.cs deleted file mode 100644 index 331d3e3a..00000000 --- a/StardewModdingAPI/Events/Graphics.cs +++ /dev/null @@ -1,162 +0,0 @@ -using System; - -namespace StardewModdingAPI.Events -{ - /// - /// - /// - public static class GraphicsEvents - { - /// - /// Occurs when the form (game) is resized. - /// - public static event EventHandler Resize = delegate { }; - - /// - /// Occurs before anything is drawn. - /// - public static event EventHandler OnPreRenderEvent = delegate { }; - - /// - /// Occurs before the GUI is drawn. - /// - public static event EventHandler OnPreRenderGuiEvent = delegate { }; - - /// - /// Occurs after the GUI is drawn. - /// - public static event EventHandler OnPostRenderGuiEvent = delegate { }; - - /// - /// Occurs before the HUD is drawn. - /// - public static event EventHandler OnPreRenderHudEvent = delegate { }; - - /// - /// Occurs after the HUD is drawn. - /// - public static event EventHandler OnPostRenderHudEvent = delegate { }; - - /// - /// Occurs after everything is drawn. - /// - public static event EventHandler OnPostRenderEvent = delegate { }; - - /// - /// Occurs before the GUI is drawn. Does not check for conditional statements. - /// - public static event EventHandler OnPreRenderGuiEventNoCheck = delegate { }; - - /// - /// Occurs after the GUI is drawn. Does not check for conditional statements. - /// - public static event EventHandler OnPostRenderGuiEventNoCheck = delegate { }; - - /// - /// Occurs before the HUD is drawn. Does not check for conditional statements. - /// - public static event EventHandler OnPreRenderHudEventNoCheck = delegate { }; - - /// - /// Occurs after the HUD is drawn. Does not check for conditional statements. - /// - public static event EventHandler OnPostRenderHudEventNoCheck = delegate { }; - - /// - /// Draws when SGame.Debug is true. F3 toggles this. - /// Game1.spriteBatch.Begin() is pre-called. - /// Do not make end or begin calls to the spritebatch. - /// If you are only trying to add debug information, use SGame.DebugMessageQueue in your Update loop. - /// - public static event EventHandler DrawDebug = delegate { }; - - internal static void InvokeDrawDebug(object sender, EventArgs e) - { - DrawDebug.Invoke(sender, e); - } - - internal static void InvokeOnPreRenderEvent(object sender, EventArgs e) - { - OnPreRenderEvent.Invoke(sender, e); - } - - internal static void InvokeOnPreRenderGuiEvent(object sender, EventArgs e) - { - OnPreRenderGuiEvent.Invoke(sender, e); - } - - internal static void InvokeOnPostRenderGuiEvent(object sender, EventArgs e) - { - OnPostRenderGuiEvent.Invoke(sender, e); - } - - internal static void InvokeOnPreRenderHudEvent(object sender, EventArgs e) - { - OnPreRenderHudEvent.Invoke(sender, e); - } - - internal static void InvokeOnPostRenderHudEvent(object sender, EventArgs e) - { - OnPostRenderHudEvent.Invoke(sender, e); - } - - internal static void InvokeOnPostRenderEvent(object sender, EventArgs e) - { - OnPostRenderEvent.Invoke(sender, e); - } - - internal static void InvokeOnPreRenderGuiEventNoCheck(object sender, EventArgs e) - { - OnPreRenderGuiEventNoCheck.Invoke(sender, e); - } - - internal static void InvokeOnPostRenderGuiEventNoCheck(object sender, EventArgs e) - { - OnPostRenderGuiEventNoCheck.Invoke(sender, e); - } - - internal static void InvokeOnPreRenderHudEventNoCheck(object sender, EventArgs e) - { - OnPreRenderHudEventNoCheck.Invoke(sender, e); - } - - internal static void InvokeOnPostRenderHudEventNoCheck(object sender, EventArgs e) - { - OnPostRenderHudEventNoCheck.Invoke(sender, e); - } - - internal static void InvokeResize(object sender, EventArgs e) - { - Resize.Invoke(sender, e); - } - - #region To Remove - - [Obsolete("Use the other Pre/Post render events instead.")] - public static event EventHandler DrawTick = delegate { }; - - [Obsolete("Use the other Pre/Post render events instead. All of them will automatically be drawn into the render target if needed.")] - public static event EventHandler DrawInRenderTargetTick = delegate { }; - - [Obsolete("Should not be used.")] - public static void InvokeDrawTick() - { - try - { - DrawTick.Invoke(null, EventArgs.Empty); - } - catch (Exception ex) - { - Log.AsyncR("An exception occured in a Mod's DrawTick: " + ex); - } - } - - [Obsolete("Should not be used.")] - public static void InvokeDrawInRenderTargetTick() - { - DrawInRenderTargetTick.Invoke(null, EventArgs.Empty); - } - - #endregion - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Events/Location.cs b/StardewModdingAPI/Events/Location.cs deleted file mode 100644 index f951ab95..00000000 --- a/StardewModdingAPI/Events/Location.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.Xna.Framework; -using StardewValley; -using Object = StardewValley.Object; - -namespace StardewModdingAPI.Events -{ - public static class LocationEvents - { - public static event EventHandler LocationsChanged = delegate { }; - public static event EventHandler LocationObjectsChanged = delegate { }; - public static event EventHandler CurrentLocationChanged = delegate { }; - - internal static void InvokeLocationsChanged(List newLocations) - { - LocationsChanged.Invoke(null, new EventArgsGameLocationsChanged(newLocations)); - } - - internal static void InvokeCurrentLocationChanged(GameLocation priorLocation, GameLocation newLocation) - { - CurrentLocationChanged.Invoke(null, new EventArgsCurrentLocationChanged(priorLocation, newLocation)); - } - - internal static void InvokeOnNewLocationObject(SerializableDictionary newObjects) - { - LocationObjectsChanged.Invoke(null, new EventArgsLocationObjectsChanged(newObjects)); - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Events/Menu.cs b/StardewModdingAPI/Events/Menu.cs deleted file mode 100644 index 0e043780..00000000 --- a/StardewModdingAPI/Events/Menu.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using StardewValley.Menus; - -namespace StardewModdingAPI.Events -{ - public static class MenuEvents - { - public static event EventHandler MenuChanged = delegate { }; - public static event EventHandler MenuClosed = delegate { }; - - internal static void InvokeMenuChanged(IClickableMenu priorMenu, IClickableMenu newMenu) - { - MenuChanged.Invoke(null, new EventArgsClickableMenuChanged(priorMenu, newMenu)); - } - - internal static void InvokeMenuClosed(IClickableMenu priorMenu) - { - MenuClosed.Invoke(null, new EventArgsClickableMenuClosed(priorMenu)); - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Events/Mine.cs b/StardewModdingAPI/Events/Mine.cs deleted file mode 100644 index 55514d42..00000000 --- a/StardewModdingAPI/Events/Mine.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; - -namespace StardewModdingAPI.Events -{ - public static class MineEvents - { - public static event EventHandler MineLevelChanged = delegate { }; - - internal static void InvokeMineLevelChanged(int previousMinelevel, int currentMineLevel) - { - MineLevelChanged.Invoke(null, new EventArgsMineLevelChanged(previousMinelevel, currentMineLevel)); - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Events/Player.cs b/StardewModdingAPI/Events/Player.cs deleted file mode 100644 index 22f572b7..00000000 --- a/StardewModdingAPI/Events/Player.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using StardewModdingAPI.Inheritance; -using StardewValley; - -namespace StardewModdingAPI.Events -{ - public static class PlayerEvents - { - public static event EventHandler FarmerChanged = delegate { }; - public static event EventHandler InventoryChanged = delegate { }; - public static event EventHandler LeveledUp = delegate { }; - public static event EventHandler LoadedGame = delegate { }; - - internal static void InvokeFarmerChanged(Farmer priorFarmer, Farmer newFarmer) - { - FarmerChanged.Invoke(null, new EventArgsFarmerChanged(priorFarmer, newFarmer)); - } - - internal static void InvokeInventoryChanged(List inventory, List changedItems) - { - InventoryChanged.Invoke(null, new EventArgsInventoryChanged(inventory, changedItems)); - } - - internal static void InvokeLeveledUp(EventArgsLevelUp.LevelType type, int newLevel) - { - LeveledUp.Invoke(null, new EventArgsLevelUp(type, newLevel)); - } - - internal static void InvokeLoadedGame(EventArgsLoadedGameChanged loaded) - { - LoadedGame.Invoke(null, loaded); - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Events/Time.cs b/StardewModdingAPI/Events/Time.cs deleted file mode 100644 index 39ca642a..00000000 --- a/StardewModdingAPI/Events/Time.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; - -namespace StardewModdingAPI.Events -{ - public static class TimeEvents - { - public static event EventHandler TimeOfDayChanged = delegate { }; - public static event EventHandler DayOfMonthChanged = delegate { }; - public static event EventHandler YearOfGameChanged = delegate { }; - public static event EventHandler SeasonOfYearChanged = delegate { }; - - /// - /// Occurs when Game1.newDay changes. True directly before saving, and False directly after. - /// - public static event EventHandler OnNewDay = delegate { }; - - internal static void InvokeTimeOfDayChanged(int priorInt, int newInt) - { - TimeOfDayChanged.Invoke(null, new EventArgsIntChanged(priorInt, newInt)); - } - - internal static void InvokeDayOfMonthChanged(int priorInt, int newInt) - { - DayOfMonthChanged.Invoke(null, new EventArgsIntChanged(priorInt, newInt)); - } - - internal static void InvokeYearOfGameChanged(int priorInt, int newInt) - { - YearOfGameChanged.Invoke(null, new EventArgsIntChanged(priorInt, newInt)); - } - - internal static void InvokeSeasonOfYearChanged(string priorString, string newString) - { - SeasonOfYearChanged.Invoke(null, new EventArgsStringChanged(priorString, newString)); - } - - internal static void InvokeOnNewDay(int priorInt, int newInt, bool newDay) - { - OnNewDay.Invoke(null, new EventArgsNewDay(priorInt, newInt, newDay)); - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Extensions.cs b/StardewModdingAPI/Extensions.cs deleted file mode 100644 index abad6ce2..00000000 --- a/StardewModdingAPI/Extensions.cs +++ /dev/null @@ -1,135 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Input; - -namespace StardewModdingAPI -{ - public static class Extensions - { - public static Random Random = new Random(); - - public static bool IsKeyDown(this Keys key) - { - return Keyboard.GetState().IsKeyDown(key); - } - - public static Color RandomColour() - { - return new Color(Random.Next(0, 255), Random.Next(0, 255), Random.Next(0, 255)); - } - - [Obsolete("The usage of ToSingular has changed. Please update your call to use ToSingular")] - public static string ToSingular(this IEnumerable ienum, string split = ", ") - { - Log.AsyncR("The usage of ToSingular has changed. Please update your call to use ToSingular"); - return ""; - } - - public static string ToSingular(this IEnumerable ienum, string split = ", ") // where T : class - { - //Apparently Keys[] won't split normally :l - if (typeof(T) == typeof(Keys)) - { - return string.Join(split, ienum.ToArray()); - } - return string.Join(split, ienum); - } - - /*public static string ToSingular(this IEnumerable ienum, string split = ", ") - { - return string.Join(split, ienum); - }*/ - - public static bool IsInt32(this object o) - { - int i; - return int.TryParse(o.ToString(), out i); - } - - public static int AsInt32(this object o) - { - return int.Parse(o.ToString()); - } - - public static bool IsBool(this object o) - { - bool b; - return bool.TryParse(o.ToString(), out b); - } - - public static bool AsBool(this object o) - { - return bool.Parse(o.ToString()); - } - - public static int GetHash(this IEnumerable enumerable) - { - var hash = 0; - foreach (var v in enumerable) - { - hash ^= v.GetHashCode(); - } - return hash; - } - - public static T Cast(this object o) where T : class - { - return o as T; - } - - public static FieldInfo[] GetPrivateFields(this object o) - { - return o.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic); - } - - public static FieldInfo GetBaseFieldInfo(this Type t, string name) - { - return t.GetField(name, BindingFlags.Instance | BindingFlags.NonPublic); - } - - public static T GetBaseFieldValue(this Type t, object o, string name) where T : class - { - return t.GetBaseFieldInfo(name).GetValue(o) as T; - } - - public static void SetBaseFieldValue(this Type t, object o, string name, object newValue) where T : class - { - t.GetBaseFieldInfo(name).SetValue(o, newValue as T); - } - - /* - public static T GetBaseFieldValue(this object o, string name) where T : class - { - return o.GetType().GetBaseFieldInfo(name).GetValue(o) as T; - }*/ - - /* - public static object GetBaseFieldValue(this object o, string name) - { - return o.GetType().GetBaseFieldInfo(name).GetValue(o); - } - - public static void SetBaseFieldValue (this object o, string name, object newValue) - { - o.GetType().GetBaseFieldInfo(name).SetValue(o, newValue); - } - */ - - public static string RemoveNumerics(this string st) - { - var s = st; - foreach (var c in s) - { - if (!char.IsLetterOrDigit(c)) - { - s = s.Replace(c.ToString(), ""); - } - } - return s; - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/FodyWeavers.xml b/StardewModdingAPI/FodyWeavers.xml deleted file mode 100644 index 2e6d4a7a..00000000 --- a/StardewModdingAPI/FodyWeavers.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/StardewModdingAPI/Inheritance/ItemStackChange.cs b/StardewModdingAPI/Inheritance/ItemStackChange.cs deleted file mode 100644 index 88fc002e..00000000 --- a/StardewModdingAPI/Inheritance/ItemStackChange.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/StardewModdingAPI/Inheritance/Menus/SBobberBar.cs b/StardewModdingAPI/Inheritance/Menus/SBobberBar.cs deleted file mode 100644 index 1e424f73..00000000 --- a/StardewModdingAPI/Inheritance/Menus/SBobberBar.cs +++ /dev/null @@ -1,288 +0,0 @@ -using System.Reflection; -using Microsoft.Xna.Framework; -using StardewValley.BellsAndWhistles; -using StardewValley.Menus; - -namespace StardewModdingAPI.Inheritance.Menus -{ - public class SBobberBar : BobberBar - { - /// - /// DO NOT CONSTRUCT THIS CLASS - /// To retrieve an instance of SBobberBar, use SBobberBar.ConstructFromBaseClass() - /// - public SBobberBar(int whichFish, float fishSize, bool treasure, int bobber) : base(whichFish, fishSize, treasure, bobber) - { - } - - public BobberBar BaseBobberBar { get; private set; } - - /// - /// The green rectangle bar that moves up and down - /// - public float bobberPosition - { - get { return (float) GetBaseFieldInfo("bobberPosition").GetValue(BaseBobberBar); } - set { GetBaseFieldInfo("bobberPosition").SetValue(BaseBobberBar, value); } - } - - /// - /// The green bar on the right. How close to catching the fish you are - /// Range: 0 - 1 | 1 = catch, 0 = fail - /// - 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); } - } - - /// - /// Whether or not a treasure chest appears - /// - 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/StardewModdingAPI/Inheritance/Menus/SGameMenu.cs b/StardewModdingAPI/Inheritance/Menus/SGameMenu.cs deleted file mode 100644 index a4d3d8d0..00000000 --- a/StardewModdingAPI/Inheritance/Menus/SGameMenu.cs +++ /dev/null @@ -1,48 +0,0 @@ -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 tabs - { - get { return (List) GetBaseFieldInfo("tabs").GetValue(BaseGameMenu); } - set { GetBaseFieldInfo("tabs").SetValue(BaseGameMenu, value); } - } - - public List pages - { - get { return (List) 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/StardewModdingAPI/Inheritance/Menus/SInventoryPage.cs b/StardewModdingAPI/Inheritance/Menus/SInventoryPage.cs deleted file mode 100644 index 436b834d..00000000 --- a/StardewModdingAPI/Inheritance/Menus/SInventoryPage.cs +++ /dev/null @@ -1,19 +0,0 @@ -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/StardewModdingAPI/Inheritance/Minigames/SMinigameBase.cs b/StardewModdingAPI/Inheritance/Minigames/SMinigameBase.cs deleted file mode 100644 index f30021de..00000000 --- a/StardewModdingAPI/Inheritance/Minigames/SMinigameBase.cs +++ /dev/null @@ -1,34 +0,0 @@ -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/StardewModdingAPI/Inheritance/SBareObject.cs b/StardewModdingAPI/Inheritance/SBareObject.cs deleted file mode 100644 index 5bef7b3e..00000000 --- a/StardewModdingAPI/Inheritance/SBareObject.cs +++ /dev/null @@ -1,20 +0,0 @@ -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/StardewModdingAPI/Inheritance/SGame.cs b/StardewModdingAPI/Inheritance/SGame.cs deleted file mode 100644 index 9b69434a..00000000 --- a/StardewModdingAPI/Inheritance/SGame.cs +++ /dev/null @@ -1,1726 +0,0 @@ -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 -{ - /// - /// The 'SGame' class. - /// This summary, and many others, only exists because XML doc tags. - /// - public class SGame : Game1 - { - /// - /// Useless right now. - /// - public const int LowestModItemID = 1000; - - private bool FireLoadedGameEvent; - - /// - /// Gets a jagged array of all buttons pressed on the gamepad the prior frame. - /// - public Buttons[][] PreviouslyPressedButtons; - - internal SGame() - { - Instance = this; - FirstUpdate = true; - } - - /// - /// Useless at this time. - /// - [Obsolete] - // ReSharper disable once UnusedAutoPropertyAccessor.Local - public static Dictionary ModItems { get; private set; } - - /// - /// The current KeyboardState - /// - public KeyboardState KStateNow { get; private set; } - - /// - /// The prior KeyboardState - /// - public KeyboardState KStatePrior { get; private set; } - - /// - /// The current MouseState - /// - public MouseState MStateNow { get; private set; } - - /// - /// The prior MouseState - /// - public MouseState MStatePrior { get; private set; } - - /// - /// All keys pressed on the current frame - /// - public Keys[] CurrentlyPressedKeys => KStateNow.GetPressedKeys(); - - /// - /// All keys pressed on the prior frame - /// - public Keys[] PreviouslyPressedKeys => KStatePrior.GetPressedKeys(); - - /// - /// All keys pressed on this frame except for the ones pressed on the prior frame - /// - public Keys[] FramePressedKeys => CurrentlyPressedKeys.Except(PreviouslyPressedKeys).ToArray(); - - /// - /// All keys pressed on the prior frame except for the ones pressed on the current frame - /// - public Keys[] FrameReleasedKeys => PreviouslyPressedKeys.Except(CurrentlyPressedKeys).ToArray(); - - /// - /// Whether or not a save was tagged as 'Loaded' the prior frame. - /// - public bool PreviouslyLoadedGame { get; private set; } - - /// - /// The list of GameLocations on the prior frame - /// - public int PreviousGameLocations { get; private set; } - - /// - /// The list of GameObjects on the prior frame - /// - public int PreviousLocationObjects { get; private set; } - - /// - /// The list of Items in the player's inventory on the prior frame - /// - public Dictionary PreviousItems { get; private set; } - - /// - /// The player's Combat level on the prior frame - /// - public int PreviousCombatLevel { get; private set; } - - /// - /// The player's Farming level on the prior frame - /// - public int PreviousFarmingLevel { get; private set; } - - /// - /// The player's Fishing level on the prior frame - /// - public int PreviousFishingLevel { get; private set; } - - /// - /// The player's Foraging level on the prior frame - /// - public int PreviousForagingLevel { get; private set; } - - /// - /// The player's Mining level on the prior frame - /// - public int PreviousMiningLevel { get; private set; } - - /// - /// The player's Luck level on the prior frame - /// - public int PreviousLuckLevel { get; private set; } - - //Kill me now comments are so boring - - /// - /// The player's previous game location - /// - public GameLocation PreviousGameLocation { get; private set; } - - /// - /// The previous ActiveGameMenu in Game1 - /// - public IClickableMenu PreviousActiveMenu { get; private set; } - - /// - /// Indicates if the MenuClosed event was fired to prevent it from re-firing. - /// - internal bool WasMenuClosedInvoked = false; - - /// - /// The previous mine level - /// - public int PreviousMineLevel { get; private set; } - - /// - /// The previous TimeOfDay (Int32 between 600 and 2400?) - /// - public int PreviousTimeOfDay { get; private set; } - - /// - /// The previous DayOfMonth (Int32 between 1 and 28?) - /// - public int PreviousDayOfMonth { get; private set; } - - /// - /// The previous Season (String as follows: "winter", "spring", "summer", "fall") - /// - public string PreviousSeasonOfYear { get; private set; } - - /// - /// The previous Year - /// - public int PreviousYearOfGame { get; private set; } - - /// - /// The previous result of Game1.newDay - /// - public bool PreviousIsNewDay { get; private set; } - - /// - /// The previous 'Farmer' (Player) - /// - public Farmer PreviousFarmer { get; private set; } - - /// - /// The current index of the update tick. Recycles every 60th tick to 0. (Int32 between 0 and 59) - /// - public int CurrentUpdateTick { get; private set; } - - /// - /// Whether or not this update frame is the very first of the entire game - /// - public bool FirstUpdate { get; private set; } - - /// - /// The current RenderTarget in Game1 (Private field, uses reflection) - /// - public RenderTarget2D Screen - { - get { return typeof(Game1).GetBaseFieldValue(Program.gamePtr, "screen"); } - set { typeof(Game1).SetBaseFieldValue(this, "screen", value); } - } - - /// - /// The current Colour in Game1 (Private field, uses reflection) - /// - public Color BgColour - { - get { return (Color) typeof(Game1).GetBaseFieldValue(Program.gamePtr, "bgColor"); } - set { typeof(Game1).SetBaseFieldValue(this, "bgColor", value); } - } - - /// - /// Static accessor for an Instance of the class SGame - /// - public static SGame Instance { get; private set; } - - /// - /// The game's FPS. Re-determined every Draw update. - /// - public static float FramesPerSecond { get; private set; } - - /// - /// Whether or not we're in a pseudo 'debug' mode. Mostly for displaying information like FPS. - /// - public static bool Debug { get; private set; } - - internal static Queue DebugMessageQueue { get; private set; } - - /// - /// The current player (equal to Farmer.Player) - /// - [Obsolete("Use Farmer.Player instead")] - public Farmer CurrentFarmer => player; - - /// - /// Gets ALL static fields that belong to 'Game1' - /// - public static FieldInfo[] GetStaticFields => typeof(Game1).GetFields(); - - /// - /// Whether or not a button was just pressed on the controller - /// - /// - /// - /// - /// - private bool WasButtonJustPressed(Buttons button, ButtonState buttonState, PlayerIndex stateIndex) - { - return buttonState == ButtonState.Pressed && !PreviouslyPressedButtons[(int) stateIndex].Contains(button); - } - - /// - /// Whether or not a button was just released on the controller - /// - /// - /// - /// - /// - private bool WasButtonJustReleased(Buttons button, ButtonState buttonState, PlayerIndex stateIndex) - { - return buttonState == ButtonState.Released && PreviouslyPressedButtons[(int) stateIndex].Contains(button); - } - - /// - /// Whether or not an analog button was just pressed on the controller - /// - /// - /// - /// - /// - private bool WasButtonJustPressed(Buttons button, float value, PlayerIndex stateIndex) - { - return WasButtonJustPressed(button, value > 0.2f ? ButtonState.Pressed : ButtonState.Released, stateIndex); - } - - /// - /// Whether or not an analog button was just released on the controller - /// - /// - /// - /// - /// - private bool WasButtonJustReleased(Buttons button, float value, PlayerIndex stateIndex) - { - return WasButtonJustReleased(button, value > 0.2f ? ButtonState.Pressed : ButtonState.Released, stateIndex); - } - - /// - /// Gets an array of all Buttons pressed on a joystick - /// - /// - /// - public Buttons[] GetButtonsDown(PlayerIndex index) - { - var state = GamePad.GetState(index); - var buttons = new List(); - 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(); - } - - /// - /// Gets all buttons that were pressed on the current frame of a joystick - /// - /// - /// - public Buttons[] GetFramePressedButtons(PlayerIndex index) - { - var state = GamePad.GetState(index); - var buttons = new List(); - 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(); - } - - /// - /// Gets all buttons that were released on the current frame of a joystick - /// - /// - /// - public Buttons[] GetFrameReleasedButtons(PlayerIndex index) - { - var state = GamePad.GetState(index); - var buttons = new List(); - 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(); - } - - /// - /// - /// - public static MethodInfo DrawFarmBuildings = typeof(Game1).GetMethod("drawFarmBuildings", BindingFlags.NonPublic | BindingFlags.Instance); - - /// - /// - /// - public static MethodInfo DrawHUD = typeof(Game1).GetMethod("drawHUD", BindingFlags.NonPublic | BindingFlags.Instance); - - /// - /// - /// - public static MethodInfo DrawDialogueBox = typeof(Game1).GetMethod("drawDialogueBox", BindingFlags.NonPublic | BindingFlags.Instance); - - public static MethodInfo CheckForEscapeKeys = typeof(Game1).GetMethod("checkForEscapeKeys", BindingFlags.NonPublic | BindingFlags.Instance); - - public static MethodInfo UpdateControlInput = typeof(Game1).GetMethod("UpdateControlInput", BindingFlags.NonPublic | BindingFlags.Instance); - - public static MethodInfo UpdateCharacters = typeof(Game1).GetMethod("UpdateCharacters", BindingFlags.NonPublic | BindingFlags.Instance); - - public static MethodInfo UpdateLocations = typeof(Game1).GetMethod("UpdateLocations", BindingFlags.NonPublic | BindingFlags.Instance); - - public static MethodInfo getViewportCenter = typeof(Game1).GetMethod("getViewportCenter", BindingFlags.NonPublic | BindingFlags.Instance); - - public static MethodInfo UpdateTitleScreen = typeof(Game1).GetMethod("UpdateTitleScreen", BindingFlags.NonPublic | BindingFlags.Instance); - - public delegate void BaseBaseDraw(); - - /// - /// Whether or not the game's zoom level is 1.0f - /// - public bool ZoomLevelIsOne => options.zoomLevel.Equals(1.0f); - - /// - /// XNA Init Method - /// - protected override void Initialize() - { - Log.AsyncY("XNA Initialize"); - //ModItems = new Dictionary(); - DebugMessageQueue = new Queue(); - PreviouslyPressedButtons = new Buttons[4][]; - for (var i = 0; i < 4; ++i) PreviouslyPressedButtons[i] = new Buttons[0]; - - base.Initialize(); - GameEvents.InvokeInitialize(); - } - - /// - /// XNA LC Method - /// - protected override void LoadContent() - { - Log.AsyncY("XNA LoadContent"); - base.LoadContent(); - GameEvents.InvokeLoadContent(); - } - - /// - /// XNA Update Method - /// - /// - protected override void Update(GameTime gameTime) - { - QueueDebugMessage("FPS: " + FramesPerSecond); - UpdateEventCalls(); - - /* - if (ZoomLevelIsOne) - { - options.zoomLevel = 0.99f; - InvokeBasePrivateInstancedMethod("Window_ClientSizeChanged", null, null); - } - */ - - if (FramePressedKeys.Contains(Keys.F3)) - { - Debug = !Debug; - } - - if (FramePressedKeys.Contains(Keys.F2)) - { - //Built-in debug mode - debugMode = !debugMode; - } - - if (Constants.EnableCompletelyOverridingBaseCalls) - { - #region Overridden Update Call - - try - { - if (Program.BuildType == 0) - SteamHelper.update(); - if ((paused /*|| !this.IsActive*/) && (options == null || options.pauseWhenOutOfFocus || paused)) - return; - if (quit) - Exit(); - currentGameTime = gameTime; - if (gameMode != 11) - { - if (IsMultiplayer && gameMode == 3) - { - if (multiplayerMode == 2) - server.receiveMessages(); - else - client.receiveMessages(); - } - if (IsActive) - InvokeMethodInfo(CheckForEscapeKeys); - //InvokeBasePrivateInstancedMethod("checkForEscapeKeys"); - - //this.checkForEscapeKeys(); - updateMusic(); - updateRaindropPosition(); - bloom?.tick(gameTime); - if (globalFade) - { - if (!dialogueUp) - { - if (fadeIn) - { - fadeToBlackAlpha = Math.Max(0.0f, fadeToBlackAlpha - globalFadeSpeed); - if (fadeToBlackAlpha <= 0.0) - { - globalFade = false; - if (afterFade != null) - { - afterFadeFunction afterFadeFunction = afterFade; - afterFade(); - if (afterFade != null && afterFade.Equals(afterFadeFunction)) - afterFade = null; - if (nonWarpFade) - fadeToBlack = false; - } - } - } - else - { - fadeToBlackAlpha = Math.Min(1f, fadeToBlackAlpha + globalFadeSpeed); - if (fadeToBlackAlpha >= 1.0) - { - globalFade = false; - if (afterFade != null) - { - afterFadeFunction afterFadeFunction = afterFade; - afterFade(); - if (afterFade != null && afterFade.Equals(afterFadeFunction)) - afterFade = null; - if (nonWarpFade) - fadeToBlack = false; - } - } - } - } - else - InvokeMethodInfo(UpdateControlInput, gameTime); - //InvokeBasePrivateInstancedMethod("UpdateControlInput", gameTime); - //this.UpdateControlInput(gameTime); - } - else if (pauseThenDoFunctionTimer > 0) - { - freezeControls = true; - pauseThenDoFunctionTimer -= gameTime.ElapsedGameTime.Milliseconds; - if (pauseThenDoFunctionTimer <= 0) - { - freezeControls = false; - afterPause?.Invoke(); - } - } - if (gameMode == 3 || gameMode == 2) - { - player.millisecondsPlayed += (uint) gameTime.ElapsedGameTime.Milliseconds; - bool flag = true; - if (currentMinigame != null) - { - if (pauseTime > 0.0) - updatePause(gameTime); - if (fadeToBlack) - { - updateScreenFade(gameTime); - if (fadeToBlackAlpha >= 1.0) - fadeToBlack = false; - } - else - { - if (thumbstickMotionMargin > 0) - thumbstickMotionMargin -= gameTime.ElapsedGameTime.Milliseconds; - if (IsActive) - { - KeyboardState state1 = Keyboard.GetState(); - MouseState state2 = Mouse.GetState(); - GamePadState state3 = GamePad.GetState(PlayerIndex.One); - foreach (Keys keys in state1.GetPressedKeys()) - { - if (!oldKBState.IsKeyDown(keys)) - currentMinigame.receiveKeyPress(keys); - } - if (options.gamepadControls) - { - if (currentMinigame == null) - { - oldMouseState = state2; - oldKBState = state1; - oldPadState = state3; - return; - } - foreach (Buttons b in Utility.getPressedButtons(state3, oldPadState)) - currentMinigame.receiveKeyPress(Utility.mapGamePadButtonToKey(b)); - if (currentMinigame == null) - { - oldMouseState = state2; - oldKBState = state1; - oldPadState = state3; - return; - } - if (state3.ThumbSticks.Right.Y < -0.200000002980232 && oldPadState.ThumbSticks.Right.Y >= -0.200000002980232) - currentMinigame.receiveKeyPress(Keys.Down); - if (state3.ThumbSticks.Right.Y > 0.200000002980232 && oldPadState.ThumbSticks.Right.Y <= 0.200000002980232) - currentMinigame.receiveKeyPress(Keys.Up); - if (state3.ThumbSticks.Right.X < -0.200000002980232 && oldPadState.ThumbSticks.Right.X >= -0.200000002980232) - currentMinigame.receiveKeyPress(Keys.Left); - if (state3.ThumbSticks.Right.X > 0.200000002980232 && oldPadState.ThumbSticks.Right.X <= 0.200000002980232) - currentMinigame.receiveKeyPress(Keys.Right); - if (oldPadState.ThumbSticks.Right.Y < -0.200000002980232 && state3.ThumbSticks.Right.Y >= -0.200000002980232) - currentMinigame.receiveKeyRelease(Keys.Down); - if (oldPadState.ThumbSticks.Right.Y > 0.200000002980232 && state3.ThumbSticks.Right.Y <= 0.200000002980232) - currentMinigame.receiveKeyRelease(Keys.Up); - if (oldPadState.ThumbSticks.Right.X < -0.200000002980232 && state3.ThumbSticks.Right.X >= -0.200000002980232) - currentMinigame.receiveKeyRelease(Keys.Left); - if (oldPadState.ThumbSticks.Right.X > 0.200000002980232 && state3.ThumbSticks.Right.X <= 0.200000002980232) - currentMinigame.receiveKeyRelease(Keys.Right); - if (isGamePadThumbstickInMotion()) - { - setMousePosition(getMouseX() + (int) (state3.ThumbSticks.Left.X * 16.0), getMouseY() - (int) (state3.ThumbSticks.Left.Y * 16.0)); - lastCursorMotionWasMouse = false; - } - else if (getMousePosition().X != getOldMouseX() || getMousePosition().Y != getOldMouseY()) - lastCursorMotionWasMouse = true; - } - foreach (Keys keys in oldKBState.GetPressedKeys()) - { - if (!state1.IsKeyDown(keys)) - currentMinigame.receiveKeyRelease(keys); - } - if (options.gamepadControls) - { - if (currentMinigame == null) - { - oldMouseState = state2; - oldKBState = state1; - oldPadState = state3; - return; - } - if (state3.IsConnected && state3.IsButtonDown(Buttons.X) && !oldPadState.IsButtonDown(Buttons.X)) - currentMinigame.receiveRightClick(getMouseX(), getMouseY(), true); - else if (state3.IsConnected && state3.IsButtonDown(Buttons.A) && !oldPadState.IsButtonDown(Buttons.A)) - currentMinigame.receiveLeftClick(getMouseX(), getMouseY(), true); - else if (state3.IsConnected && !state3.IsButtonDown(Buttons.X) && oldPadState.IsButtonDown(Buttons.X)) - currentMinigame.releaseRightClick(getMouseX(), getMouseY()); - else if (state3.IsConnected && !state3.IsButtonDown(Buttons.A) && oldPadState.IsButtonDown(Buttons.A)) - currentMinigame.releaseLeftClick(getMouseX(), getMouseY()); - foreach (Buttons b in Utility.getPressedButtons(oldPadState, state3)) - currentMinigame.receiveKeyRelease(Utility.mapGamePadButtonToKey(b)); - if (state3.IsConnected && state3.IsButtonDown(Buttons.A)) - currentMinigame?.leftClickHeld(0, 0); - } - if (currentMinigame == null) - { - oldMouseState = state2; - oldKBState = state1; - oldPadState = state3; - return; - } - if (state2.LeftButton == ButtonState.Pressed && oldMouseState.LeftButton != ButtonState.Pressed) - currentMinigame.receiveLeftClick(getMouseX(), getMouseY(), true); - if (state2.RightButton == ButtonState.Pressed && oldMouseState.RightButton != ButtonState.Pressed) - currentMinigame.receiveRightClick(getMouseX(), getMouseY(), true); - if (state2.LeftButton == ButtonState.Released && oldMouseState.LeftButton == ButtonState.Pressed) - currentMinigame.releaseLeftClick(getMouseX(), getMouseY()); - if (state2.RightButton == ButtonState.Released && oldMouseState.RightButton == ButtonState.Pressed) - currentMinigame.releaseLeftClick(getMouseX(), getMouseY()); - if (state2.LeftButton == ButtonState.Pressed && oldMouseState.LeftButton == ButtonState.Pressed) - currentMinigame.leftClickHeld(getMouseX(), getMouseY()); - oldMouseState = state2; - oldKBState = state1; - oldPadState = state3; - } - if (currentMinigame != null && currentMinigame.tick(gameTime)) - { - currentMinigame.unload(); - currentMinigame = null; - fadeIn = true; - fadeToBlackAlpha = 1f; - return; - } - } - flag = IsMultiplayer; - } - else if (farmEvent != null && farmEvent.tickUpdate(gameTime)) - { - farmEvent.makeChangesToLocation(); - timeOfDay = 600; - UpdateOther(gameTime); - displayHUD = true; - farmEvent = null; - currentLocation = getLocationFromName("FarmHouse"); - player.position = Utility.PointToVector2(Utility.getHomeOfFarmer(player).getBedSpot()) * tileSize; - player.position.X -= tileSize; - changeMusicTrack("none"); - currentLocation.resetForPlayerEntry(); - player.forceCanMove(); - freezeControls = false; - displayFarmer = true; - outdoorLight = Color.White; - viewportFreeze = false; - fadeToBlackAlpha = 0.0f; - fadeToBlack = false; - globalFadeToClear(null, 0.02f); - player.mailForTomorrow.Clear(); - showEndOfNightStuff(); - } - if (flag) - { - if (endOfNightMenus.Count() > 0 && activeClickableMenu == null) - activeClickableMenu = endOfNightMenus.Pop(); - if (activeClickableMenu != null) - { - updateActiveMenu(gameTime); - } - else - { - if (pauseTime > 0.0) - updatePause(gameTime); - if (!globalFade && !freezeControls && (activeClickableMenu == null && IsActive)) - InvokeMethodInfo(UpdateControlInput, gameTime); - //InvokeBasePrivateInstancedMethod("UpdateControlInput", gameTime); - //this.UpdateControlInput(gameTime); - } - if (showingEndOfNightStuff && endOfNightMenus.Count() == 0 && activeClickableMenu == null) - { - showingEndOfNightStuff = false; - globalFadeToClear(playMorningSong, 0.02f); - } - if (!showingEndOfNightStuff) - { - if (IsMultiplayer || activeClickableMenu == null && currentMinigame == null) - UpdateGameClock(gameTime); - //this.UpdateCharacters(gameTime); - //this.UpdateLocations(gameTime); - //InvokeBasePrivateInstancedMethod("UpdateCharacters", gameTime); - //InvokeBasePrivateInstancedMethod("UpdateLocations", gameTime); - //UpdateViewPort(false, (Point)InvokeBasePrivateInstancedMethod("getViewportCenter")); - - InvokeMethodInfo(UpdateCharacters, gameTime); - InvokeMethodInfo(UpdateLocations, gameTime); - UpdateViewPort(false, (Point) InvokeMethodInfo(getViewportCenter)); - } - UpdateOther(gameTime); - if (messagePause) - { - KeyboardState state1 = Keyboard.GetState(); - MouseState state2 = Mouse.GetState(); - GamePadState state3 = GamePad.GetState(PlayerIndex.One); - if (isOneOfTheseKeysDown(state1, options.actionButton) && !isOneOfTheseKeysDown(oldKBState, options.actionButton)) - pressActionButton(state1, state2, state3); - oldKBState = state1; - oldPadState = state3; - } - } - } - else - { - //InvokeBasePrivateInstancedMethod("UpdateTitleScreen", gameTime); - InvokeMethodInfo(UpdateTitleScreen, gameTime); - //this.UpdateTitleScreen(gameTime); - if (activeClickableMenu != null) - updateActiveMenu(gameTime); - if (gameMode == 10) - UpdateOther(gameTime); - } - audioEngine?.Update(); - if (multiplayerMode == 2 && gameMode == 3) - server.sendMessages(gameTime); - } - } - catch (Exception ex) - { - Log.Error("An error occurred in the overridden update loop: " + ex); - } - - //typeof (Game).GetMethod("Update", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(this, new object[] {gameTime}); - //base.Update(gameTime); - - #endregion - } - else - { - try - { - base.Update(gameTime); - } - catch (Exception ex) - { - Log.AsyncR("An error occured in the base update loop: " + ex); - Console.ReadKey(); - } - } - - GameEvents.InvokeUpdateTick(); - if (FirstUpdate) - { - GameEvents.InvokeFirstUpdateTick(); - FirstUpdate = false; - } - - if (CurrentUpdateTick % 2 == 0) - GameEvents.InvokeSecondUpdateTick(); - - if (CurrentUpdateTick % 4 == 0) - GameEvents.InvokeFourthUpdateTick(); - - if (CurrentUpdateTick % 8 == 0) - GameEvents.InvokeEighthUpdateTick(); - - if (CurrentUpdateTick % 15 == 0) - GameEvents.InvokeQuarterSecondTick(); - - if (CurrentUpdateTick % 30 == 0) - GameEvents.InvokeHalfSecondTick(); - - if (CurrentUpdateTick % 60 == 0) - GameEvents.InvokeOneSecondTick(); - - CurrentUpdateTick += 1; - if (CurrentUpdateTick >= 60) - CurrentUpdateTick = 0; - - if (KStatePrior != KStateNow) - KStatePrior = KStateNow; - - for (var i = PlayerIndex.One; i <= PlayerIndex.Four; i++) - { - PreviouslyPressedButtons[(int) i] = GetButtonsDown(i); - } - } - - /// - /// XNA Draw Method - /// - /// - protected override void Draw(GameTime gameTime) - { - FramesPerSecond = 1 / (float) gameTime.ElapsedGameTime.TotalSeconds; - - if (Constants.EnableCompletelyOverridingBaseCalls) - { - #region Overridden Draw - - try - { - if (!ZoomLevelIsOne) - { - GraphicsDevice.SetRenderTarget(Screen); - } - - GraphicsDevice.Clear(BgColour); - if (options.showMenuBackground && activeClickableMenu != null && activeClickableMenu.showWithoutTransparencyIfOptionIsSet()) - { - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - activeClickableMenu.drawBackground(spriteBatch); - GraphicsEvents.InvokeOnPreRenderGuiEvent(null, EventArgs.Empty); - activeClickableMenu.draw(spriteBatch); - GraphicsEvents.InvokeOnPostRenderGuiEvent(null, EventArgs.Empty); - spriteBatch.End(); - if (!ZoomLevelIsOne) - { - GraphicsDevice.SetRenderTarget(null); - GraphicsDevice.Clear(BgColour); - spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullNone); - spriteBatch.Draw(Screen, Vector2.Zero, Screen.Bounds, Color.White, 0f, Vector2.Zero, options.zoomLevel, SpriteEffects.None, 1f); - spriteBatch.End(); - } - return; - } - if (gameMode == 11) - { - spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - spriteBatch.DrawString(smoothFont, "Stardew Valley has crashed...", new Vector2(16f, 16f), Color.HotPink); - spriteBatch.DrawString(smoothFont, "Please send the error report or a screenshot of this message to @ConcernedApe. (http://stardewvalley.net/contact/)", new Vector2(16f, 32f), new Color(0, 255, 0)); - spriteBatch.DrawString(smoothFont, parseText(errorMessage, smoothFont, graphics.GraphicsDevice.Viewport.Width), new Vector2(16f, 48f), Color.White); - spriteBatch.End(); - return; - } - if (currentMinigame != null) - { - currentMinigame.draw(spriteBatch); - if (globalFade && !menuUp && (!nameSelectUp || messagePause)) - { - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - spriteBatch.Draw(fadeToBlackRect, graphics.GraphicsDevice.Viewport.Bounds, Color.Black * ((gameMode == 0) ? (1f - fadeToBlackAlpha) : fadeToBlackAlpha)); - spriteBatch.End(); - } - if (!ZoomLevelIsOne) - { - GraphicsDevice.SetRenderTarget(null); - GraphicsDevice.Clear(BgColour); - spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullNone); - spriteBatch.Draw(Screen, Vector2.Zero, Screen.Bounds, Color.White, 0f, Vector2.Zero, options.zoomLevel, SpriteEffects.None, 1f); - spriteBatch.End(); - } - return; - } - if (showingEndOfNightStuff) - { - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - activeClickableMenu?.draw(spriteBatch); - spriteBatch.End(); - if (!ZoomLevelIsOne) - { - GraphicsDevice.SetRenderTarget(null); - GraphicsDevice.Clear(BgColour); - spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullNone); - spriteBatch.Draw(Screen, Vector2.Zero, Screen.Bounds, Color.White, 0f, Vector2.Zero, options.zoomLevel, SpriteEffects.None, 1f); - spriteBatch.End(); - } - return; - } - if (gameMode == 6) - { - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - string text = ""; - int num = 0; - while (num < gameTime.TotalGameTime.TotalMilliseconds % 999.0 / 333.0) - { - text += "."; - num++; - } - SpriteText.drawString(spriteBatch, "Loading" + text, 64, graphics.GraphicsDevice.Viewport.Height - 64, 999, -1, 999, 1f, 1f, false, 0, "Loading..."); - spriteBatch.End(); - if (!ZoomLevelIsOne) - { - GraphicsDevice.SetRenderTarget(null); - GraphicsDevice.Clear(BgColour); - spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullNone); - spriteBatch.Draw(Screen, Vector2.Zero, Screen.Bounds, Color.White, 0f, Vector2.Zero, options.zoomLevel, SpriteEffects.None, 1f); - spriteBatch.End(); - } - return; - } - if (gameMode == 0) - { - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - } - else - { - if (drawLighting) - { - GraphicsDevice.SetRenderTarget(lightmap); - GraphicsDevice.Clear(Color.White * 0f); - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null); - spriteBatch.Draw(staminaRect, lightmap.Bounds, currentLocation.name.Equals("UndergroundMine") ? mine.getLightingColor(gameTime) : ((!ambientLight.Equals(Color.White) && (!isRaining || !currentLocation.isOutdoors)) ? ambientLight : outdoorLight)); - for (int i = 0; i < currentLightSources.Count; i++) - { - if (Utility.isOnScreen(currentLightSources.ElementAt(i).position, (int) (currentLightSources.ElementAt(i).radius * tileSize * 4f))) - { - spriteBatch.Draw(currentLightSources.ElementAt(i).lightTexture, GlobalToLocal(viewport, currentLightSources.ElementAt(i).position) / options.lightingQuality, currentLightSources.ElementAt(i).lightTexture.Bounds, currentLightSources.ElementAt(i).color, 0f, new Vector2(currentLightSources.ElementAt(i).lightTexture.Bounds.Center.X, currentLightSources.ElementAt(i).lightTexture.Bounds.Center.Y), currentLightSources.ElementAt(i).radius / options.lightingQuality, SpriteEffects.None, 0.9f); - } - } - spriteBatch.End(); - GraphicsDevice.SetRenderTarget(ZoomLevelIsOne ? null : Screen); - } - if (bloomDay) - { - bloom?.BeginDraw(); - } - GraphicsDevice.Clear(BgColour); - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - GraphicsEvents.InvokeOnPreRenderEvent(null, EventArgs.Empty); - background?.draw(spriteBatch); - mapDisplayDevice.BeginScene(spriteBatch); - currentLocation.Map.GetLayer("Back").Draw(mapDisplayDevice, viewport, Location.Origin, false, pixelZoom); - currentLocation.drawWater(spriteBatch); - if (CurrentEvent == null) - { - using (List.Enumerator enumerator = currentLocation.characters.GetEnumerator()) - { - while (enumerator.MoveNext()) - { - NPC current = enumerator.Current; - if (current != null && !current.swimming && !current.hideShadow && !current.IsMonster && !currentLocation.shouldShadowBeDrawnAboveBuildingsLayer(current.getTileLocation())) - { - spriteBatch.Draw(shadowTexture, GlobalToLocal(viewport, current.position + new Vector2(current.sprite.spriteWidth * pixelZoom / 2f, current.GetBoundingBox().Height + (current.IsMonster ? 0 : (pixelZoom * 3)))), shadowTexture.Bounds, Color.White, 0f, new Vector2(shadowTexture.Bounds.Center.X, shadowTexture.Bounds.Center.Y), (pixelZoom + current.yJumpOffset / 40f) * current.scale, SpriteEffects.None, Math.Max(0f, current.getStandingY() / 10000f) - 1E-06f); - } - } - goto IL_B30; - } - } - foreach (NPC current2 in CurrentEvent.actors) - { - if (!current2.swimming && !current2.hideShadow && !currentLocation.shouldShadowBeDrawnAboveBuildingsLayer(current2.getTileLocation())) - { - spriteBatch.Draw(shadowTexture, GlobalToLocal(viewport, current2.position + new Vector2(current2.sprite.spriteWidth * pixelZoom / 2f, current2.GetBoundingBox().Height + (current2.IsMonster ? 0 : (pixelZoom * 3)))), shadowTexture.Bounds, Color.White, 0f, new Vector2(shadowTexture.Bounds.Center.X, shadowTexture.Bounds.Center.Y), (pixelZoom + current2.yJumpOffset / 40f) * current2.scale, SpriteEffects.None, Math.Max(0f, current2.getStandingY() / 10000f) - 1E-06f); - } - } - IL_B30: - if (!player.swimming && !player.isRidingHorse() && !currentLocation.shouldShadowBeDrawnAboveBuildingsLayer(player.getTileLocation())) - { - spriteBatch.Draw(shadowTexture, GlobalToLocal(player.position + new Vector2(32f, 24f)), shadowTexture.Bounds, Color.White, 0f, new Vector2(shadowTexture.Bounds.Center.X, shadowTexture.Bounds.Center.Y), 4f - (((player.running || player.usingTool) && player.FarmerSprite.indexInCurrentAnimation > 1) ? (Math.Abs(FarmerRenderer.featureYOffsetPerFrame[player.FarmerSprite.CurrentFrame]) * 0.5f) : 0f), SpriteEffects.None, 0f); - } - currentLocation.Map.GetLayer("Buildings").Draw(mapDisplayDevice, viewport, Location.Origin, false, pixelZoom); - mapDisplayDevice.EndScene(); - spriteBatch.End(); - spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - if (CurrentEvent == null) - { - using (List.Enumerator enumerator3 = currentLocation.characters.GetEnumerator()) - { - while (enumerator3.MoveNext()) - { - NPC current3 = enumerator3.Current; - if (current3 != null && !current3.swimming && !current3.hideShadow && currentLocation.shouldShadowBeDrawnAboveBuildingsLayer(current3.getTileLocation())) - { - spriteBatch.Draw(shadowTexture, GlobalToLocal(viewport, current3.position + new Vector2(current3.sprite.spriteWidth * pixelZoom / 2f, current3.GetBoundingBox().Height + (current3.IsMonster ? 0 : (pixelZoom * 3)))), shadowTexture.Bounds, Color.White, 0f, new Vector2(shadowTexture.Bounds.Center.X, shadowTexture.Bounds.Center.Y), (pixelZoom + current3.yJumpOffset / 40f) * current3.scale, SpriteEffects.None, Math.Max(0f, current3.getStandingY() / 10000f) - 1E-06f); - } - } - goto IL_F5F; - } - } - foreach (NPC current4 in CurrentEvent.actors) - { - if (!current4.swimming && !current4.hideShadow && currentLocation.shouldShadowBeDrawnAboveBuildingsLayer(current4.getTileLocation())) - { - spriteBatch.Draw(shadowTexture, GlobalToLocal(viewport, current4.position + new Vector2(current4.sprite.spriteWidth * pixelZoom / 2f, current4.GetBoundingBox().Height + (current4.IsMonster ? 0 : (pixelZoom * 3)))), shadowTexture.Bounds, Color.White, 0f, new Vector2(shadowTexture.Bounds.Center.X, shadowTexture.Bounds.Center.Y), (pixelZoom + current4.yJumpOffset / 40f) * current4.scale, SpriteEffects.None, Math.Max(0f, current4.getStandingY() / 10000f) - 1E-06f); - } - } - IL_F5F: - if (!player.swimming && !player.isRidingHorse() && currentLocation.shouldShadowBeDrawnAboveBuildingsLayer(player.getTileLocation())) - { - spriteBatch.Draw(shadowTexture, GlobalToLocal(player.position + new Vector2(32f, 24f)), shadowTexture.Bounds, Color.White, 0f, new Vector2(shadowTexture.Bounds.Center.X, shadowTexture.Bounds.Center.Y), 4f - (((player.running || player.usingTool) && player.FarmerSprite.indexInCurrentAnimation > 1) ? (Math.Abs(FarmerRenderer.featureYOffsetPerFrame[player.FarmerSprite.CurrentFrame]) * 0.5f) : 0f), SpriteEffects.None, Math.Max(0.0001f, player.getStandingY() / 10000f + 0.00011f) - 0.0001f); - } - if (displayFarmer) - { - player.draw(spriteBatch); - } - if ((eventUp || killScreen) && !killScreen) - { - currentLocation.currentEvent?.draw(spriteBatch); - } - if (player.currentUpgrade != null && player.currentUpgrade.daysLeftTillUpgradeDone <= 3 && currentLocation.Name.Equals("Farm")) - { - spriteBatch.Draw(player.currentUpgrade.workerTexture, GlobalToLocal(viewport, player.currentUpgrade.positionOfCarpenter), player.currentUpgrade.getSourceRectangle(), Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, (player.currentUpgrade.positionOfCarpenter.Y + tileSize * 3 / 4) / 10000f); - } - currentLocation.draw(spriteBatch); - if (eventUp && currentLocation.currentEvent?.messageToScreen != null) - { - drawWithBorder(currentLocation.currentEvent.messageToScreen, Color.Black, Color.White, new Vector2(graphics.GraphicsDevice.Viewport.TitleSafeArea.Width / 2 - borderFont.MeasureString(currentLocation.currentEvent.messageToScreen).X / 2f, graphics.GraphicsDevice.Viewport.TitleSafeArea.Height - tileSize), 0f, 1f, 0.999f); - } - if (player.ActiveObject == null && (player.UsingTool || pickingTool) && player.CurrentTool != null && (!player.CurrentTool.Name.Equals("Seeds") || pickingTool)) - { - drawTool(player); - } - if (currentLocation.Name.Equals("Farm")) - { - //typeof (Game1).GetMethod("drawFarmBuildings", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(Program.gamePtr, null); - DrawFarmBuildings.Invoke(Program.gamePtr, null); - //this.drawFarmBuildings(); - } - if (tvStation >= 0) - { - spriteBatch.Draw(tvStationTexture, GlobalToLocal(viewport, new Vector2(6 * tileSize + tileSize / 4, 2 * tileSize + tileSize / 2)), new Rectangle(tvStation * 24, 0, 24, 15), Color.White, 0f, Vector2.Zero, 4f, SpriteEffects.None, 1E-08f); - } - if (panMode) - { - spriteBatch.Draw(fadeToBlackRect, new Rectangle((int) Math.Floor((getOldMouseX() + viewport.X) / (double) tileSize) * tileSize - viewport.X, (int) Math.Floor((getOldMouseY() + viewport.Y) / (double) tileSize) * tileSize - viewport.Y, tileSize, tileSize), Color.Lime * 0.75f); - foreach (Warp current5 in currentLocation.warps) - { - spriteBatch.Draw(fadeToBlackRect, new Rectangle(current5.X * tileSize - viewport.X, current5.Y * tileSize - viewport.Y, tileSize, tileSize), Color.Red * 0.75f); - } - } - mapDisplayDevice.BeginScene(spriteBatch); - currentLocation.Map.GetLayer("Front").Draw(mapDisplayDevice, viewport, Location.Origin, false, pixelZoom); - mapDisplayDevice.EndScene(); - currentLocation.drawAboveFrontLayer(spriteBatch); - spriteBatch.End(); - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - if (currentLocation.Name.Equals("Farm") && stats.SeedsSown >= 200u) - { - spriteBatch.Draw(debrisSpriteSheet, GlobalToLocal(viewport, new Vector2(3 * tileSize + tileSize / 4, tileSize + tileSize / 3)), getSourceRectForStandardTileSheet(debrisSpriteSheet, 16), Color.White); - spriteBatch.Draw(debrisSpriteSheet, GlobalToLocal(viewport, new Vector2(4 * tileSize + tileSize, 2 * tileSize + tileSize)), getSourceRectForStandardTileSheet(debrisSpriteSheet, 16), Color.White); - spriteBatch.Draw(debrisSpriteSheet, GlobalToLocal(viewport, new Vector2(5 * tileSize, 2 * tileSize)), getSourceRectForStandardTileSheet(debrisSpriteSheet, 16), Color.White); - spriteBatch.Draw(debrisSpriteSheet, GlobalToLocal(viewport, new Vector2(3 * tileSize + tileSize / 2, 3 * tileSize)), getSourceRectForStandardTileSheet(debrisSpriteSheet, 16), Color.White); - spriteBatch.Draw(debrisSpriteSheet, GlobalToLocal(viewport, new Vector2(5 * tileSize - tileSize / 4, tileSize)), getSourceRectForStandardTileSheet(debrisSpriteSheet, 16), Color.White); - spriteBatch.Draw(debrisSpriteSheet, GlobalToLocal(viewport, new Vector2(4 * tileSize, 3 * tileSize + tileSize / 6)), getSourceRectForStandardTileSheet(debrisSpriteSheet, 16), Color.White); - spriteBatch.Draw(debrisSpriteSheet, GlobalToLocal(viewport, new Vector2(4 * tileSize + tileSize / 5, 2 * tileSize + tileSize / 3)), getSourceRectForStandardTileSheet(debrisSpriteSheet, 16), Color.White); - } - if (displayFarmer && player.ActiveObject != null && player.ActiveObject.bigCraftable && checkBigCraftableBoundariesForFrontLayer() && currentLocation.Map.GetLayer("Front").PickTile(new Location(player.getStandingX(), player.getStandingY()), viewport.Size) == null) - { - drawPlayerHeldObject(player); - } - else if (displayFarmer && player.ActiveObject != null && ((currentLocation.Map.GetLayer("Front").PickTile(new Location((int) player.position.X, (int) player.position.Y - tileSize * 3 / 5), viewport.Size) != null && !currentLocation.Map.GetLayer("Front").PickTile(new Location((int) player.position.X, (int) player.position.Y - tileSize * 3 / 5), viewport.Size).TileIndexProperties.ContainsKey("FrontAlways")) || (currentLocation.Map.GetLayer("Front").PickTile(new Location(player.GetBoundingBox().Right, (int) player.position.Y - tileSize * 3 / 5), viewport.Size) != null && !currentLocation.Map.GetLayer("Front").PickTile(new Location(player.GetBoundingBox().Right, (int) player.position.Y - tileSize * 3 / 5), viewport.Size).TileIndexProperties.ContainsKey("FrontAlways")))) - { - drawPlayerHeldObject(player); - } - if ((player.UsingTool || pickingTool) && player.CurrentTool != null && (!player.CurrentTool.Name.Equals("Seeds") || pickingTool) && currentLocation.Map.GetLayer("Front").PickTile(new Location(player.getStandingX(), (int) player.position.Y - tileSize * 3 / 5), viewport.Size) != null && currentLocation.Map.GetLayer("Front").PickTile(new Location(player.getStandingX(), player.getStandingY()), viewport.Size) == null) - { - drawTool(player); - } - if (currentLocation.Map.GetLayer("AlwaysFront") != null) - { - mapDisplayDevice.BeginScene(spriteBatch); - currentLocation.Map.GetLayer("AlwaysFront").Draw(mapDisplayDevice, viewport, Location.Origin, false, pixelZoom); - mapDisplayDevice.EndScene(); - } - if (toolHold > 400f && player.CurrentTool.UpgradeLevel >= 1 && player.canReleaseTool) - { - Color color = Color.White; - switch ((int) (toolHold / 600f) + 2) - { - case 1: - color = Tool.copperColor; - break; - case 2: - color = Tool.steelColor; - break; - case 3: - color = Tool.goldColor; - break; - case 4: - color = Tool.iridiumColor; - break; - } - spriteBatch.Draw(littleEffect, new Rectangle((int) player.getLocalPosition(viewport).X - 2, (int) player.getLocalPosition(viewport).Y - (player.CurrentTool.Name.Equals("Watering Can") ? 0 : tileSize) - 2, (int) (toolHold % 600f * 0.08f) + 4, tileSize / 8 + 4), Color.Black); - spriteBatch.Draw(littleEffect, new Rectangle((int) player.getLocalPosition(viewport).X, (int) player.getLocalPosition(viewport).Y - (player.CurrentTool.Name.Equals("Watering Can") ? 0 : tileSize), (int) (toolHold % 600f * 0.08f), tileSize / 8), color); - } - if (isDebrisWeather && currentLocation.IsOutdoors && !currentLocation.ignoreDebrisWeather && !currentLocation.Name.Equals("Desert") && viewport.X > -10) - { - foreach (WeatherDebris current6 in debrisWeather) - { - current6.draw(spriteBatch); - } - } - farmEvent?.draw(spriteBatch); - if (currentLocation.LightLevel > 0f && timeOfDay < 2000) - { - spriteBatch.Draw(fadeToBlackRect, graphics.GraphicsDevice.Viewport.Bounds, Color.Black * currentLocation.LightLevel); - } - if (screenGlow) - { - spriteBatch.Draw(fadeToBlackRect, graphics.GraphicsDevice.Viewport.Bounds, screenGlowColor * screenGlowAlpha); - } - currentLocation.drawAboveAlwaysFrontLayer(spriteBatch); - if (player.CurrentTool is FishingRod && ((player.CurrentTool as FishingRod).isTimingCast || (player.CurrentTool as FishingRod).castingChosenCountdown > 0f || (player.CurrentTool as FishingRod).fishCaught || (player.CurrentTool as FishingRod).showingTreasure)) - { - player.CurrentTool.draw(spriteBatch); - } - if (isRaining && currentLocation.IsOutdoors && !currentLocation.Name.Equals("Desert") && !(currentLocation is Summit) && (!eventUp || currentLocation.isTileOnMap(new Vector2(viewport.X / tileSize, viewport.Y / tileSize)))) - { - for (int j = 0; j < rainDrops.Length; j++) - { - spriteBatch.Draw(rainTexture, rainDrops[j].position, getSourceRectForStandardTileSheet(rainTexture, rainDrops[j].frame), Color.White); - } - } - - spriteBatch.End(); - - //base.Draw(gameTime); - - spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - if (eventUp && currentLocation.currentEvent != null) - { - foreach (NPC current7 in currentLocation.currentEvent.actors) - { - if (current7.isEmoting) - { - Vector2 localPosition = current7.getLocalPosition(viewport); - localPosition.Y -= tileSize * 2 + pixelZoom * 3; - if (current7.age == 2) - { - localPosition.Y += tileSize / 2; - } - else if (current7.gender == 1) - { - localPosition.Y += tileSize / 6; - } - spriteBatch.Draw(emoteSpriteSheet, localPosition, new Rectangle(current7.CurrentEmoteIndex * (tileSize / 4) % emoteSpriteSheet.Width, current7.CurrentEmoteIndex * (tileSize / 4) / emoteSpriteSheet.Width * (tileSize / 4), tileSize / 4, tileSize / 4), Color.White, 0f, Vector2.Zero, 4f, SpriteEffects.None, current7.getStandingY() / 10000f); - } - } - } - spriteBatch.End(); - if (drawLighting) - { - spriteBatch.Begin(SpriteSortMode.Deferred, new BlendState - { - ColorBlendFunction = BlendFunction.ReverseSubtract, - ColorDestinationBlend = Blend.One, - ColorSourceBlend = Blend.SourceColor - }, SamplerState.LinearClamp, null, null); - spriteBatch.Draw(lightmap, Vector2.Zero, lightmap.Bounds, Color.White, 0f, Vector2.Zero, options.lightingQuality, SpriteEffects.None, 1f); - if (isRaining && currentLocation.isOutdoors && !(currentLocation is Desert)) - { - spriteBatch.Draw(staminaRect, graphics.GraphicsDevice.Viewport.Bounds, Color.OrangeRed * 0.45f); - } - spriteBatch.End(); - } - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - if (drawGrid) - { - int num2 = -viewport.X % tileSize; - float num3 = -(float) viewport.Y % tileSize; - for (int k = num2; k < graphics.GraphicsDevice.Viewport.Width; k += tileSize) - { - spriteBatch.Draw(staminaRect, new Rectangle(k, (int) num3, 1, graphics.GraphicsDevice.Viewport.Height), Color.Red * 0.5f); - } - for (float num4 = num3; num4 < (float) graphics.GraphicsDevice.Viewport.Height; num4 += (float) tileSize) - { - spriteBatch.Draw(staminaRect, new Rectangle(num2, (int) num4, graphics.GraphicsDevice.Viewport.Width, 1), Color.Red * 0.5f); - } - } - if (currentBillboard != 0) - { - drawBillboard(); - } - - GraphicsEvents.InvokeOnPreRenderHudEventNoCheck(null, EventArgs.Empty); - if ((displayHUD || eventUp) && currentBillboard == 0 && gameMode == 3 && !freezeControls && !panMode) - { - GraphicsEvents.InvokeOnPreRenderHudEvent(null, EventArgs.Empty); - //typeof (Game1).GetMethod("drawHUD", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(Program.gamePtr, null); - DrawHUD.Invoke(Program.gamePtr, null); - GraphicsEvents.InvokeOnPostRenderHudEvent(null, EventArgs.Empty); - //this.drawHUD(); - } - else if (activeClickableMenu == null && farmEvent == null) - { - spriteBatch.Draw(mouseCursors, new Vector2(getOldMouseX(), getOldMouseY()), getSourceRectForStandardTileSheet(mouseCursors, 0, 16, 16), Color.White, 0f, Vector2.Zero, 4f + dialogueButtonScale / 150f, SpriteEffects.None, 1f); - } - GraphicsEvents.InvokeOnPostRenderHudEventNoCheck(null, EventArgs.Empty); - - if (hudMessages.Any() && (!eventUp || isFestival())) - { - for (int l = hudMessages.Count - 1; l >= 0; l--) - { - hudMessages[l].draw(spriteBatch, l); - } - } - } - farmEvent?.draw(spriteBatch); - if (dialogueUp && !nameSelectUp && !messagePause && !(activeClickableMenu is DialogueBox)) - { - //typeof (Game1).GetMethod("drawDialogueBox", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(Program.gamePtr, null); - DrawDialogueBox.Invoke(Program.gamePtr, null); - //this.drawDialogueBox(); - } - if (progressBar) - { - spriteBatch.Draw(fadeToBlackRect, new Rectangle((graphics.GraphicsDevice.Viewport.TitleSafeArea.Width - dialogueWidth) / 2, graphics.GraphicsDevice.Viewport.TitleSafeArea.Bottom - tileSize * 2, dialogueWidth, tileSize / 2), Color.LightGray); - spriteBatch.Draw(staminaRect, new Rectangle((graphics.GraphicsDevice.Viewport.TitleSafeArea.Width - dialogueWidth) / 2, graphics.GraphicsDevice.Viewport.TitleSafeArea.Bottom - tileSize * 2, (int) (pauseAccumulator / pauseTime * dialogueWidth), tileSize / 2), Color.DimGray); - } - if (eventUp) - { - currentLocation.currentEvent?.drawAfterMap(spriteBatch); - } - if (isRaining && currentLocation.isOutdoors && !(currentLocation is Desert)) - { - spriteBatch.Draw(staminaRect, graphics.GraphicsDevice.Viewport.Bounds, Color.Blue * 0.2f); - } - if ((fadeToBlack || globalFade) && !menuUp && (!nameSelectUp || messagePause)) - { - spriteBatch.Draw(fadeToBlackRect, graphics.GraphicsDevice.Viewport.Bounds, Color.Black * ((gameMode == 0) ? (1f - fadeToBlackAlpha) : fadeToBlackAlpha)); - } - else if (flashAlpha > 0f) - { - if (options.screenFlash) - { - spriteBatch.Draw(fadeToBlackRect, graphics.GraphicsDevice.Viewport.Bounds, Color.White * Math.Min(1f, flashAlpha)); - } - flashAlpha -= 0.1f; - } - if ((messagePause || globalFade) && dialogueUp) - { - //typeof (Game1).GetMethod("drawDialogueBox", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(Program.gamePtr, null); - DrawDialogueBox.Invoke(Program.gamePtr, null); - //this.drawDialogueBox(); - } - foreach (TemporaryAnimatedSprite current8 in screenOverlayTempSprites) - { - current8.draw(spriteBatch, true); - } - if (debugMode) - { - spriteBatch.DrawString(smallFont, string.Concat(new object[] - { - panMode ? ((getOldMouseX() + viewport.X) / tileSize + "," + (getOldMouseY() + viewport.Y) / tileSize) : string.Concat("aplayer: ", player.getStandingX() / tileSize, ", ", player.getStandingY() / tileSize), - Environment.NewLine, - "debugOutput: ", - debugOutput - }), new Vector2(GraphicsDevice.Viewport.TitleSafeArea.X, GraphicsDevice.Viewport.TitleSafeArea.Y), Color.Red, 0f, Vector2.Zero, 1f, SpriteEffects.None, 0.9999999f); - } - if (inputMode) - { - spriteBatch.DrawString(smallFont, "Input: " + debugInput, new Vector2(tileSize, tileSize * 3), Color.Purple); - } - if (showKeyHelp) - { - spriteBatch.DrawString(smallFont, keyHelpString, new Vector2(tileSize, viewport.Height - tileSize - (dialogueUp ? (tileSize * 3 + (isQuestion ? (questionChoices.Count * tileSize) : 0)) : 0) - smallFont.MeasureString(keyHelpString).Y), Color.LightGray, 0f, Vector2.Zero, 1f, SpriteEffects.None, 0.9999999f); - } - - GraphicsEvents.InvokeOnPreRenderGuiEventNoCheck(null, EventArgs.Empty); - if (activeClickableMenu != null) - { - GraphicsEvents.InvokeOnPreRenderGuiEvent(null, EventArgs.Empty); - activeClickableMenu.draw(spriteBatch); - GraphicsEvents.InvokeOnPostRenderGuiEvent(null, EventArgs.Empty); - } - else - { - farmEvent?.drawAboveEverything(spriteBatch); - } - GraphicsEvents.InvokeOnPostRenderGuiEventNoCheck(null, EventArgs.Empty); - - GraphicsEvents.InvokeOnPostRenderEvent(null, EventArgs.Empty); - spriteBatch.End(); - - GraphicsEvents.InvokeDrawInRenderTargetTick(); - - if (!ZoomLevelIsOne) - { - GraphicsDevice.SetRenderTarget(null); - GraphicsDevice.Clear(BgColour); - spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullNone); - spriteBatch.Draw(Screen, Vector2.Zero, Screen.Bounds, Color.White, 0f, Vector2.Zero, options.zoomLevel, SpriteEffects.None, 1f); - spriteBatch.End(); - } - - GraphicsEvents.InvokeDrawTick(); - } - catch (Exception ex) - { - Log.Error("An error occured in the overridden draw loop: " + ex); - } - - #endregion - } - else - { - #region Base Draw Call - - try - { - base.Draw(gameTime); - } - catch (Exception ex) - { - Log.AsyncR("An error occured in the base draw loop: " + ex); - Console.ReadKey(); - } - - GraphicsEvents.InvokeDrawTick(); - - if (Constants.EnableDrawingIntoRenderTarget) - { - if (!options.zoomLevel.Equals(1.0f)) - { - if (Screen.RenderTargetUsage == RenderTargetUsage.DiscardContents) - { - Screen = new RenderTarget2D(graphics.GraphicsDevice, Math.Min(4096, (int) (Window.ClientBounds.Width * (1.0 / options.zoomLevel))), - Math.Min(4096, (int) (Window.ClientBounds.Height * (1.0 / options.zoomLevel))), - false, SurfaceFormat.Color, DepthFormat.Depth16, 1, RenderTargetUsage.PreserveContents); - } - GraphicsDevice.SetRenderTarget(Screen); - } - - // Not beginning the batch due to inconsistancies with the standard draw tick... - //spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - - GraphicsEvents.InvokeDrawInRenderTargetTick(); - - //spriteBatch.End(); - - //Re-draw the HUD - spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointClamp, null, null); - activeClickableMenu?.draw(spriteBatch); - /* - if ((displayHUD || eventUp) && currentBillboard == 0 && gameMode == 3 && !freezeControls && !panMode) - typeof (Game1).GetMethod("drawHUD", BindingFlags.NonPublic | BindingFlags.Instance)?.Invoke(Program.gamePtr, null); - */ - spriteBatch.Draw(mouseCursors, new Vector2(getOldMouseX(), getOldMouseY()), getSourceRectForStandardTileSheet(mouseCursors, options.gamepadControls ? 44 : 0, 16, 16), Color.White, 0.0f, Vector2.Zero, pixelZoom + dialogueButtonScale / 150f, SpriteEffects.None, 1f); - - spriteBatch.End(); - - if (!options.zoomLevel.Equals(1.0f)) - { - GraphicsDevice.SetRenderTarget(null); - spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullNone); - spriteBatch.Draw(Screen, Vector2.Zero, Screen.Bounds, Color.White, 0.0f, Vector2.Zero, options.zoomLevel, SpriteEffects.None, 1f); - spriteBatch.End(); - } - } - - #endregion - } - - if (Debug) - { - spriteBatch.Begin(); - - int i = 0; - while (DebugMessageQueue.Any()) - { - string s = DebugMessageQueue.Dequeue(); - spriteBatch.DrawString(smoothFont, s, new Vector2(0, i * 14), Color.CornflowerBlue); - i++; - } - GraphicsEvents.InvokeDrawDebug(null, EventArgs.Empty); - - spriteBatch.End(); - } - else - { - DebugMessageQueue.Clear(); - } - } - - [Obsolete("Do not use at this time.")] - // ReSharper disable once UnusedMember.Local - private static int RegisterModItem(SObject modItem) - { - if (modItem.HasBeenRegistered) - { - Log.AsyncR($"The item {modItem.Name} has already been registered with ID {modItem.RegisteredId}"); - return modItem.RegisteredId; - } - var newId = LowestModItemID; - if (ModItems.Count > 0) - newId = Math.Max(LowestModItemID, ModItems.OrderBy(x => x.Key).First().Key + 1); - ModItems.Add(newId, modItem); - modItem.HasBeenRegistered = true; - modItem.RegisteredId = newId; - return newId; - } - - [Obsolete("Do not use at this time.")] - // ReSharper disable once UnusedMember.Local - private static SObject PullModItemFromDict(int id, bool isIndex) - { - if (isIndex) - { - if (ModItems.ElementAtOrDefault(id).Value != null) - { - return ModItems.ElementAt(id).Value.Clone(); - } - Log.AsyncR("ModItem Dictionary does not contain index: " + id); - return null; - } - if (ModItems.ContainsKey(id)) - { - return ModItems[id].Clone(); - } - Log.AsyncR("ModItem Dictionary does not contain ID: " + id); - return null; - } - - private void UpdateEventCalls() - { - KStateNow = Keyboard.GetState(); - - MStateNow = Mouse.GetState(); - - foreach (var k in FramePressedKeys) - ControlEvents.InvokeKeyPressed(k); - - foreach (var k in FrameReleasedKeys) - ControlEvents.InvokeKeyReleased(k); - - for (var i = PlayerIndex.One; i <= PlayerIndex.Four; i++) - { - var buttons = GetFramePressedButtons(i); - foreach (var b in buttons) - { - if (b == Buttons.LeftTrigger || b == Buttons.RightTrigger) - { - ControlEvents.InvokeTriggerPressed(i, b, b == Buttons.LeftTrigger ? GamePad.GetState(i).Triggers.Left : GamePad.GetState(i).Triggers.Right); - } - else - { - ControlEvents.InvokeButtonPressed(i, b); - } - } - } - - for (var i = PlayerIndex.One; i <= PlayerIndex.Four; i++) - { - foreach (var b in GetFrameReleasedButtons(i)) - { - if (b == Buttons.LeftTrigger || b == Buttons.RightTrigger) - { - ControlEvents.InvokeTriggerReleased(i, b, b == Buttons.LeftTrigger ? GamePad.GetState(i).Triggers.Left : GamePad.GetState(i).Triggers.Right); - } - else - { - ControlEvents.InvokeButtonReleased(i, b); - } - } - } - - - if (KStateNow != KStatePrior) - { - ControlEvents.InvokeKeyboardChanged(KStatePrior, KStateNow); - } - - if (MStateNow != MStatePrior) - { - ControlEvents.InvokeMouseChanged(MStatePrior, MStateNow); - MStatePrior = MStateNow; - } - - if (activeClickableMenu != null && activeClickableMenu != PreviousActiveMenu) - { - MenuEvents.InvokeMenuChanged(PreviousActiveMenu, activeClickableMenu); - PreviousActiveMenu = activeClickableMenu; - WasMenuClosedInvoked = false; - } - - if (!WasMenuClosedInvoked && PreviousActiveMenu != null && activeClickableMenu == null) - { - MenuEvents.InvokeMenuClosed(PreviousActiveMenu); - WasMenuClosedInvoked = true; - } - - if (locations.GetHash() != PreviousGameLocations) - { - LocationEvents.InvokeLocationsChanged(locations); - PreviousGameLocations = locations.GetHash(); - } - - if (currentLocation != PreviousGameLocation) - { - LocationEvents.InvokeCurrentLocationChanged(PreviousGameLocation, currentLocation); - PreviousGameLocation = currentLocation; - } - - if (player != null && player != PreviousFarmer) - { - PlayerEvents.InvokeFarmerChanged(PreviousFarmer, player); - PreviousFarmer = player; - } - - if (player != null && player.combatLevel != PreviousCombatLevel) - { - PlayerEvents.InvokeLeveledUp(EventArgsLevelUp.LevelType.Combat, player.combatLevel); - PreviousCombatLevel = player.combatLevel; - } - - if (player != null && player.farmingLevel != PreviousFarmingLevel) - { - PlayerEvents.InvokeLeveledUp(EventArgsLevelUp.LevelType.Farming, player.farmingLevel); - PreviousFarmingLevel = player.farmingLevel; - } - - if (player != null && player.fishingLevel != PreviousFishingLevel) - { - PlayerEvents.InvokeLeveledUp(EventArgsLevelUp.LevelType.Fishing, player.fishingLevel); - PreviousFishingLevel = player.fishingLevel; - } - - if (player != null && player.foragingLevel != PreviousForagingLevel) - { - PlayerEvents.InvokeLeveledUp(EventArgsLevelUp.LevelType.Foraging, player.foragingLevel); - PreviousForagingLevel = player.foragingLevel; - } - - if (player != null && player.miningLevel != PreviousMiningLevel) - { - PlayerEvents.InvokeLeveledUp(EventArgsLevelUp.LevelType.Mining, player.miningLevel); - PreviousMiningLevel = player.miningLevel; - } - - if (player != null && player.luckLevel != PreviousLuckLevel) - { - PlayerEvents.InvokeLeveledUp(EventArgsLevelUp.LevelType.Luck, player.luckLevel); - PreviousLuckLevel = player.luckLevel; - } - - List changedItems; - if (player != null && HasInventoryChanged(player.items, out changedItems)) - { - PlayerEvents.InvokeInventoryChanged(player.items, changedItems); - PreviousItems = player.items.Where(n => n != null).ToDictionary(n => n, n => n.Stack); - } - - var objectHash = currentLocation?.objects?.GetHash(); - if (objectHash != null && PreviousLocationObjects != objectHash) - { - LocationEvents.InvokeOnNewLocationObject(currentLocation.objects); - PreviousLocationObjects = objectHash ?? -1; - } - - if (timeOfDay != PreviousTimeOfDay) - { - TimeEvents.InvokeTimeOfDayChanged(PreviousTimeOfDay, timeOfDay); - PreviousTimeOfDay = timeOfDay; - } - - if (dayOfMonth != PreviousDayOfMonth) - { - TimeEvents.InvokeDayOfMonthChanged(PreviousDayOfMonth, dayOfMonth); - PreviousDayOfMonth = dayOfMonth; - } - - if (currentSeason != PreviousSeasonOfYear) - { - TimeEvents.InvokeSeasonOfYearChanged(PreviousSeasonOfYear, currentSeason); - PreviousSeasonOfYear = currentSeason; - } - - if (year != PreviousYearOfGame) - { - TimeEvents.InvokeYearOfGameChanged(PreviousYearOfGame, year); - PreviousYearOfGame = year; - } - - //NOTE THAT THIS MUST CHECK BEFORE SETTING IT TO TRUE BECAUSE OF SOME SILLY ISSUES - if (FireLoadedGameEvent) - { - PlayerEvents.InvokeLoadedGame(new EventArgsLoadedGameChanged(hasLoadedGame)); - FireLoadedGameEvent = false; - } - - if (hasLoadedGame != PreviouslyLoadedGame) - { - FireLoadedGameEvent = true; - PreviouslyLoadedGame = hasLoadedGame; - } - - if (mine != null && PreviousMineLevel != mine.mineLevel) - { - MineEvents.InvokeMineLevelChanged(PreviousMineLevel, mine.mineLevel); - PreviousMineLevel = mine.mineLevel; - } - - if (PreviousIsNewDay != newDay) - { - TimeEvents.InvokeOnNewDay(PreviousDayOfMonth, dayOfMonth, newDay); - PreviousIsNewDay = newDay; - } - } - - private bool HasInventoryChanged(List items, out List changedItems) - { - changedItems = new List(); - IEnumerable actualItems = items.Where(n => n != null).ToArray(); - foreach (var item in actualItems) - { - if (PreviousItems != null && PreviousItems.ContainsKey(item)) - { - if (PreviousItems[item] != item.Stack) - { - changedItems.Add(new ItemStackChange {Item = item, StackChange = item.Stack - PreviousItems[item], ChangeType = ChangeType.StackChange}); - } - } - else - { - changedItems.Add(new ItemStackChange {Item = item, StackChange = item.Stack, ChangeType = ChangeType.Added}); - } - } - - if (PreviousItems != null) - { - changedItems.AddRange(PreviousItems.Where(n => actualItems.All(i => i != n.Key)).Select(n => - new ItemStackChange {Item = n.Key, StackChange = -n.Key.Stack, ChangeType = ChangeType.Removed})); - } - - return changedItems.Any(); - } - - /// - /// Invokes a private, non-static method in Game1 via Reflection - /// - /// The name of the method - /// Any parameters needed - /// Whatever the method normally returns. Null if void. - [Obsolete("This is very slow. Cache the method info and then invoke it with InvokeMethodInfo().")] - public static object InvokeBasePrivateInstancedMethod(string name, params object[] parameters) - { - try - { - return typeof(Game1).GetMethod(name, BindingFlags.NonPublic | BindingFlags.Instance).Invoke(Program.gamePtr, parameters); - } - catch - { - Log.AsyncR("Failed to call base method: " + name); - return null; - } - } - - /// - /// Invokes a given method info with the supplied parameters - /// - /// - /// - /// - public static object InvokeMethodInfo(MethodInfo mi, params object[] parameters) - { - try - { - return mi.Invoke(Program.gamePtr, parameters); - } - catch - { - Log.AsyncR("Failed to call base method: " + mi.Name); - return null; - } - } - - /// - /// Queue's a message to be drawn in Debug mode (F3) - /// - /// - public static bool QueueDebugMessage(string message) - { - if (!Debug) - return false; - - if (DebugMessageQueue.Count > 32) - return false; - - DebugMessageQueue.Enqueue(message); - return true; - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Inheritance/SObject.cs b/StardewModdingAPI/Inheritance/SObject.cs deleted file mode 100644 index 639b85b1..00000000 --- a/StardewModdingAPI/Inheritance/SObject.cs +++ /dev/null @@ -1,277 +0,0 @@ -using System; -using System.Xml.Serialization; -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Graphics; -using StardewValley; -using Object = StardewValley.Object; - -#pragma warning disable 1591 - -namespace StardewModdingAPI.Inheritance -{ - [Obsolete("Do not use at this time.")] - public class SObject : Object - { - public SObject() - { - name = "Modded Item Name"; - Description = "Modded Item Description"; - CategoryName = "Modded Item Category"; - Category = 4163; - CategoryColour = Color.White; - IsPassable = false; - IsPlaceable = false; - boundingBox = new Rectangle(0, 0, 64, 64); - MaxStackSize = 999; - - type = "interactive"; - } - - 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; } - public Color CategoryColour { get; set; } - public bool IsPassable { get; set; } - public bool IsPlaceable { get; set; } - public bool HasBeenRegistered { get; set; } - public int RegisteredId { get; set; } - - public int MaxStackSize { get; set; } - - public bool WallMounted { get; set; } - public Vector2 DrawPosition { get; set; } - - public bool FlaggedForPickup { get; set; } - - [XmlIgnore] - public Vector2 CurrentMouse { get; protected set; } - - [XmlIgnore] - public Vector2 PlacedAt { get; protected set; } - - public override int Stack - { - get { return stack; } - set { stack = value; } - } - - public override string getDescription() - { - return Description; - } - - public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1) - { - if (Texture != null) - { - spriteBatch.Draw(Texture, Game1.GlobalToLocal(Game1.viewport, new Vector2(x * Game1.tileSize + Game1.tileSize / 2 + (shakeTimer > 0 ? Game1.random.Next(-1, 2) : 0), y * Game1.tileSize + Game1.tileSize / 2 + (shakeTimer > 0 ? Game1.random.Next(-1, 2) : 0))), Game1.currentLocation.getSourceRectForObject(ParentSheetIndex), Color.White * alpha, 0f, new Vector2(8f, 8f), scale.Y > 1f ? getScale().Y : Game1.pixelZoom, flipped ? SpriteEffects.FlipHorizontally : SpriteEffects.None, (isPassable() ? getBoundingBox(new Vector2(x, y)).Top : getBoundingBox(new Vector2(x, y)).Bottom) / 10000f); - } - } - - public new void drawAsProp(SpriteBatch b) - { - } - - public override void draw(SpriteBatch spriteBatch, int xNonTile, int yNonTile, float layerDepth, float alpha = 1) - { - Log.Debug("THIS DRAW FUNCTION IS NOT IMPLEMENTED I WANT TO KNOW WHERE IT IS CALLED"); - //try - //{ - // if (Texture != null) - // { - // int targSize = Game1.tileSize; - // int midX = (xNonTile) + 32; - // int midY = (yNonTile) + 32; - - // int targX = midX - targSize / 2; - // int targY = midY - targSize / 2; - - // 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, layerDepth); - // //spriteBatch.Draw(Program.DebugPixel, targ, null, Color.Red, 0, Vector2.Zero, SpriteEffects.None, layerDepth); - // /* - // spriteBatch.DrawString(Game1.dialogueFont, "TARG: " + targ, new Vector2(128, 0), Color.Red); - // spriteBatch.DrawString(Game1.dialogueFont, ".", new Vector2(targX * 0.5f, targY), Color.Orange); - // spriteBatch.DrawString(Game1.dialogueFont, ".", new Vector2(targX, targY), Color.Red); - // spriteBatch.DrawString(Game1.dialogueFont, ".", new Vector2(targX * 1.5f, targY), Color.Yellow); - // spriteBatch.DrawString(Game1.dialogueFont, ".", new Vector2(targX * 2f, targY), Color.Green); - // */ - // } - //} - //catch (Exception ex) - //{ - // Log.AsyncR(ex.ToString()); - // Console.ReadKey(); - //} - } - - public override void drawInMenu(SpriteBatch spriteBatch, Vector2 location, float scaleSize, float transparency, float layerDepth, bool drawStackNumber) - { - if (isRecipe) - { - transparency = 0.5f; - scaleSize *= 0.75f; - } - - if (Texture != null) - { - var targSize = (int) (64 * scaleSize * 0.9f); - var midX = (int) (location.X + 32); - var midY = (int) (location.Y + 32); - - var targX = midX - targSize / 2; - var targY = midY - targSize / 2; - - spriteBatch.Draw(Texture, new Rectangle(targX, targY, targSize, targSize), null, new Color(255, 255, 255, transparency), 0, Vector2.Zero, SpriteEffects.None, layerDepth); - } - if (drawStackNumber) - { - var _scale = 0.5f + scaleSize; - Game1.drawWithBorder(stack.ToString(), Color.Black, Color.White, location + new Vector2(Game1.tileSize - Game1.tinyFont.MeasureString(string.Concat(stack.ToString())).X * _scale, Game1.tileSize - (float) ((double) Game1.tinyFont.MeasureString(string.Concat(stack.ToString())).Y * 3.0f / 4.0f) * _scale), 0.0f, _scale, 1f, true); - } - } - - public override void drawWhenHeld(SpriteBatch spriteBatch, Vector2 objectPosition, Farmer f) - { - if (Texture != null) - { - var targSize = 64; - var midX = (int) (objectPosition.X + 32); - var midY = (int) (objectPosition.Y + 32); - - var targX = midX - targSize / 2; - var targY = midY - targSize / 2; - - spriteBatch.Draw(Texture, new Rectangle(targX, targY, targSize, targSize), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, (f.getStandingY() + 2) / 10000f); - } - } - - public override Color getCategoryColor() - { - return CategoryColour; - } - - public override string getCategoryName() - { - if (string.IsNullOrEmpty(CategoryName)) - return "Modded Item"; - return CategoryName; - } - - public override bool isPassable() - { - return IsPassable; - } - - public override bool isPlaceable() - { - return IsPlaceable; - } - - public override int maximumStackSize() - { - return MaxStackSize; - } - - public SObject Clone() - { - var toRet = new SObject - { - Name = Name, - CategoryName = CategoryName, - Description = Description, - Texture = Texture, - IsPassable = IsPassable, - IsPlaceable = IsPlaceable, - quality = quality, - scale = scale, - isSpawnedObject = isSpawnedObject, - isRecipe = isRecipe, - questItem = questItem, - stack = 1, - HasBeenRegistered = HasBeenRegistered, - RegisteredId = RegisteredId - }; - - - return toRet; - } - - public override Item getOne() - { - return Clone(); - } - - public override void actionWhenBeingHeld(Farmer who) - { - var x = Game1.oldMouseState.X + Game1.viewport.X; - var y = Game1.oldMouseState.Y + Game1.viewport.Y; - - x = x / Game1.tileSize; - y = y / Game1.tileSize; - - CurrentMouse = new Vector2(x, y); - //Program.LogDebug(canBePlacedHere(Game1.currentLocation, CurrentMouse)); - base.actionWhenBeingHeld(who); - } - - public override bool canBePlacedHere(GameLocation l, Vector2 tile) - { - //Program.LogDebug(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) - { - if (Game1.didPlayerJustRightClick()) - return false; - - x = x / Game1.tileSize; - y = y / Game1.tileSize; - - //Program.LogDebug(x + " - " + y); - //Console.ReadKey(); - - var key = new Vector2(x, y); - - if (!canBePlacedHere(location, key)) - return false; - - var s = Clone(); - - s.PlacedAt = key; - s.boundingBox = new Rectangle(x / Game1.tileSize * Game1.tileSize, y / Game1.tileSize * Game1.tileSize, boundingBox.Width, boundingBox.Height); - - location.objects.Add(key, s); - Log.Async($"{GetHashCode()} - {s.GetHashCode()}"); - - return true; - } - - public override void actionOnPlayerEntry() - { - //base.actionOnPlayerEntry(); - } - - public override void drawPlacementBounds(SpriteBatch spriteBatch, GameLocation location) - { - if (canBePlacedHere(location, CurrentMouse)) - { - var targSize = Game1.tileSize; - - var x = Game1.oldMouseState.X + Game1.viewport.X; - var y = Game1.oldMouseState.Y + Game1.viewport.Y; - spriteBatch.Draw(Game1.mouseCursors, new Vector2(x / Game1.tileSize * Game1.tileSize - Game1.viewport.X, y / Game1.tileSize * Game1.tileSize - Game1.viewport.Y), new Rectangle(Utility.playerCanPlaceItemHere(location, this, x, y, Game1.player) ? 194 : 210, 388, 16, 16), Color.White, 0.0f, Vector2.Zero, Game1.pixelZoom, SpriteEffects.None, 0.01f); - } - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/JsonResolver.cs b/StardewModdingAPI/JsonResolver.cs deleted file mode 100644 index b6e763f7..00000000 --- a/StardewModdingAPI/JsonResolver.cs +++ /dev/null @@ -1,212 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.Xna.Framework; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Newtonsoft.Json.Serialization; -using StardewModdingAPI.Inheritance; -using Object = StardewValley.Object; - -namespace StardewModdingAPI -{ - internal class JsonResolver : DefaultContractResolver - { - protected override JsonContract CreateContract(Type objectType) - { - if (objectType == typeof(Rectangle) || objectType == typeof(Rectangle?)) - { - Console.WriteLine("FOUND A RECT"); - JsonContract contract = CreateObjectContract(objectType); - contract.Converter = new RectangleConverter(); - return contract; - } - if (objectType == typeof(Object)) - { - Log.AsyncY("FOUND AN OBJECT"); - JsonContract contract = CreateObjectContract(objectType); - contract.Converter = new ObjectConverter(); - return contract; - } - return base.CreateContract(objectType); - } - } - - public class ObjectConverter : JsonConverter - { - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - Log.AsyncY("TRYING TO WRITE"); - var obj = (Object) value; - Log.AsyncY("TRYING TO WRITE"); - - var jObject = GetObject(obj); - Log.AsyncY("TRYING TO WRITE"); - - try - { - Log.AsyncY(jObject.ToString()); - } - catch (Exception ex) - { - Log.AsyncR(ex); - } - - Console.ReadKey(); - - jObject.WriteTo(writer); - } - - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - var jObject = JObject.Load(reader); - - return GetObject(jObject); - } - - public override bool CanConvert(Type objectType) - { - throw new NotImplementedException(); - } - - protected static JObject GetObject(Object o) - { - try - { - var parentSheetIndex = o.parentSheetIndex; - var stack = o.stack; - var isRecipe = o.isRecipe; - var price = o.price; - var quality = o.quality; - - var oo = new SBareObject(parentSheetIndex, stack, isRecipe, price, quality); - Log.AsyncG(JsonConvert.SerializeObject(oo)); - return JObject.FromObject(oo); - } - catch (Exception ex) - { - Log.AsyncR(ex); - Console.ReadKey(); - } - return null; - } - - protected static Object GetObject(JObject jObject) - { - var parentSheetIndex = GetTokenValue(jObject, "parentSheetIndex") as int?; - var stack = GetTokenValue(jObject, "parentSheetIndex") as int?; - var isRecipe = GetTokenValue(jObject, "parentSheetIndex") as bool?; - var price = GetTokenValue(jObject, "parentSheetIndex") as int?; - var quality = GetTokenValue(jObject, "parentSheetIndex") as int?; - - return new Object(parentSheetIndex ?? 0, stack ?? 0, isRecipe ?? false, price ?? -1, quality ?? 0); - } - - protected static Object GetObject(JToken jToken) - { - var jObject = JObject.FromObject(jToken); - - return GetObject(jObject); - } - - protected static T GetTokenValue(JObject jObject, string tokenName) where T : class - { - JToken jToken; - jObject.TryGetValue(tokenName, StringComparison.InvariantCultureIgnoreCase, out jToken); - return jToken as T; - } - } - - public class RectangleConverter : JsonConverter - { - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - var rectangle = (Rectangle) value; - - var jObject = GetObject(rectangle); - - jObject.WriteTo(writer); - } - - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - Console.WriteLine(reader.ReadAsString()); - var jObject = JObject.Load(reader); - - return GetRectangle(jObject); - } - - public override bool CanConvert(Type objectType) - { - throw new NotImplementedException(); - } - - protected static JObject GetObject(Rectangle rectangle) - { - var x = rectangle.X; - var y = rectangle.Y; - var width = rectangle.Width; - var height = rectangle.Height; - - return JObject.FromObject(new {x, y, width, height}); - } - - protected static Rectangle GetRectangle(JObject jObject) - { - var x = GetTokenValue(jObject, "x") ?? 0; - var y = GetTokenValue(jObject, "y") ?? 0; - var width = GetTokenValue(jObject, "width") ?? 0; - var height = GetTokenValue(jObject, "height") ?? 0; - - return new Rectangle(x, y, width, height); - } - - protected static Rectangle GetRectangle(JToken jToken) - { - var jObject = JObject.FromObject(jToken); - - return GetRectangle(jObject); - } - - protected static int? GetTokenValue(JObject jObject, string tokenName) - { - JToken jToken; - return jObject.TryGetValue(tokenName, StringComparison.InvariantCultureIgnoreCase, out jToken) ? (int) jToken : (int?) null; - } - } - - public class RectangleListConverter : RectangleConverter - { - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - var rectangleList = (IList) value; - - var jArray = new JArray(); - - foreach (var rectangle in rectangleList) - { - jArray.Add(GetObject(rectangle)); - } - - jArray.WriteTo(writer); - } - - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - var rectangleList = new List(); - - var jArray = JArray.Load(reader); - - foreach (var jToken in jArray) - { - rectangleList.Add(GetRectangle(jToken)); - } - - return rectangleList; - } - - public override bool CanConvert(Type objectType) - { - throw new NotImplementedException(); - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Logger.cs b/StardewModdingAPI/Logger.cs deleted file mode 100644 index 0d69b6ec..00000000 --- a/StardewModdingAPI/Logger.cs +++ /dev/null @@ -1,326 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - -namespace StardewModdingAPI -{ - public static class Log - { - private static readonly LogWriter _writer; - - static Log() - { - _writer = LogWriter.Instance; - } - - private static void PrintLog(LogInfo li) - { - _writer.WriteToLog(li); - } - - #region Exception Logging - - /// - /// Catch unhandled exception from the application - /// - /// Should be moved out of here if we do more than just log the exception. - public static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - Console.WriteLine("An exception has been caught"); - File.WriteAllText(Constants.LogDir + "\\MODDED_ErrorLog.Log_" + DateTime.UtcNow.Ticks + ".txt", e.ExceptionObject.ToString()); - } - - /// - /// Catch thread exception from the application - /// - /// Should be moved out of here if we do more than just log the exception. - public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) - { - Console.WriteLine("A thread exception has been caught"); - File.WriteAllText(Constants.LogDir + "\\MODDED_ErrorLog.Log_" + Extensions.Random.Next(100000000, 999999999) + ".txt", e.Exception.ToString()); - } - - #endregion - - #region Sync Logging - - /// - /// NOTICE: Sync logging is discouraged. Please use Async instead. - /// - /// Message to log - /// Colour of message - public static void SyncColour(object message, ConsoleColor colour) - { - PrintLog(new LogInfo(message?.ToString(), colour)); - } - - #endregion - - #region Async Logging - - public static void AsyncColour(object message, ConsoleColor colour) - { - Task.Run(() => { PrintLog(new LogInfo(message?.ToString(), colour)); }); - } - - public static void Async(object message) - { - AsyncColour(message?.ToString(), ConsoleColor.Gray); - } - - public static void AsyncR(object message) - { - AsyncColour(message?.ToString(), ConsoleColor.Red); - } - - public static void AsyncO(object message) - { - AsyncColour(message.ToString(), ConsoleColor.DarkYellow); - } - - public static void AsyncY(object message) - { - AsyncColour(message?.ToString(), ConsoleColor.Yellow); - } - - public static void AsyncG(object message) - { - AsyncColour(message?.ToString(), ConsoleColor.Green); - } - - public static void AsyncC(object message) - { - AsyncColour(message?.ToString(), ConsoleColor.Cyan); - } - - public static void AsyncM(object message) - { - AsyncColour(message?.ToString(), ConsoleColor.Magenta); - } - - public static void Error(object message) - { - AsyncR("[ERROR] " + message); - } - - public static void Success(object message) - { - AsyncG("[SUCCESS] " + message); - } - - public static void Info(object message) - { - AsyncY("[INFO] " + message); - } - - public static void Out(object message) - { - Async("[OUT] " + message); - } - - public static void Debug(object message) - { - AsyncO("[DEBUG] " + message); - } - - #endregion - - #region ToRemove - - public static void LogValueNotSpecified() - { - AsyncR(" must be specified"); - } - - public static void LogObjectValueNotSpecified() - { - AsyncR(" and must be specified"); - } - - public static void LogValueInvalid() - { - AsyncR(" is invalid"); - } - - public static void LogObjectInvalid() - { - AsyncR(" is invalid"); - } - - public static void LogValueNotInt32() - { - AsyncR(" must be a whole number (Int32)"); - } - - [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] - private static void PrintLog(object message, bool disableLogging, params object[] values) - { - PrintLog(new LogInfo(message?.ToString())); - } - - [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] - public static void Success(object message, params object[] values) - { - Success(message); - } - - [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] - public static void Verbose(object message, params object[] values) - { - Out(message); - } - - [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] - public static void Comment(object message, params object[] values) - { - AsyncC(message); - } - - [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] - public static void Info(object message, params object[] values) - { - Info(message); - } - - [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] - public static void Error(object message, params object[] values) - { - Error(message); - } - - [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] - public static void Debug(object message, params object[] values) - { - Debug(message); - } - - #endregion - } - - /// - /// A Logging class implementing the Singleton pattern and an internal Queue to be flushed perdiodically - /// - public class LogWriter - { - private static LogWriter _instance; - private static ConcurrentQueue _logQueue; - private static DateTime _lastFlushTime = DateTime.Now; - private static StreamWriter _stream; - - /// - /// Private to prevent creation of other instances - /// - private LogWriter() - { - } - - /// - /// Exposes _instace and creates a new one if it is null - /// - internal static LogWriter Instance - { - get - { - if (_instance == null) - { - _instance = new LogWriter(); - // Field cannot be used by anything else regardless, do not surround with lock { } - // ReSharper disable once InconsistentlySynchronizedField - _logQueue = new ConcurrentQueue(); - Console.WriteLine(Constants.LogPath); - - // If the ErrorLogs dir doesn't exist StreamWriter will throw an exception. - if (!Directory.Exists(Constants.LogDir)) - { - Directory.CreateDirectory(Constants.LogDir); - } - - _stream = new StreamWriter(Constants.LogPath, false); - Console.WriteLine("Created log instance"); - } - return _instance; - } - } - - /// - /// Writes into the ConcurrentQueue the Message specified - /// - /// The message to write to the log - public void WriteToLog(string message) - { - lock (_logQueue) - { - var logEntry = new LogInfo(message); - _logQueue.Enqueue(logEntry); - - if (_logQueue.Any()) - { - FlushLog(); - } - } - } - - /// - /// Writes into the ConcurrentQueue the Entry specified - /// - /// The logEntry to write to the log - public void WriteToLog(LogInfo logEntry) - { - lock (_logQueue) - { - _logQueue.Enqueue(logEntry); - - if (_logQueue.Any()) - { - FlushLog(); - } - } - } - - /// - /// Flushes the ConcurrentQueue to the log file specified in Constants - /// - private void FlushLog() - { - lock (_stream) - { - LogInfo entry; - while (_logQueue.TryDequeue(out entry)) - { - string m = $"[{entry.LogTime}] {entry.Message}"; - - Console.ForegroundColor = entry.Colour; - Console.WriteLine(m); - Console.ForegroundColor = ConsoleColor.Gray; - - _stream.WriteLine(m); - } - _stream.Flush(); - } - } - } - - /// - /// A struct to store the message and the Date and Time the log entry was created - /// - public struct LogInfo - { - public string Message { get; set; } - public string LogTime { get; set; } - public string LogDate { get; set; } - public ConsoleColor Colour { get; set; } - - public LogInfo(string message, ConsoleColor colour = ConsoleColor.Gray) - { - if (string.IsNullOrEmpty(message)) - message = "[null]"; - Message = message; - LogDate = DateTime.Now.ToString("yyyy-MM-dd"); - LogTime = DateTime.Now.ToString("hh:mm:ss.fff tt"); - Colour = colour; - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Manifest.cs b/StardewModdingAPI/Manifest.cs deleted file mode 100644 index 5eabc01b..00000000 --- a/StardewModdingAPI/Manifest.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace StardewModdingAPI -{ - public class Manifest : Config - { - /// - /// The name of your mod. - /// - public virtual string Name { get; set; } - - /// - /// The name of the mod's authour. - /// - public virtual string Authour { get; set; } - - /// - /// The version of the mod. - /// - public virtual Version Version { get; set; } - - /// - /// A description of the mod. - /// - public virtual string Description { get; set; } - - /// - /// The unique ID of the mod. It doesn't *need* to be anything. - /// - public virtual string UniqueID { get; set; } - - /// - /// Whether or not the mod uses per-save-config files. - /// - public virtual bool PerSaveConfigs { get; set; } - - /// - /// The name of the DLL in the directory that has the Entry() method. - /// - public virtual string EntryDll { get; set; } - - public override T GenerateDefaultConfig() - { - Name = ""; - Authour = ""; - Version = new Version(0, 0, 0, ""); - Description = ""; - UniqueID = Guid.NewGuid().ToString(); - PerSaveConfigs = false; - EntryDll = ""; - return this as T; - } - - public override T LoadConfig() - { - if (File.Exists(ConfigLocation)) - { - try - { - Manifest m = JsonConvert.DeserializeObject(File.ReadAllText(ConfigLocation)); - } - catch - { - //Invalid json blob. Try to remove version? - try - { - JObject j = JObject.Parse(File.ReadAllText(ConfigLocation)); - if (!j.GetValue("Version").Contains("{")) - { - Log.AsyncC("INVALID JSON VERSION. TRYING TO REMOVE SO A NEW CAN BE AUTO-GENERATED"); - j.Remove("Version"); - File.WriteAllText(ConfigLocation, j.ToString()); - } - } - catch (Exception) - { - // ignored - } - } - } - - return base.LoadConfig(); - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Mod.cs b/StardewModdingAPI/Mod.cs deleted file mode 100644 index 8edfcf7e..00000000 --- a/StardewModdingAPI/Mod.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.IO; - -namespace StardewModdingAPI -{ - public class Mod - { - /// - /// The mod's manifest - /// - public Manifest Manifest { get; internal set; } - - /// - /// Where the mod is located on the disk. - /// - public string PathOnDisk { get; internal set; } - - /// - /// A basic path to store your mod's config at. - /// - public string BaseConfigPath => PathOnDisk + "\\config.json"; - - /// - /// A basic path to where per-save configs are stored - /// - public string PerSaveConfigFolder => GetPerSaveConfigFolder(); - - /// - /// A basic path to store your mod's config at, dependent on the current save. - /// The Manifest must allow for per-save configs. This is to keep from having an - /// empty directory in every mod folder. - /// - public string PerSaveConfigPath => Constants.CurrentSavePathExists ? Path.Combine(PerSaveConfigFolder, Constants.SaveFolderName + ".json") : ""; - - /// - /// A basic method that is the entry-point of your mod. It will always be called once when the mod loads. - /// - public virtual void Entry(params object[] objects) - { - } - - private string GetPerSaveConfigFolder() - { - if (Manifest.PerSaveConfigs) - { - return Path.Combine(PathOnDisk, "psconfigs"); - } - Log.AsyncR($"The mod [{Manifest.Name}] is not configured to use per-save configs."); - return ""; - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/ModItem.cs b/StardewModdingAPI/ModItem.cs deleted file mode 100644 index cf2e10b2..00000000 --- a/StardewModdingAPI/ModItem.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Microsoft.Xna.Framework.Graphics; -using StardewValley; - -namespace StardewModdingAPI -{ - internal class ModItem : Object - { - public Item AsItem => this; - - public override string Name { get; set; } - public string Description { get; set; } - public int ID { get; set; } - public Texture2D Texture { get; set; } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Program.cs b/StardewModdingAPI/Program.cs deleted file mode 100644 index 81e48c7d..00000000 --- a/StardewModdingAPI/Program.cs +++ /dev/null @@ -1,451 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Threading; -using System.Windows.Forms; -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Graphics; -using StardewModdingAPI.Events; -using StardewModdingAPI.Inheritance; -using StardewModdingAPI.Inheritance.Menus; -using StardewValley; -using StardewValley.Menus; - -namespace StardewModdingAPI -{ - public class Program - { - private static List _modPaths; - - public static SGame gamePtr; - public static bool ready; - - public static Assembly StardewAssembly; - public static Type StardewProgramType; - public static FieldInfo StardewGameInfo; - public static Form StardewForm; - - public static Thread gameThread; - public static Thread consoleInputThread; - //private static List _modContentPaths; - - public static Texture2D DebugPixel { get; private set; } - - // ReSharper disable once PossibleNullReferenceException - public static int BuildType => (int) StardewProgramType.GetField("buildType", BindingFlags.Public | BindingFlags.Static).GetValue(null); - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - /// - /// Main method holding the API execution - /// - /// - private static void Main(string[] args) - { - Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB"); - - try - { - Log.AsyncY("SDV Version: " + Game1.version); - Log.AsyncY("SMAPI Version: " + Constants.Version.VersionString); - ConfigureUI(); - ConfigurePaths(); - ConfigureSDV(); - - GameRunInvoker(); - } - catch (Exception e) - { - // Catch and display all exceptions. - Console.WriteLine(e); - Console.ReadKey(); - Log.AsyncR("Critical error: " + e); - } - - Log.AsyncY("The API will now terminate. Press any key to continue..."); - Console.ReadKey(); - } - - /// - /// Set up the console properties - /// - private static void ConfigureUI() - { - Console.Title = Constants.ConsoleTitle; - -#if DEBUG - Console.Title += " - DEBUG IS NOT FALSE, AUTHOUR NEEDS TO REUPLOAD THIS VERSION"; -#endif - } - - /// - /// Setup the required paths and logging - /// - private static void ConfigurePaths() - { - Log.AsyncY("Validating api paths..."); - - _modPaths = new List {Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley", "Mods"), Path.Combine(Constants.ExecutionPath, "Mods")}; - //_modContentPaths = new List(); - - //TODO: Have an app.config and put the paths inside it so users can define locations to load mods from - - //Mods need to make their own content paths, since we're doing a different, manifest-driven, approach. - //_modContentPaths.Add(Path.Combine(Constants.ExecutionPath, "Mods", "Content")); - //_modContentPaths.Add(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley", "Mods", "Content")); - - //Checks that all defined modpaths exist as directories - _modPaths.ForEach(VerifyPath); - //_modContentPaths.ForEach(path => VerifyPath(path)); - VerifyPath(Constants.LogDir); - - if (!File.Exists(Constants.ExecutionPath + "\\Stardew Valley.exe")) - { - throw new FileNotFoundException($"Could not found: {Constants.ExecutionPath}\\Stardew Valley.exe"); - } - } - - /// - /// Load Stardev Valley and control features - /// - private static void ConfigureSDV() - { - Log.AsyncY("Initializing SDV Assembly..."); - - // Load in the assembly - ignores security - StardewAssembly = Assembly.UnsafeLoadFrom(Constants.ExecutionPath + "\\Stardew Valley.exe"); - StardewProgramType = StardewAssembly.GetType("StardewValley.Program", true); - StardewGameInfo = StardewProgramType.GetField("gamePtr"); - - // Change the game's version - Log.AsyncY("Injecting New SDV Version..."); - Game1.version += $"-Z_MODDED | SMAPI {Constants.Version.VersionString}"; - - // Create the thread for the game to run in. - gameThread = new Thread(RunGame); - Log.AsyncY("Starting SDV..."); - gameThread.Start(); - - // Wait for the game to load up - while (!ready) - { - } - - //SDV is running - Log.AsyncY("SDV Loaded Into Memory"); - - //Create definition to listen for input - Log.AsyncY("Initializing Console Input Thread..."); - consoleInputThread = new Thread(ConsoleInputThread); - - // The only command in the API (at least it should be, for now) - Command.RegisterCommand("help", "Lists all commands | 'help ' returns command description").CommandFired += help_CommandFired; - //Command.RegisterCommand("crash", "crashes sdv").CommandFired += delegate { Game1.player.draw(null); }; - - //Subscribe to events - ControlEvents.KeyPressed += Events_KeyPressed; - GameEvents.LoadContent += Events_LoadContent; - //Events.MenuChanged += Events_MenuChanged; //Idk right now - - Log.AsyncY("Applying Final SDV Tweaks..."); - StardewInvoke(() => - { - gamePtr.IsMouseVisible = false; - gamePtr.Window.Title = "Stardew Valley - Version " + Game1.version; - StardewForm.Resize += GraphicsEvents.InvokeResize; - }); - } - - /// - /// Wrap the 'RunGame' method for console output - /// - private static void GameRunInvoker() - { - //Game's in memory now, send the event - Log.AsyncY("Game Loaded"); - GameEvents.InvokeGameLoaded(); - - Log.AsyncY("Type 'help' for help, or 'help ' for a command's usage"); - //Begin listening to input - consoleInputThread.Start(); - - - while (ready) - { - //Check if the game is still running 10 times a second - Thread.Sleep(1000 / 10); - } - - //abort the thread, we're closing - if (consoleInputThread != null && consoleInputThread.ThreadState == ThreadState.Running) - consoleInputThread.Abort(); - - Log.AsyncY("Game Execution Finished"); - Log.AsyncY("Shutting Down..."); - Thread.Sleep(100); - Environment.Exit(0); - } - - /// - /// Create the given directory path if it does not exist - /// - /// Desired directory path - private static void VerifyPath(string path) - { - try - { - if (!Directory.Exists(path)) - { - Directory.CreateDirectory(path); - } - } - catch (Exception ex) - { - Log.AsyncR("Could not create a path: " + path + "\n\n" + ex); - } - } - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - public static void RunGame() - { - Application.ThreadException += Log.Application_ThreadException; - Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); - AppDomain.CurrentDomain.UnhandledException += Log.CurrentDomain_UnhandledException; - - try - { - gamePtr = new SGame(); - Log.AsyncY("Patching SDV Graphics Profile..."); - Game1.graphics.GraphicsProfile = GraphicsProfile.HiDef; - LoadMods(); - - StardewForm = Control.FromHandle(gamePtr.Window.Handle).FindForm(); - if (StardewForm != null) StardewForm.Closing += StardewForm_Closing; - - ready = true; - - StardewGameInfo.SetValue(StardewProgramType, gamePtr); - gamePtr.Run(); - } - catch (Exception ex) - { - Log.AsyncR("Game failed to start: " + ex); - } - } - - private static void StardewForm_Closing(object sender, CancelEventArgs e) - { - e.Cancel = true; - - if (true || MessageBox.Show("Are you sure you would like to quit Stardew Valley?\nUnsaved progress will be lost!", "Confirm Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes) - { - gamePtr.Exit(); - gamePtr.Dispose(); - StardewForm.Hide(); - ready = false; - } - } - - public static void LoadMods() - { - Log.AsyncY("LOADING MODS"); - foreach (var ModPath in _modPaths) - { - foreach (var d in Directory.GetDirectories(ModPath)) - { - foreach (var s in Directory.GetFiles(d, "manifest.json")) - { - if (s.Contains("StardewInjector")) - continue; - Log.AsyncG("Found Manifest: " + s); - var manifest = new Manifest(); - try - { - var t = File.ReadAllText(s); - if (string.IsNullOrEmpty(t)) - { - Log.AsyncR($"Failed to read mod manifest '{s}'. Manifest is empty!"); - continue; - } - - manifest = manifest.InitializeConfig(s); - - if (string.IsNullOrEmpty(manifest.EntryDll)) - { - Log.AsyncR($"Failed to read mod manifest '{s}'. EntryDll is empty!"); - continue; - } - } - catch (Exception ex) - { - Log.AsyncR($"Failed to read mod manifest '{s}'. Exception details:\n" + ex); - continue; - } - var targDir = Path.GetDirectoryName(s); - var psDir = Path.Combine(targDir, "psconfigs"); - Log.AsyncY($"Created psconfigs directory @{psDir}"); - try - { - if (manifest.PerSaveConfigs) - { - if (!Directory.Exists(psDir)) - { - Directory.CreateDirectory(psDir); - Log.AsyncY($"Created psconfigs directory @{psDir}"); - } - - if (!Directory.Exists(psDir)) - { - Log.AsyncR($"Failed to create psconfigs directory '{psDir}'. No exception occured."); - continue; - } - } - } - catch (Exception ex) - { - Log.AsyncR($"Failed to create psconfigs directory '{targDir}'. Exception details:\n" + ex); - continue; - } - var targDll = string.Empty; - try - { - targDll = Path.Combine(targDir, manifest.EntryDll); - if (!File.Exists(targDll)) - { - Log.AsyncR($"Failed to load mod '{manifest.EntryDll}'. File {targDll} does not exist!"); - continue; - } - - var mod = Assembly.UnsafeLoadFrom(targDll); - - if (mod.DefinedTypes.Count(x => x.BaseType == typeof(Mod)) > 0) - { - Log.AsyncY("Loading Mod DLL..."); - var tar = mod.DefinedTypes.First(x => x.BaseType == typeof(Mod)); - var m = (Mod) mod.CreateInstance(tar.ToString()); - if (m != null) - { - m.PathOnDisk = targDir; - m.Manifest = manifest; - Log.AsyncG($"LOADED MOD: {m.Manifest.Name} by {m.Manifest.Authour} - Version {m.Manifest.Version} | Description: {m.Manifest.Description} (@ {targDll})"); - Constants.ModsLoaded += 1; - m.Entry(); - } - } - else - { - Log.AsyncR("Invalid Mod DLL"); - } - } - catch (Exception ex) - { - Log.AsyncR($"Failed to load mod '{targDll}'. Exception details:\n" + ex); - } - } - } - } - Log.AsyncG($"LOADED {Constants.ModsLoaded} MODS"); - Console.Title = Constants.ConsoleTitle; - } - - public static void ConsoleInputThread() - { - var input = string.Empty; - - while (true) - { - Command.CallCommand(Console.ReadLine()); - } - } - - private static void Events_LoadContent(object o, EventArgs e) - { - Log.AsyncY("Initializing Debug Assets..."); - DebugPixel = new Texture2D(Game1.graphics.GraphicsDevice, 1, 1); - DebugPixel.SetData(new[] {Color.White}); - -#if DEBUG - StardewModdingAPI.Log.Async("REGISTERING BASE CUSTOM ITEM"); - SObject so = new SObject(); - so.Name = "Mario Block"; - so.CategoryName = "SMAPI Test Mod"; - so.Description = "It's a block from Mario!\nLoaded in realtime by SMAPI."; - so.Texture = Texture2D.FromStream(Game1.graphics.GraphicsDevice, new FileStream(_modContentPaths[0] + "\\Test.png", FileMode.Open)); - so.IsPassable = true; - so.IsPlaceable = true; - StardewModdingAPI.Log.Async("REGISTERED WITH ID OF: " + SGame.RegisterModItem(so)); - - //StardewModdingAPI.Log.Async("REGISTERING SECOND CUSTOM ITEM"); - //SObject so2 = new SObject(); - //so2.Name = "Mario Painting"; - //so2.CategoryName = "SMAPI Test Mod"; - //so2.Description = "It's a painting of a creature from Mario!\nLoaded in realtime by SMAPI."; - //so2.Texture = Texture2D.FromStream(Game1.graphics.GraphicsDevice, new FileStream(_modContentPaths[0] + "\\PaintingTest.png", FileMode.Open)); - //so2.IsPassable = true; - //so2.IsPlaceable = true; - //StardewModdingAPI.Log.Async("REGISTERED WITH ID OF: " + SGame.RegisterModItem(so2)); - - Command.CallCommand("load"); -#endif - } - - private static void Events_KeyPressed(object o, EventArgsKeyPressed e) - { - } - - private static void Events_MenuChanged(IClickableMenu newMenu) - { - Log.AsyncY("NEW MENU: " + newMenu.GetType()); - if (newMenu is GameMenu) - { - Game1.activeClickableMenu = SGameMenu.ConstructFromBaseClass(Game1.activeClickableMenu as GameMenu); - } - } - - private static void Events_LocationsChanged(List newLocations) - { -#if DEBUG - SGame.ModLocations = SGameLocation.ConstructFromBaseClasses(Game1.locations); -#endif - } - - private static void Events_CurrentLocationChanged(GameLocation newLocation) - { - //SGame.CurrentLocation = null; - //System.Threading.Thread.Sleep(10); -#if DEBUG - Console.WriteLine(newLocation.name); - SGame.CurrentLocation = SGame.LoadOrCreateSGameLocationFromName(newLocation.name); -#endif - //Game1.currentLocation = SGame.CurrentLocation; - //Log.LogComment(((SGameLocation) newLocation).name); - //Log.LogComment("LOC CHANGED: " + SGame.currentLocation.name); - } - - public static void StardewInvoke(Action a) - { - StardewForm.Invoke(a); - } - - private static void help_CommandFired(object o, EventArgsCommand e) - { - if (e.Command.CalledArgs.Length > 0) - { - var fnd = Command.FindCommand(e.Command.CalledArgs[0]); - if (fnd == null) - Log.AsyncR("The command specified could not be found"); - else - { - Log.AsyncY(fnd.CommandArgs.Length > 0 ? $"{fnd.CommandName}: {fnd.CommandDesc} - {fnd.CommandArgs.ToSingular()}" : $"{fnd.CommandName}: {fnd.CommandDesc}"); - } - } - else - Log.AsyncY("Commands: " + Command.RegisteredCommands.Select(x => x.CommandName).ToSingular()); - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/Properties/AssemblyInfo.cs b/StardewModdingAPI/Properties/AssemblyInfo.cs deleted file mode 100644 index f5435644..00000000 --- a/StardewModdingAPI/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Stardew Modding API (SMAPI)")] -[assembly: AssemblyDescription("Stardew Valley modding API.")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Stardew Modding API (SMAPI)")] -[assembly: AssemblyCopyright("Copyright © SMAPI Dev Team 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. - -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM - -[assembly: Guid("5c3f7f42-fefd-43db-aaea-92ea3bcad531")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] - -[assembly: AssemblyVersion("0.40.0.0")] -[assembly: AssemblyFileVersion("0.40.0.0")] \ No newline at end of file diff --git a/StardewModdingAPI/StardewModdingAPI.csproj b/StardewModdingAPI/StardewModdingAPI.csproj deleted file mode 100644 index 106f5bcd..00000000 --- a/StardewModdingAPI/StardewModdingAPI.csproj +++ /dev/null @@ -1,216 +0,0 @@ - - - - - Debug - AnyCPU - {F1A573B0-F436-472C-AE29-0B91EA6B9F8F} - Exe - Properties - StardewModdingAPI - StardewModdingAPI - v4.6.1 - 512 - - - - - - - - - false - - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - - - - $(SteamInstallPath) - - - - - ..\ - - - - - AnyCPU - true - full - true - bin\Debug\ - TRACE;DEBUG - prompt - 4 - false - true - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - true - - - x86 - bin\Debug\ - false - TRACE - true - true - bin\Debug\StardewModdingAPI.XML - true - 6 - - - x86 - bin\Release\ - false - bin\Release\StardewModdingAPI.XML - TRACE - true - true - 6 - - - icon.ico - - - StardewModdingAPI.Program - - - - False - - - False - - - False - - - False - - - ..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll - True - - - False - $(SteamPath)\steamapps\common\Stardew Valley\Stardew Valley.exe - False - - - - - - - - - - - - False - $(SteamPath)\steamapps\common\Stardew Valley\xTile.dll - False - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - Microsoft .NET Framework 4.5 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 - false - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file diff --git a/StardewModdingAPI/Version.cs b/StardewModdingAPI/Version.cs deleted file mode 100644 index 5e47a703..00000000 --- a/StardewModdingAPI/Version.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Newtonsoft.Json; - -namespace StardewModdingAPI -{ - public struct Version - { - public int MajorVersion { get; set; } - public int MinorVersion { get; set; } - public int PatchVersion { get; set; } - public string Build { get; set; } - - [JsonIgnore] - public string VersionString => $"{MajorVersion}.{MinorVersion}.{PatchVersion} {Build}"; - - public Version(int major, int minor, int patch, string build) - { - MajorVersion = major; - MinorVersion = minor; - PatchVersion = patch; - Build = build; - } - } -} \ No newline at end of file diff --git a/StardewModdingAPI/icon.ico b/StardewModdingAPI/icon.ico deleted file mode 100644 index 2985c5cd..00000000 Binary files a/StardewModdingAPI/icon.ico and /dev/null differ diff --git a/StardewModdingAPI/packages.config b/StardewModdingAPI/packages.config deleted file mode 100644 index 0196f5b3..00000000 --- a/StardewModdingAPI/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/StardewModdingAPI/steam_appid.txt b/StardewModdingAPI/steam_appid.txt deleted file mode 100644 index 9fe92b96..00000000 --- a/StardewModdingAPI/steam_appid.txt +++ /dev/null @@ -1 +0,0 @@ -413150 \ No newline at end of file -- cgit