Serialization works a bit, just need to incorporate that into the recreate functions for objects.
This commit is contained in:
parent
5b6d02babd
commit
49f06533b3
|
@ -13,7 +13,7 @@ namespace Revitalize.Framework.Graphics.Animations
|
||||||
public string currentAnimationName;
|
public string currentAnimationName;
|
||||||
public int currentAnimationListIndex;
|
public int currentAnimationListIndex;
|
||||||
public List<Animation> currentAnimationList = new List<Animation>();
|
public List<Animation> currentAnimationList = new List<Animation>();
|
||||||
private Texture2DExtended objectTexture; ///Might not be necessary if I use the CoreObject texture sheet.
|
public Texture2DExtended objectTexture; ///Might not be necessary if I use the CoreObject texture sheet.
|
||||||
public Animation defaultDrawFrame;
|
public Animation defaultDrawFrame;
|
||||||
public Animation currentAnimation;
|
public Animation currentAnimation;
|
||||||
public bool enabled;
|
public bool enabled;
|
||||||
|
|
|
@ -49,7 +49,7 @@ namespace Revitalize.Framework.Objects
|
||||||
this.canBeSetIndoors = false;
|
this.canBeSetIndoors = false;
|
||||||
this.canBeSetOutdoors = false;
|
this.canBeSetOutdoors = false;
|
||||||
|
|
||||||
this.animationManager = null;
|
this.animationManager = new AnimationManager();
|
||||||
this.drawPosition = Vector2.Zero;
|
this.drawPosition = Vector2.Zero;
|
||||||
this.drawColor = Color.White;
|
this.drawColor = Color.White;
|
||||||
this.inventory = new InventoryManager();
|
this.inventory = new InventoryManager();
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace Revitalize.Framework.Objects.Furniture
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChairMultiTiledObject(BasicItemInformation Info,Vector2 TilePosition,Dictionary<Vector2, StardewValley.Object> Objects) : base(Info, TilePosition, Objects) {
|
public ChairMultiTiledObject(BasicItemInformation Info,Vector2 TilePosition,Dictionary<Vector2, MultiTiledComponent> Objects) : base(Info, TilePosition, Objects) {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -42,11 +42,11 @@ namespace Revitalize.Framework.Objects.Furniture
|
||||||
public override void rotate()
|
public override void rotate()
|
||||||
{
|
{
|
||||||
Revitalize.ModCore.log("Rotate!");
|
Revitalize.ModCore.log("Rotate!");
|
||||||
foreach(KeyValuePair<Vector2, StardewValley.Object> pair in this.objects)
|
foreach(KeyValuePair<Vector2, MultiTiledComponent> pair in this.objects)
|
||||||
{
|
{
|
||||||
(pair.Value as ChairTileComponent).rotate();
|
(pair.Value as ChairTileComponent).rotate();
|
||||||
}
|
}
|
||||||
foreach (KeyValuePair<Vector2, StardewValley.Object> pair in this.objects)
|
foreach (KeyValuePair<Vector2, MultiTiledComponent> pair in this.objects)
|
||||||
{
|
{
|
||||||
(pair.Value as ChairTileComponent).checkForSpecialUpSittingAnimation();
|
(pair.Value as ChairTileComponent).checkForSpecialUpSittingAnimation();
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ namespace Revitalize.Framework.Objects.Furniture
|
||||||
if (this.CanSitHere)
|
if (this.CanSitHere)
|
||||||
{
|
{
|
||||||
Revitalize.ModCore.playerInfo.sittingInfo.sit(this.containerObject, this.TileLocation*Game1.tileSize);
|
Revitalize.ModCore.playerInfo.sittingInfo.sit(this.containerObject, this.TileLocation*Game1.tileSize);
|
||||||
foreach(KeyValuePair<Vector2, StardewValley.Object> pair in this.containerObject.objects)
|
foreach(KeyValuePair<Vector2, MultiTiledComponent> pair in this.containerObject.objects)
|
||||||
{
|
{
|
||||||
(pair.Value as ChairTileComponent).checkForSpecialUpSittingAnimation();
|
(pair.Value as ChairTileComponent).checkForSpecialUpSittingAnimation();
|
||||||
}
|
}
|
||||||
|
|
|
@ -203,6 +203,8 @@ namespace Revitalize.Framework.Objects
|
||||||
/// <summary>What happens when the object is drawn at a tile location.</summary>
|
/// <summary>What happens when the object is drawn at a tile location.</summary>
|
||||||
public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1f)
|
public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1f)
|
||||||
{
|
{
|
||||||
|
Revitalize.ModCore.log("DRAW THE THING!!!");
|
||||||
|
|
||||||
if (x <= -1)
|
if (x <= -1)
|
||||||
{
|
{
|
||||||
spriteBatch.Draw(this.info.animationManager.getTexture(), Game1.GlobalToLocal(Game1.viewport, this.info.drawPosition), new Rectangle?(this.animationManager.currentAnimation.sourceRectangle), this.info.drawColor * alpha, 0f, Vector2.Zero, (float)Game1.pixelZoom, this.flipped ? SpriteEffects.FlipHorizontally : SpriteEffects.None, Math.Max(0f, (float)(this.TileLocation.Y * Game1.tileSize) / 10000f));
|
spriteBatch.Draw(this.info.animationManager.getTexture(), Game1.GlobalToLocal(Game1.viewport, this.info.drawPosition), new Rectangle?(this.animationManager.currentAnimation.sourceRectangle), this.info.drawColor * alpha, 0f, Vector2.Zero, (float)Game1.pixelZoom, this.flipped ? SpriteEffects.FlipHorizontally : SpriteEffects.None, Math.Max(0f, (float)(this.TileLocation.Y * Game1.tileSize) / 10000f));
|
||||||
|
|
|
@ -5,13 +5,12 @@ using Microsoft.Xna.Framework.Graphics;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using PyTK.CustomElementHandler;
|
using PyTK.CustomElementHandler;
|
||||||
using StardewValley;
|
using StardewValley;
|
||||||
using StardewValley.Objects;
|
|
||||||
|
|
||||||
namespace Revitalize.Framework.Objects
|
namespace Revitalize.Framework.Objects
|
||||||
{
|
{
|
||||||
public class MultiTiledObject : CustomObject
|
public class MultiTiledObject : CustomObject
|
||||||
{
|
{
|
||||||
public Dictionary<Vector2, StardewValley.Object> objects;
|
public Dictionary<Vector2, MultiTiledComponent> objects;
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public Dictionary<MultiTiledComponent, Vector2> offSets;
|
public Dictionary<MultiTiledComponent, Vector2> offSets;
|
||||||
|
|
||||||
|
@ -36,7 +35,7 @@ namespace Revitalize.Framework.Objects
|
||||||
|
|
||||||
public MultiTiledObject()
|
public MultiTiledObject()
|
||||||
{
|
{
|
||||||
this.objects = new Dictionary<Vector2, StardewValley.Object>();
|
this.objects = new Dictionary<Vector2, MultiTiledComponent>();
|
||||||
this.offSets = new Dictionary<MultiTiledComponent, Vector2>();
|
this.offSets = new Dictionary<MultiTiledComponent, Vector2>();
|
||||||
this.guid = Guid.NewGuid();
|
this.guid = Guid.NewGuid();
|
||||||
}
|
}
|
||||||
|
@ -44,7 +43,7 @@ namespace Revitalize.Framework.Objects
|
||||||
public MultiTiledObject(BasicItemInformation info)
|
public MultiTiledObject(BasicItemInformation info)
|
||||||
: base(info)
|
: base(info)
|
||||||
{
|
{
|
||||||
this.objects = new Dictionary<Vector2, StardewValley.Object>();
|
this.objects = new Dictionary<Vector2, MultiTiledComponent>();
|
||||||
this.offSets = new Dictionary<MultiTiledComponent, Vector2>();
|
this.offSets = new Dictionary<MultiTiledComponent, Vector2>();
|
||||||
this.guid = Guid.NewGuid();
|
this.guid = Guid.NewGuid();
|
||||||
}
|
}
|
||||||
|
@ -52,20 +51,20 @@ namespace Revitalize.Framework.Objects
|
||||||
public MultiTiledObject(BasicItemInformation info, Vector2 TileLocation)
|
public MultiTiledObject(BasicItemInformation info, Vector2 TileLocation)
|
||||||
: base(info, TileLocation)
|
: base(info, TileLocation)
|
||||||
{
|
{
|
||||||
this.objects = new Dictionary<Vector2, StardewValley.Object>();
|
this.objects = new Dictionary<Vector2, MultiTiledComponent>();
|
||||||
this.offSets = new Dictionary<MultiTiledComponent, Vector2>();
|
this.offSets = new Dictionary<MultiTiledComponent, Vector2>();
|
||||||
this.guid = Guid.NewGuid();
|
this.guid = Guid.NewGuid();
|
||||||
}
|
}
|
||||||
|
|
||||||
public MultiTiledObject(BasicItemInformation info, Vector2 TileLocation, Dictionary<Vector2, StardewValley.Object> ObjectsList)
|
public MultiTiledObject(BasicItemInformation info, Vector2 TileLocation, Dictionary<Vector2, MultiTiledComponent> ObjectsList)
|
||||||
: base(info, TileLocation)
|
: base(info, TileLocation)
|
||||||
{
|
{
|
||||||
this.objects = new Dictionary<Vector2, StardewValley.Object>();
|
this.objects = new Dictionary<Vector2, MultiTiledComponent>();
|
||||||
this.offSets = new Dictionary<MultiTiledComponent, Vector2>();
|
this.offSets = new Dictionary<MultiTiledComponent, Vector2>();
|
||||||
foreach (var v in ObjectsList)
|
foreach (var v in ObjectsList)
|
||||||
{
|
{
|
||||||
MultiTiledComponent component =(MultiTiledComponent) v.Value.getOne();
|
MultiTiledComponent component =(MultiTiledComponent) v.Value.getOne();
|
||||||
this.addComponent(v.Key, component);
|
this.addComponent(v.Key, (component as MultiTiledComponent));
|
||||||
}
|
}
|
||||||
this.guid = Guid.NewGuid();
|
this.guid = Guid.NewGuid();
|
||||||
|
|
||||||
|
@ -76,12 +75,12 @@ namespace Revitalize.Framework.Objects
|
||||||
if (this.objects.ContainsKey(key))
|
if (this.objects.ContainsKey(key))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
this.objects.Add(key, obj);
|
this.objects.Add(key, (obj as MultiTiledComponent));
|
||||||
this.offSets.Add(obj, key);
|
this.offSets.Add((obj as MultiTiledComponent), key);
|
||||||
if (key.X > this.width) this.width = (int)key.X;
|
if (key.X > this.width) this.width = (int)key.X;
|
||||||
if (key.Y > this.height) this.height = (int)key.Y;
|
if (key.Y > this.height) this.height = (int)key.Y;
|
||||||
obj.containerObject = this;
|
(obj as MultiTiledComponent).containerObject = this;
|
||||||
obj.offsetKey = key;
|
(obj as MultiTiledComponent).offsetKey = key;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,13 +95,13 @@ namespace Revitalize.Framework.Objects
|
||||||
|
|
||||||
public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1)
|
public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1)
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<Vector2, StardewValley.Object> pair in this.objects)
|
foreach (KeyValuePair<Vector2, MultiTiledComponent> pair in this.objects)
|
||||||
pair.Value.draw(spriteBatch, x + (int)pair.Key.X * Game1.tileSize, y + (int)pair.Key.Y * Game1.tileSize, alpha);
|
pair.Value.draw(spriteBatch, x + (int)pair.Key.X * Game1.tileSize, y + (int)pair.Key.Y * Game1.tileSize, alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void draw(SpriteBatch spriteBatch, int xNonTile, int yNonTile, float layerDepth, float alpha = 1)
|
public override void draw(SpriteBatch spriteBatch, int xNonTile, int yNonTile, float layerDepth, float alpha = 1)
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<Vector2, StardewValley.Object> pair in this.objects)
|
foreach (KeyValuePair<Vector2, MultiTiledComponent> pair in this.objects)
|
||||||
pair.Value.draw(spriteBatch, xNonTile + (int)pair.Key.X * Game1.tileSize, yNonTile + (int)pair.Key.Y * Game1.tileSize, layerDepth, alpha);
|
pair.Value.draw(spriteBatch, xNonTile + (int)pair.Key.X * Game1.tileSize, yNonTile + (int)pair.Key.Y * Game1.tileSize, layerDepth, alpha);
|
||||||
|
|
||||||
//base.draw(spriteBatch, xNonTile, yNonTile, layerDepth, alpha);
|
//base.draw(spriteBatch, xNonTile, yNonTile, layerDepth, alpha);
|
||||||
|
@ -110,14 +109,14 @@ namespace Revitalize.Framework.Objects
|
||||||
|
|
||||||
public override void drawInMenu(SpriteBatch spriteBatch, Vector2 location, float scaleSize, float transparency, float layerDepth, bool drawStackNumber, Color c, bool drawShadow)
|
public override void drawInMenu(SpriteBatch spriteBatch, Vector2 location, float scaleSize, float transparency, float layerDepth, bool drawStackNumber, Color c, bool drawShadow)
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<Vector2, StardewValley.Object> pair in this.objects)
|
foreach (KeyValuePair<Vector2, MultiTiledComponent> pair in this.objects)
|
||||||
pair.Value.drawInMenu(spriteBatch, location + (pair.Key * 16), 1.0f, transparency, layerDepth, drawStackNumber, c, drawShadow);
|
pair.Value.drawInMenu(spriteBatch, location + (pair.Key * 16), 1.0f, transparency, layerDepth, drawStackNumber, c, drawShadow);
|
||||||
//base.drawInMenu(spriteBatch, location, scaleSize, transparency, layerDepth, drawStackNumber, c, drawShadow);
|
//base.drawInMenu(spriteBatch, location, scaleSize, transparency, layerDepth, drawStackNumber, c, drawShadow);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void drawWhenHeld(SpriteBatch spriteBatch, Vector2 objectPosition, Farmer f)
|
public override void drawWhenHeld(SpriteBatch spriteBatch, Vector2 objectPosition, Farmer f)
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<Vector2, StardewValley.Object> pair in this.objects)
|
foreach (KeyValuePair<Vector2, MultiTiledComponent> pair in this.objects)
|
||||||
pair.Value.drawWhenHeld(spriteBatch, objectPosition + (pair.Key * Game1.tileSize), f);
|
pair.Value.drawWhenHeld(spriteBatch, objectPosition + (pair.Key * Game1.tileSize), f);
|
||||||
//base.drawWhenHeld(spriteBatch, objectPosition, f);
|
//base.drawWhenHeld(spriteBatch, objectPosition, f);
|
||||||
}
|
}
|
||||||
|
@ -130,7 +129,7 @@ namespace Revitalize.Framework.Objects
|
||||||
bool canPickUp = this.removeAndAddToPlayersInventory();
|
bool canPickUp = this.removeAndAddToPlayersInventory();
|
||||||
if (canPickUp)
|
if (canPickUp)
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<Vector2, StardewValley.Object> pair in this.objects)
|
foreach (KeyValuePair<Vector2, MultiTiledComponent> pair in this.objects)
|
||||||
(pair.Value as MultiTiledComponent).removeFromLocation((pair.Value as MultiTiledComponent).location, pair.Key);
|
(pair.Value as MultiTiledComponent).removeFromLocation((pair.Value as MultiTiledComponent).location, pair.Key);
|
||||||
this.location = null;
|
this.location = null;
|
||||||
}
|
}
|
||||||
|
@ -151,10 +150,10 @@ namespace Revitalize.Framework.Objects
|
||||||
|
|
||||||
public override bool placementAction(GameLocation location, int x, int y, Farmer who = null)
|
public override bool placementAction(GameLocation location, int x, int y, Farmer who = null)
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<Vector2, StardewValley.Object> pair in this.objects)
|
foreach (KeyValuePair<Vector2, MultiTiledComponent> pair in this.objects)
|
||||||
{
|
{
|
||||||
pair.Value.placementAction(location, x + (int)pair.Key.X * Game1.tileSize, y + (int)pair.Key.Y * Game1.tileSize, who);
|
pair.Value.placementAction(location, x + (int)pair.Key.X * Game1.tileSize, y + (int)pair.Key.Y * Game1.tileSize, who);
|
||||||
ModCore.log(pair.Value.TileLocation);
|
//ModCore.log(pair.Value.TileLocation);
|
||||||
}
|
}
|
||||||
this.location = location;
|
this.location = location;
|
||||||
return true;
|
return true;
|
||||||
|
@ -163,7 +162,7 @@ namespace Revitalize.Framework.Objects
|
||||||
|
|
||||||
public override bool canBePlacedHere(GameLocation l, Vector2 tile)
|
public override bool canBePlacedHere(GameLocation l, Vector2 tile)
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<Vector2, StardewValley.Object> pair in this.objects)
|
foreach (KeyValuePair<Vector2, MultiTiledComponent> pair in this.objects)
|
||||||
{
|
{
|
||||||
if (!pair.Value.canBePlacedHere(l, tile + pair.Key))
|
if (!pair.Value.canBePlacedHere(l, tile + pair.Key))
|
||||||
return false;
|
return false;
|
||||||
|
@ -230,7 +229,7 @@ namespace Revitalize.Framework.Objects
|
||||||
|
|
||||||
public void setAllAnimationsToDefault()
|
public void setAllAnimationsToDefault()
|
||||||
{
|
{
|
||||||
foreach(KeyValuePair<Vector2, StardewValley.Object> pair in this.objects)
|
foreach(KeyValuePair<Vector2, MultiTiledComponent> pair in this.objects)
|
||||||
{
|
{
|
||||||
string animationKey = (pair.Value as MultiTiledComponent) .generateDefaultRotationalAnimationKey();
|
string animationKey = (pair.Value as MultiTiledComponent) .generateDefaultRotationalAnimationKey();
|
||||||
if ((pair.Value as MultiTiledComponent).animationManager.animations.ContainsKey(animationKey))
|
if ((pair.Value as MultiTiledComponent).animationManager.animations.ContainsKey(animationKey))
|
||||||
|
@ -239,5 +238,15 @@ namespace Revitalize.Framework.Objects
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public override bool canStackWith(Item other)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int maximumStackSize()
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ using StardewValley.Objects;
|
||||||
namespace Revitalize
|
namespace Revitalize
|
||||||
{
|
{
|
||||||
// TODO:
|
// TODO:
|
||||||
|
//Need to find a way to recreate objects again.
|
||||||
//Make guid object list to keep track of container objects on rebuild. Container objects have guid, on getAdditionalSaveData, store it. On rebuild keep a list, get a reference to container object, clear those objects, and reset them as we are rebuilting multiTiledComponents.
|
//Make guid object list to keep track of container objects on rebuild. Container objects have guid, on getAdditionalSaveData, store it. On rebuild keep a list, get a reference to container object, clear those objects, and reset them as we are rebuilting multiTiledComponents.
|
||||||
//
|
//
|
||||||
// -Multiple Lights On Object
|
// -Multiple Lights On Object
|
||||||
|
@ -282,12 +283,28 @@ namespace Revitalize
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var hello=Serializer.Deserialize<MultiTiledObject>(Path.Combine(this.Helper.DirectoryPath, (obj as MultiTiledObject).guid + ".json"));
|
MultiTiledObject hello=Serializer.Deserialize<MultiTiledObject>(Path.Combine(this.Helper.DirectoryPath, (obj as MultiTiledObject).guid + ".json"));
|
||||||
//(hello as MultiTiledObject).info.drawColor = Color.Blue;
|
//(hello as MultiTiledObject).info.drawColor = Color.Blue;
|
||||||
customObjects["Omegasis.BigTiledTest"].info.drawColor = hello.info.drawColor;
|
customObjects["Omegasis.BigTiledTest"].info.drawColor = hello.info.drawColor;
|
||||||
Game1.player.addItemToInventory(hello);
|
if (hello == null) log("WTF");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log("AHHHH" + hello.name);
|
||||||
|
}
|
||||||
|
hello.info.drawColor = Color.Blue;
|
||||||
|
|
||||||
|
foreach(KeyValuePair<Vector2,MultiTiledComponent> pair in hello.objects){
|
||||||
|
pair.Value.containerObject = hello;
|
||||||
|
}
|
||||||
|
|
||||||
|
Game1.player.items.Add(hello);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Game1.activeClickableMenu = new StardewValley.Menus.ItemGrabMenu(new List<Item>()
|
||||||
|
{
|
||||||
|
hello
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue