summaryrefslogtreecommitdiff
path: root/StardewModdingAPI
diff options
context:
space:
mode:
authorZoryn Aaron <zoryn4163@gmail.com>2016-02-28 22:16:32 -0500
committerZoryn Aaron <zoryn4163@gmail.com>2016-02-28 22:16:32 -0500
commit524dc9e002d86e81c1e38827a2303cc83b71eba7 (patch)
treee0b3762f89b1485ef54bdf05dac9b95fa02493a6 /StardewModdingAPI
parentbade4554d075d5dc2b1d9f81764dbb9bf361ddb3 (diff)
downloadSMAPI-524dc9e002d86e81c1e38827a2303cc83b71eba7.tar.gz
SMAPI-524dc9e002d86e81c1e38827a2303cc83b71eba7.tar.bz2
SMAPI-524dc9e002d86e81c1e38827a2303cc83b71eba7.zip
expose some private fields for modding
Diffstat (limited to 'StardewModdingAPI')
-rw-r--r--StardewModdingAPI/Extensions.cs4
-rw-r--r--StardewModdingAPI/Inheritance/Menus/SBobberBar.cs33
-rw-r--r--StardewModdingAPI/Inheritance/Minigames/SMinigameBase.cs38
-rw-r--r--StardewModdingAPI/Inheritance/SGame.cs (renamed from StardewModdingAPI/SGame.cs)11
-rw-r--r--StardewModdingAPI/Program.cs18
-rw-r--r--StardewModdingAPI/StardewModdingAPI.csproj5
6 files changed, 105 insertions, 4 deletions
diff --git a/StardewModdingAPI/Extensions.cs b/StardewModdingAPI/Extensions.cs
index 0078ebe9..b960f027 100644
--- a/StardewModdingAPI/Extensions.cs
+++ b/StardewModdingAPI/Extensions.cs
@@ -22,9 +22,9 @@ namespace StardewModdingAPI
return new Color(Random.Next(0, 255), Random.Next(0, 255), Random.Next(0, 255));
}
- public static string ToSingular(this IEnumerable<Object> enumerable)
+ public static string ToSingular(this IEnumerable<Object> enumerable, string split = ", ")
{
- string result = string.Join(", ", enumerable);
+ string result = string.Join(split, enumerable);
return result;
}
diff --git a/StardewModdingAPI/Inheritance/Menus/SBobberBar.cs b/StardewModdingAPI/Inheritance/Menus/SBobberBar.cs
new file mode 100644
index 00000000..9e5f6865
--- /dev/null
+++ b/StardewModdingAPI/Inheritance/Menus/SBobberBar.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using StardewValley.Menus;
+
+namespace StardewModdingAPI.Inheritance.Menus
+{
+ public class SBobberBar : BobberBar
+ {
+ public static FieldInfo[] PrivateFields { get { return GetPrivateFields(); } }
+
+ /// <summary>
+ /// DO NOT CONSTRUCT THIS CLASS
+ /// This class ONLY provides functionality to access the base BobberBar class fields.
+ /// </summary>
+ /// <param name="whichFish"></param>
+ /// <param name="fishSize"></param>
+ /// <param name="treasure"></param>
+ /// <param name="bobber"></param>
+ public SBobberBar(int whichFish, float fishSize, bool treasure, int bobber) : base(whichFish, fishSize, treasure, bobber)
+ {
+
+ }
+
+ public static FieldInfo[] GetPrivateFields()
+ {
+ return typeof (BobberBar).GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
+ }
+ }
+}
diff --git a/StardewModdingAPI/Inheritance/Minigames/SMinigameBase.cs b/StardewModdingAPI/Inheritance/Minigames/SMinigameBase.cs
new file mode 100644
index 00000000..5ce29d8d
--- /dev/null
+++ b/StardewModdingAPI/Inheritance/Minigames/SMinigameBase.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+
+namespace StardewModdingAPI.Inheritance.Minigames
+{
+ abstract class SMinigameBase : StardewValley.Minigames.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);
+ }
+}
diff --git a/StardewModdingAPI/SGame.cs b/StardewModdingAPI/Inheritance/SGame.cs
index 6af7689a..61a0f390 100644
--- a/StardewModdingAPI/SGame.cs
+++ b/StardewModdingAPI/Inheritance/SGame.cs
@@ -1,17 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using StardewValley;
+using StardewValley.Minigames;
-namespace StardewModdingAPI
+namespace StardewModdingAPI.Inheritance
{
public class SGame : Game1
{
+ public static FieldInfo[] StaticFields { get { return Thing(); } }
+
+ public static FieldInfo[] Thing()
+ {
+ return typeof(Game1).GetFields();
+ }
+
public KeyboardState KStateNow { get; private set; }
public KeyboardState KStatePrior { get; private set; }
diff --git a/StardewModdingAPI/Program.cs b/StardewModdingAPI/Program.cs
index 52ea76e8..846050ed 100644
--- a/StardewModdingAPI/Program.cs
+++ b/StardewModdingAPI/Program.cs
@@ -11,6 +11,7 @@ using System.Windows.Forms;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
+using StardewModdingAPI.Inheritance;
using StardewValley;
using StardewValley.Menus;
using StardewValley.Minigames;
@@ -44,6 +45,8 @@ namespace StardewModdingAPI
{
Console.Title = "Stardew Modding API Console";
+ AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
+
if (File.Exists(ModPath))
File.Delete(ModPath);
if (!Directory.Exists(ModPath))
@@ -62,6 +65,8 @@ namespace StardewModdingAPI
LogInfo("Starting SDV...");
gameThread.Start();
+ SGame.Thing();
+
while (!ready)
{
@@ -184,7 +189,20 @@ namespace StardewModdingAPI
StardewForm.Invoke(a);
}
+ public static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
+ {
+ string dllName = args.Name.Contains(',') ? args.Name.Substring(0, args.Name.IndexOf(',')) : args.Name.Replace(".dll", "");
+
+ dllName = dllName.Replace(".", "_");
+ if (dllName.EndsWith("_resources")) return null;
+
+ System.Resources.ResourceManager rm = new System.Resources.ResourceManager(typeof(Program).Namespace + ".Properties.Resources", System.Reflection.Assembly.GetExecutingAssembly());
+
+ byte[] bytes = (byte[])rm.GetObject(dllName);
+
+ return System.Reflection.Assembly.Load(bytes);
+ }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/StardewModdingAPI/StardewModdingAPI.csproj b/StardewModdingAPI/StardewModdingAPI.csproj
index 39e659bf..a6815f26 100644
--- a/StardewModdingAPI/StardewModdingAPI.csproj
+++ b/StardewModdingAPI/StardewModdingAPI.csproj
@@ -54,6 +54,7 @@
<Reference Include="Stardew Valley, Version=1.0.5900.38427, Culture=neutral, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Stardew Valley.exe</HintPath>
+ <EmbedInteropTypes>False</EmbedInteropTypes>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
@@ -68,11 +69,13 @@
<Compile Include="Command.cs" />
<Compile Include="Events.cs" />
<Compile Include="Extensions.cs" />
+ <Compile Include="Inheritance\Menus\SBobberBar.cs" />
+ <Compile Include="Inheritance\Minigames\SMinigameBase.cs" />
<Compile Include="Mod.cs" />
<Compile Include="ModItem.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="SGame.cs" />
+ <Compile Include="Inheritance\SGame.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />