adds some new events for the update loop

This commit is contained in:
Zoryn Aaron 2016-03-20 20:52:26 -04:00
parent 17021ae351
commit ab0fdb76b0
3 changed files with 89 additions and 0 deletions

View File

@ -11,7 +11,34 @@ namespace StardewModdingAPI.Events
public static event EventHandler GameLoaded = delegate { }; public static event EventHandler GameLoaded = delegate { };
public static event EventHandler Initialize = delegate { }; public static event EventHandler Initialize = delegate { };
public static event EventHandler LoadContent = delegate { }; public static event EventHandler LoadContent = delegate { };
/// <summary>
/// Fires every update (1/60 of a second)
/// </summary>
public static event EventHandler UpdateTick = delegate { }; public static event EventHandler UpdateTick = delegate { };
/// <summary>
/// Fires every other update (1/30 of a second)
/// </summary>
public static event EventHandler SecondUpdateTick = delegate { };
/// <summary>
/// Fires every fourth update (1/15 of a second)
/// </summary>
public static event EventHandler FourthUpdateTick = delegate { };
/// <summary>
/// Fires every eighth update (roughly 1/8 of a second)
/// </summary>
public static event EventHandler EighthUpdateTick = delegate { };
/// <summary>
/// Fires every fifthteenth update (1/4 of a second)
/// </summary>
public static event EventHandler QuarterSecondTick = delegate { };
/// <summary>
/// Fires every thirtieth update (1/2 of a second)
/// </summary>
public static event EventHandler HalfSecondTick = delegate { };
/// <summary>
/// Fires every sixtieth update (a second)
/// </summary>
public static event EventHandler OneSecondTick = delegate { };
public static void InvokeGameLoaded() public static void InvokeGameLoaded()
{ {
@ -53,5 +80,35 @@ namespace StardewModdingAPI.Events
Log.Error("An exception occured in XNA UpdateTick: " + ex.ToString()); Log.Error("An exception occured in XNA UpdateTick: " + ex.ToString());
} }
} }
public static void InvokeSecondUpdateTick()
{
SecondUpdateTick.Invoke(null, EventArgs.Empty);
}
public static void InvokeFourthUpdateTick()
{
FourthUpdateTick.Invoke(null, EventArgs.Empty);
}
public static void InvokeEighthUpdateTick()
{
EighthUpdateTick.Invoke(null, EventArgs.Empty);
}
public static void InvokeQuarterSecondTick()
{
QuarterSecondTick.Invoke(null, EventArgs.Empty);
}
public static void InvokeHalfSecondTick()
{
HalfSecondTick.Invoke(null, EventArgs.Empty);
}
public static void InvokeOneSecondTick()
{
OneSecondTick.Invoke(null, EventArgs.Empty);
}
} }
} }

View File

@ -60,5 +60,10 @@ namespace StardewModdingAPI
} }
return hash; return hash;
} }
public static T Cast<T>(this object o) where T : StardewValley.Object
{
return o as T;
}
} }
} }

View File

@ -173,6 +173,8 @@ namespace StardewModdingAPI.Inheritance
public Farmer PreviousFarmer { get; private set; } public Farmer PreviousFarmer { get; private set; }
public Int32 CurrentUpdateTick { get; private set; }
private static SGame instance; private static SGame instance;
public static SGame Instance { get { return instance; } } public static SGame Instance { get { return instance; } }
@ -182,6 +184,7 @@ namespace StardewModdingAPI.Inheritance
{ {
instance = this; instance = this;
/*
#if DEBUG #if DEBUG
SaveGame.serializer = new XmlSerializer(typeof (SaveGame), new Type[28] SaveGame.serializer = new XmlSerializer(typeof (SaveGame), new Type[28]
{ {
@ -215,6 +218,7 @@ namespace StardewModdingAPI.Inheritance
typeof (SObject) typeof (SObject)
}); });
#endif #endif
*/
} }
protected override void Initialize() protected override void Initialize()
@ -252,6 +256,29 @@ namespace StardewModdingAPI.Inheritance
Events.GameEvents.InvokeUpdateTick(); Events.GameEvents.InvokeUpdateTick();
if (CurrentUpdateTick % 2 == 0)
Events.GameEvents.InvokeSecondUpdateTick();
if (CurrentUpdateTick % 4 == 0)
Events.GameEvents.InvokeFourthUpdateTick();
if (CurrentUpdateTick % 8 == 0)
Events.GameEvents.InvokeEighthUpdateTick();
if (CurrentUpdateTick % 15 == 0)
Events.GameEvents.InvokeQuarterSecondTick();
if (CurrentUpdateTick % 30 == 0)
Events.GameEvents.InvokeHalfSecondTick();
if (CurrentUpdateTick % 60 == 0)
Events.GameEvents.InvokeOneSecondTick();
CurrentUpdateTick += 1;
if (CurrentUpdateTick >= 60)
CurrentUpdateTick = 0;
PreviouslyPressedKeys = CurrentlyPressedKeys; PreviouslyPressedKeys = CurrentlyPressedKeys;
for(PlayerIndex i = PlayerIndex.One; i <= PlayerIndex.Four; i++) for(PlayerIndex i = PlayerIndex.One; i <= PlayerIndex.Four; i++)
{ {