summaryrefslogtreecommitdiff
path: root/StardewModdingAPI/Inheritance
diff options
context:
space:
mode:
authorZoryn Aaron <zoryn4163@gmail.com>2016-03-02 12:24:15 -0500
committerZoryn Aaron <zoryn4163@gmail.com>2016-03-02 12:24:15 -0500
commit900c804c29b6dcedef158d3b36fcebb7846e8a16 (patch)
tree84d1bab1309429dc4edf6e084abed17704c42d80 /StardewModdingAPI/Inheritance
parent38bce3315841c66409e02844c86eb7a5e9295565 (diff)
downloadSMAPI-900c804c29b6dcedef158d3b36fcebb7846e8a16.tar.gz
SMAPI-900c804c29b6dcedef158d3b36fcebb7846e8a16.tar.bz2
SMAPI-900c804c29b6dcedef158d3b36fcebb7846e8a16.zip
update for new event and other crap
Diffstat (limited to 'StardewModdingAPI/Inheritance')
-rw-r--r--StardewModdingAPI/Inheritance/SGame.cs39
-rw-r--r--StardewModdingAPI/Inheritance/SGameLocation.cs88
-rw-r--r--StardewModdingAPI/Inheritance/SObject.cs19
3 files changed, 80 insertions, 66 deletions
diff --git a/StardewModdingAPI/Inheritance/SGame.cs b/StardewModdingAPI/Inheritance/SGame.cs
index fdc6f3f7..fbea47bd 100644
--- a/StardewModdingAPI/Inheritance/SGame.cs
+++ b/StardewModdingAPI/Inheritance/SGame.cs
@@ -49,6 +49,8 @@ namespace StardewModdingAPI.Inheritance
public GameLocation PreviousGameLocation { get; private set; }
public IClickableMenu PreviousActiveMenu { get; private set; }
+ public Farmer PreviousFarmer { get; private set; }
+
protected override void Initialize()
{
Program.Log("XNA Initialize");
@@ -104,6 +106,12 @@ namespace StardewModdingAPI.Inheritance
PreviousGameLocation = Game1.currentLocation;
}
+ if (Game1.player != null && Game1.player != PreviousFarmer)
+ {
+ Events.InvokeFarmerChanged(Game1.player);
+ PreviousFarmer = Game1.player;
+ }
+
if (CurrentLocation != null)
CurrentLocation.update(gameTime);
@@ -184,5 +192,36 @@ namespace StardewModdingAPI.Inheritance
}
return null;
}
+
+ public static SGameLocation LoadOrCreateSGameLocationFromName(String name)
+ {
+ if (GetLocationFromName(name) != null)
+ return GetLocationFromName(name);
+ else
+ {
+ GameLocation gl = Game1.locations.FirstOrDefault(x => x.name == name);
+ if (gl != null)
+ {
+ Program.LogDebug("A custom location was created for the new name: " + name);
+ SGameLocation s = SGameLocation.ConstructFromBaseClass(gl);
+ ModLocations.Add(s);
+ return s;
+ }
+ else
+ {
+ if (Game1.currentLocation != null && Game1.currentLocation.name == name)
+ {
+ gl = Game1.currentLocation;
+ Program.LogDebug("A custom location was created from the current location for the new name: " + name);
+ SGameLocation s = SGameLocation.ConstructFromBaseClass(gl);
+ ModLocations.Add(s);
+ return s;
+ }
+
+ Program.LogDebug("A custom location could not be created for: " + name);
+ return null;
+ }
+ }
+ }
}
} \ No newline at end of file
diff --git a/StardewModdingAPI/Inheritance/SGameLocation.cs b/StardewModdingAPI/Inheritance/SGameLocation.cs
index 14d9afa6..50058bff 100644
--- a/StardewModdingAPI/Inheritance/SGameLocation.cs
+++ b/StardewModdingAPI/Inheritance/SGameLocation.cs
@@ -18,85 +18,40 @@ namespace StardewModdingAPI.Inheritance
public SerializableDictionary<Vector2, SObject> ModObjects { get; set; }
- public static SGameLocation ConstructFromBaseClass(GameLocation baseClass)
+ public static SGameLocation ConstructFromBaseClass(GameLocation baseClass, bool copyAllData = false)
{
SGameLocation s = new SGameLocation();
s.BaseGameLocation = baseClass;
- s.ModObjects = new SerializableDictionary<Vector2, SObject>();
+ s.name = baseClass.name;
+
+ Program.LogDebug("CONSTRUCTED: " + s.name);
- foreach (var v in baseClass.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
+ if (copyAllData)
{
- try
+ foreach (var v in baseClass.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
{
- var fi = s.GetType().GetField(v.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
- if (fi != null && !fi.IsStatic)
+ try
{
- fi.SetValue(s, v.GetValue(baseClass));
- //Console.WriteLine("SET {0} ON {1} TO {2}", fi.Name, s.name, v.GetValue(baseClass));
+ var fi = s.GetType().GetField(v.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
+ if (fi != null && !fi.IsStatic)
+ {
+ fi.SetValue(s, v.GetValue(baseClass));
+ //Console.WriteLine("SET {0} ON {1} TO {2}", fi.Name, s.name, v.GetValue(baseClass));
+ }
+ }
+ catch (Exception ex)
+ {
+ Program.LogError(ex);
}
- }
- catch (Exception ex)
- {
- Program.LogError(ex);
}
}
- //s.IsFarm = baseClass.IsFarm;
- //s.IsOutdoors = baseClass.IsOutdoors;
- //s.LightLevel = baseClass.LightLevel;
- //s.Map = baseClass.Map;
- //s.objects = baseClass.objects;
- //s.temporarySprites = baseClass.temporarySprites;
-
- /*
- s.actionObjectForQuestionDialogue = baseClass.actionObjectForQuestionDialogue;
- s.characters = baseClass.characters;
- s.critters = (List<Critter>)typeof(GameLocation).GetField("critters", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(baseClass);
- s.currentEvent = baseClass.currentEvent;
- s.debris = baseClass.debris;
- s.doorSprites = baseClass.doorSprites;
- s.doors = baseClass.doors;
- s.farmers = baseClass.farmers;
- s.fishSplashAnimation = baseClass.fishSplashAnimation;
- s.fishSplashPoint = baseClass.fishSplashPoint;
- s.forceViewportPlayerFollow = baseClass.forceViewportPlayerFollow;
- s.ignoreDebrisWeather = baseClass.ignoreDebrisWeather;
- s.ignoreLights = baseClass.ignoreLights;
- s.ignoreOutdoorLighting = baseClass.ignoreOutdoorLighting;
- s.isFarm = baseClass.isFarm;
- s.isOutdoors = baseClass.isOutdoors;
- s.isStructure = baseClass.isStructure;
- s.largeTerrainFeatures = baseClass.largeTerrainFeatures;
- s.lastQuestionKey = baseClass.lastQuestionKey;
- s.lastTouchActionLocation = baseClass.lastTouchActionLocation;
- s.lightGlows = baseClass.lightGlows;
- s.map = baseClass.map;
- s.name = baseClass.name;
- s.numberOfSpawnedObjectsOnMap = baseClass.numberOfSpawnedObjectsOnMap;
- s.objects = baseClass.objects;
- s.orePanAnimation = baseClass.orePanAnimation;
- s.orePanPoint = baseClass.orePanPoint;
- s.projectiles = baseClass.projectiles;
- s.temporarySprites = baseClass.temporarySprites;
- s.terrainFeatures = baseClass.terrainFeatures;
- s.uniqueName = baseClass.uniqueName;
- s.warps = baseClass.warps;
- s.wasUpdated = (bool)typeof(GameLocation).GetField("wasUpdated", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(baseClass);
- s.waterAnimationIndex = baseClass.waterAnimationIndex;
- s.waterAnimationTimer = baseClass.waterAnimationTimer;
- s.waterColor = baseClass.waterColor;
- s.waterTileFlip = baseClass.waterTileFlip;
- s.waterTiles = baseClass.waterTiles;
- */
-
-
-
return s;
}
- public static List<SGameLocation> ConvertGameLocations(List<GameLocation> baseGameLocations)
+ public static List<SGameLocation> ConstructFromBaseClasses(List<GameLocation> baseGameLocations, bool copyAllData = false)
{
- return baseGameLocations.Select(ConstructFromBaseClass).ToList();
+ return baseGameLocations.Select(gl => ConstructFromBaseClass(gl, copyAllData)).ToList();
}
public virtual void update(GameTime gameTime)
@@ -110,5 +65,10 @@ namespace StardewModdingAPI.Inheritance
v.Value.draw(b, (int)v.Key.X, (int)v.Key.Y, 0.999f, 1);
}
}
+
+ public SGameLocation()
+ {
+ ModObjects = new SerializableDictionary<Vector2, SObject>();
+ }
}
}
diff --git a/StardewModdingAPI/Inheritance/SObject.cs b/StardewModdingAPI/Inheritance/SObject.cs
index 97d2fa41..5e36b5b7 100644
--- a/StardewModdingAPI/Inheritance/SObject.cs
+++ b/StardewModdingAPI/Inheritance/SObject.cs
@@ -48,13 +48,23 @@ namespace StardewModdingAPI.Inheritance
public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1)
{
-
if (Texture != null)
- spriteBatch.Draw(Texture, new Vector2(x, y), new Color(255, 255, 255, 255f * alpha));
+ {
+ int targSize = Game1.tileSize;
+ int midX = (int) ((x) + 32);
+ int midY = (int) ((y) + 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, 0.999f);
+ }
}
public override void draw(SpriteBatch spriteBatch, int xNonTile, int yNonTile, float layerDepth, float alpha = 1)
{
+ Program.LogInfo("DRAW ME2");
return;
try
{
@@ -183,6 +193,11 @@ namespace StardewModdingAPI.Inheritance
public override bool placementAction(GameLocation location, int x, int y, Farmer who = null)
{
+ Vector2 key = new Vector2(x, y);
+ if (!location.objects.ContainsKey(key))
+ location.objects.Add(key, this);
+ return false;
+
SGameLocation s = SGame.GetLocationFromName(location.name);
if (s.GetHashCode() != SGame.CurrentLocation.GetHashCode())