diff --git a/GeneralMods/CustomNPCFramework/Class1.cs b/GeneralMods/CustomNPCFramework/Class1.cs
index 46756808..906b9be0 100644
--- a/GeneralMods/CustomNPCFramework/Class1.cs
+++ b/GeneralMods/CustomNPCFramework/Class1.cs
@@ -92,7 +92,11 @@ namespace CustomNPCFramework
if (Game1.player.currentLocation == null) return;
foreach (var v in Game1.player.currentLocation.characters)
{
- v.speed = 5;
+ v.speed = 1;
+ if(v is ExtendedNPC)
+ {
+ (v as ExtendedNPC).SetMovingAndMove(Game1.currentGameTime, Game1.viewport, Game1.player.currentLocation, Direction.right, true);
+ }
//v.MovePosition(Game1.currentGameTime, Game1.viewport, Game1.player.currentLocation);
//ModMonitor.Log(v.sprite.spriteHeight.ToString());
}
@@ -116,7 +120,7 @@ namespace CustomNPCFramework
{
new StardewValley.Object(475,999)
}, myNpc3);
- npcTracker.addNewNPCToLocation(Game1.getLocationFromName("BusStop", false), merch);
+ npcTracker.addNewNPCToLocation(Game1.getLocationFromName("BusStop", false), merch,new Vector2(2,23));
}
public void initializeExamples()
diff --git a/GeneralMods/CustomNPCFramework/Framework/Graphics/AssetPool.cs b/GeneralMods/CustomNPCFramework/Framework/Graphics/AssetPool.cs
index bbac2c21..01a75a73 100644
--- a/GeneralMods/CustomNPCFramework/Framework/Graphics/AssetPool.cs
+++ b/GeneralMods/CustomNPCFramework/Framework/Graphics/AssetPool.cs
@@ -5,6 +5,7 @@ using CustomNPCFramework.Framework.ModularNPCS.CharacterAnimationBases;
using CustomNPCFramework.Framework.ModularNPCS.ColorCollections;
using CustomNPCFramework.Framework.ModularNPCS.ModularRenderers;
using CustomNPCFramework.Framework.NPCS;
+using Microsoft.Xna.Framework;
using StardewValley;
using System;
using System.Collections.Generic;
@@ -152,7 +153,7 @@ namespace CustomNPCFramework.Framework.Graphics
///
///
///
- public ExtendedNPC generateNPC(Genders gender, int minNumOfAccessories, int maxNumOfAccessories, StandardColorCollection DrawColors=null)
+ public ExtendedNPC generateNPC(Genders gender, int minNumOfAccessories, int maxNumOfAccessories ,StandardColorCollection DrawColors=null)
{
Seasons myseason=Seasons.spring;
@@ -295,7 +296,7 @@ namespace CustomNPCFramework.Framework.Graphics
}
if (DrawColors == null) DrawColors = new StandardColorCollection();
var render = generateBasicRenderer(bodySheet, eyesSheet, hairSheet, shirtSheet, pantsSheet, shoesSheet, accessorySheet,DrawColors);
- ExtendedNPC npc = new ExtendedNPC(new Sprite(getDefaultSpriteImage(bodySheet)), render, new Microsoft.Xna.Framework.Vector2(13, 15) * Game1.tileSize, 2, NPCNames.getRandomNPCName(gender));
+ ExtendedNPC npc = new ExtendedNPC(new Sprite(getDefaultSpriteImage(bodySheet)), render, new Microsoft.Xna.Framework.Vector2(0,0) * Game1.tileSize, 2, NPCNames.getRandomNPCName(gender));
return npc;
}
diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteCollection.cs b/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteCollection.cs
index e914c383..0b31d26c 100644
--- a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteCollection.cs
+++ b/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteCollection.cs
@@ -132,7 +132,7 @@ namespace CustomNPCFramework.Framework.ModularNPCS
{
//DEFINITELY FIX THIS PART. Something is wrong with how these two functions handle the drawing of my npc to the scene.
//this.draw(b, position, layerDepth);
- b.Draw(this.currentSprite.sprite.Texture,position,sourceRectangle, color, 0.0f, origin,scale,effects,layerDepth);
+ b.Draw(this.currentSprite.sprite.Texture,position,this.currentSprite.sprite.sourceRect, color, 0.0f, origin,scale,effects,layerDepth);
//b.Draw(this.Sprite.Texture, npc.getLocalPosition(Game1.viewport) + new Vector2((float)(this.sprite.spriteWidth * Game1.pixelZoom / 2), (float)(this.GetBoundingBox().Height / 2)) + (this.shakeTimer > 0 ? new Vector2((float)Game1.random.Next(-1, 2), (float)Game1.random.Next(-1, 2)) : Vector2.Zero), new Microsoft.Xna.Framework.Rectangle?(this.Sprite.SourceRect), Color.White * alpha, this.rotation, new Vector2((float)(this.sprite.spriteWidth / 2), (float)((double)this.sprite.spriteHeight * 3.0 / 4.0)), Math.Max(0.2f, this.scale) * (float)Game1.pixelZoom, this.flip || this.sprite.currentAnimation != null && this.sprite.currentAnimation[this.sprite.currentAnimationIndex].flip ? SpriteEffects.FlipHorizontally : SpriteEffects.None, Math.Max(0.0f, this.drawOnTop ? 0.991f : (float)this.getStandingY() / 10000f));
}
@@ -141,17 +141,54 @@ namespace CustomNPCFramework.Framework.ModularNPCS
/// Animate the current sprite. Theoreticlly works from index offset to how many frames
///
///
- public void Animate(float intervalFromCharacter)
+ public void Animate(float intervalFromCharacter,bool loop=true)
{
- this.currentSprite.sprite.Animate(Game1.currentGameTime, 0,3, intervalFromCharacter);
+ //ANIMATE AND UPDATE SOURCE RECTANGLE NOT WORKING!!!! FIGURE THIS OUT!!!!
+ //Class1.ModMonitor.Log("Current sprite frame:"+this.currentSprite.sprite.currentFrame.ToString());
+ //Class1.ModMonitor.Log("Am I ignoring something??: " + this.currentSprite.sprite.ignoreSourceRectUpdates);
+ //Class1.ModMonitor.Log("Current Sprite Source Rect:" + this.currentSprite.sprite.sourceRect);
+ //Class1.ModMonitor.Log("Sprite width: " + this.currentSprite.sprite.spriteWidth);
+ //Class1.ModMonitor.Log("Sprite width: " + this.currentSprite.sprite.spriteHeight);
+ this.Animate(Game1.currentGameTime, 0,2, intervalFromCharacter,this.currentSprite.sprite,loop);
+ }
+
+ public virtual bool Animate(GameTime gameTime, int startFrame, int numberOfFrames, float interval, AnimatedSprite sprite, bool loop=true)
+ {
+ if (sprite.CurrentFrame >= startFrame + numberOfFrames + 1 || sprite.CurrentFrame < startFrame)
+ sprite.CurrentFrame = startFrame + sprite.CurrentFrame % numberOfFrames;
+ sprite.timer = sprite.timer + (float)gameTime.ElapsedGameTime.TotalMilliseconds;
+ if ((double)sprite.timer > (double)interval)
+ {
+ sprite.CurrentFrame = sprite.CurrentFrame + 1;
+ sprite.timer = 0.0f;
+ if (sprite.CurrentFrame == startFrame + numberOfFrames + 1 || sprite.currentFrame * sprite.spriteWidth >= sprite.Texture.Width)
+ {
+ if (loop)
+ sprite.CurrentFrame = startFrame;
+ sprite.UpdateSourceRect();
+ return true;
+ }
+ }
+ this.UpdateSourceRect(sprite);
+ return false;
+ }
+
+ public virtual void UpdateSourceRect(AnimatedSprite sprite)
+ {
+ if (sprite.ignoreSourceRectUpdates)
+ return;
+ sprite.sourceRect.X = sprite.CurrentFrame * sprite.spriteWidth;
+ sprite.sourceRect.Y = 0;
+ //sprite.SourceRect = new Rectangle(, 0, sprite.spriteWidth, sprite.spriteHeight);
}
///
/// Animate the current sprite. Theoreticlly works from index offset to how many frames
///
///
- public void Animate(float intervalFromCharacter,int startFrame,int endFrame)
+ public void Animate(float intervalFromCharacter,int startFrame,int endFrame, bool loop)
{
+ this.currentSprite.sprite.loop = loop;
this.currentSprite.sprite.Animate(Game1.currentGameTime, startFrame, endFrame, intervalFromCharacter);
}
}
diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/CharacterAnimationBase.cs b/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/CharacterAnimationBase.cs
index f68f8edb..47a59d45 100644
--- a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/CharacterAnimationBase.cs
+++ b/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/CharacterAnimationBase.cs
@@ -41,6 +41,12 @@ namespace CustomNPCFramework.Framework.ModularNPCS
}
+
+ public virtual void Animate(float animationInterval, bool loop=true)
+ {
+
+ }
+
///
/// Used to draw the sprite to the screen.
///
diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/StandardCharacterAnimation.cs b/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/StandardCharacterAnimation.cs
index 1504f3b8..d23aa91b 100644
--- a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/StandardCharacterAnimation.cs
+++ b/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/StandardCharacterAnimation.cs
@@ -101,17 +101,17 @@ namespace CustomNPCFramework.Framework.ModularNPCS.CharacterAnimationBases
this.shoes.reload();
}
- public override void Animate(float animationInterval)
+ public override void Animate(float animationInterval,bool loop=true)
{
- this.body.Animate(animationInterval);
- this.hair.Animate(animationInterval);
- this.eyes.Animate(animationInterval);
- this.shirt.Animate(animationInterval);
- this.pants.Animate(animationInterval);
- this.shoes.Animate(animationInterval);
+ this.body.Animate(animationInterval,loop);
+ this.hair.Animate(animationInterval,loop);
+ this.eyes.Animate(animationInterval,loop);
+ this.shirt.Animate(animationInterval,loop);
+ this.pants.Animate(animationInterval,loop);
+ this.shoes.Animate(animationInterval,loop);
foreach(var accessory in this.accessories)
{
- accessory.Animate(animationInterval);
+ accessory.Animate(animationInterval,loop);
}
}
@@ -184,6 +184,7 @@ namespace CustomNPCFramework.Framework.ModularNPCS.CharacterAnimationBases
{
//Class1.ModMonitor.Log(sourceRectangle.ToString());
Vector2 generalOffset = new Vector2(0, 1*Game1.tileSize); //Puts the sprite at the correct positioning.
+ position -= new Vector2(0, 0.25f * Game1.tileSize);
float smallOffset = 0.001f;
float tinyOffset = 0.0001f;
//Class1.ModMonitor.Log((position - generalOffset).ToString());
diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/BasicRenderer.cs b/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/BasicRenderer.cs
index d266ec1b..7e69f930 100644
--- a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/BasicRenderer.cs
+++ b/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/BasicRenderer.cs
@@ -32,7 +32,11 @@ namespace CustomNPCFramework.Framework.ModularNPCS.ModularRenderers
public virtual void setAnimation(string key)
{
this.currentAnimation = animationList[key];
- if (this.currentAnimation == null) this.setAnimation(AnimationKeys.standingKey);
+ if (this.currentAnimation == null)
+ {
+ Class1.ModMonitor.Log("ERROR SETTING AN ANIMATION: "+key);
+ this.setAnimation(AnimationKeys.standingKey);
+ }
}
public virtual void setDirection(int facingDirection)
@@ -120,9 +124,9 @@ namespace CustomNPCFramework.Framework.ModularNPCS.ModularRenderers
}
- public virtual void Animate(float interval)
+ public virtual void Animate(float interval, bool loop=true)
{
- this.currentAnimation.Animate(interval);
+ this.currentAnimation.Animate(interval,loop);
}
diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/Sprite.cs b/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/Sprite.cs
index 76263465..a076ca1f 100644
--- a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/Sprite.cs
+++ b/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/Sprite.cs
@@ -1,4 +1,5 @@
-using CustomNPCFramework.Framework.NPCS;
+using CustomNPCFramework.Framework.ModularNPCS.ModularRenderers;
+using CustomNPCFramework.Framework.NPCS;
using Microsoft.Xna.Framework.Graphics;
using StardewValley;
using System;
@@ -69,5 +70,57 @@ namespace CustomNPCFramework.Framework.ModularNPCS
{
this.sprite.Texture = Class1.ModHelper.Content.Load(this.relativePath);
}
+
+ ///
+ /// Set's the npc's sprites to face left IF and only if there is a non-null modular Renderer attached to the npc.
+ ///
+ ///
+ public void setLeft(ExtendedNPC npc)
+ {
+ if (npc.characterRenderer == null)
+ {
+ return;
+ }
+ else npc.characterRenderer.setLeft();
+ }
+
+ ///
+ /// Set's the npc's sprites to face left IF and only if there is a non-null modular Renderer attached to the npc.
+ ///
+ ///
+ public void setRight(ExtendedNPC npc)
+ {
+ if (npc.characterRenderer == null)
+ {
+ return;
+ }
+ else npc.characterRenderer.setRight();
+ }
+
+ ///
+ /// Set's the npc's sprites to face left IF and only if there is a non-null modular Renderer attached to the npc.
+ ///
+ ///
+ public void setDown(ExtendedNPC npc)
+ {
+ if (npc.characterRenderer == null)
+ {
+ return;
+ }
+ else npc.characterRenderer.setDown();
+ }
+
+ ///
+ /// Set's the npc's sprites to face left IF and only if there is a non-null modular Renderer attached to the npc.
+ ///
+ ///
+ public void setUp(ExtendedNPC npc)
+ {
+ if (npc.characterRenderer == null)
+ {
+ return;
+ }
+ else npc.characterRenderer.setUp();
+ }
}
}
diff --git a/GeneralMods/CustomNPCFramework/Framework/NPCS/ExtendedNPC.cs b/GeneralMods/CustomNPCFramework/Framework/NPCS/ExtendedNPC.cs
index 45e1a42a..498f4b6b 100644
--- a/GeneralMods/CustomNPCFramework/Framework/NPCS/ExtendedNPC.cs
+++ b/GeneralMods/CustomNPCFramework/Framework/NPCS/ExtendedNPC.cs
@@ -1,4 +1,5 @@
-using CustomNPCFramework.Framework.ModularNPCS;
+using CustomNPCFramework.Framework.Enums;
+using CustomNPCFramework.Framework.ModularNPCS;
using CustomNPCFramework.Framework.ModularNPCS.ModularRenderers;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
@@ -158,8 +159,75 @@ namespace CustomNPCFramework.Framework.NPCS
//ERROR NEED FIXING
public override void MovePosition(GameTime time, xTile.Dimensions.Rectangle viewport, GameLocation currentLocation)
{
- base.MovePosition(time,viewport,currentLocation);
+ if (this.characterRenderer != null)
+ {
+ ModularMovement(time,viewport,currentLocation);
+ }
+ else
+ {
+ NonModularMovement(time,viewport,currentLocation);
+ }
return;
+
+ }
+
+ ///
+ /// Set's the npc to move a certain direction and then executes the movement.
+ ///
+ ///
+ ///
+ ///
+ /// The direction to move the npc.
+ /// Set's the npc's sprite to halt if Move=false. Else set it to true.
+ public virtual void SetMovingAndMove(GameTime time, xTile.Dimensions.Rectangle viewport, GameLocation currentLocation, Direction MoveDirection, bool Move=true)
+ {
+ if (MoveDirection == Direction.down) this.SetMovingDown(Move);
+ if (MoveDirection == Direction.left) this.SetMovingLeft(Move);
+ if (MoveDirection == Direction.up) this.SetMovingUp(Move);
+ if (MoveDirection == Direction.right) this.SetMovingRight(Move);
+ this.MovePosition(time, viewport, currentLocation);
+ }
+
+ public virtual void NonModularMovement(GameTime time, xTile.Dimensions.Rectangle viewport, GameLocation location)
+ {
+ base.MovePosition(time, viewport, currentLocation);
+ return;
+ }
+
+ public virtual bool canMovePastNextLocation(xTile.Dimensions.Rectangle viewport)
+ {
+ //Up
+ if (!currentLocation.isTilePassable(this.nextPosition(0), viewport) || !this.willDestroyObjectsUnderfoot)
+ {
+ return false;
+ }
+ //Right
+ if (!currentLocation.isTilePassable(this.nextPosition(1), viewport) || !this.willDestroyObjectsUnderfoot)
+ {
+ return false;
+ }
+ //Down
+ if (!currentLocation.isTilePassable(this.nextPosition(2), viewport) || !this.willDestroyObjectsUnderfoot)
+ {
+ return false;
+ }
+ //Left
+ if (!currentLocation.isTilePassable(this.nextPosition(3), viewport) || !this.willDestroyObjectsUnderfoot)
+ {
+ return false;
+ }
+ return true;
+ }
+
+ public virtual void ModularMovement(GameTime time, xTile.Dimensions.Rectangle viewport, GameLocation location, float interval = 1000f)
+ {
+ interval /= 2;
+ this.characterRenderer.setAnimation(AnimationKeys.walkingKey);
+ if (this.canMovePastNextLocation(viewport) == false)
+ {
+ this.Halt();
+ return;
+ }
if (this.GetType() == typeof(FarmAnimal))
this.willDestroyObjectsUnderfoot = false;
if ((double)this.xVelocity != 0.0 || (double)this.yVelocity != 0.0)
@@ -182,7 +250,9 @@ namespace CustomNPCFramework.Framework.NPCS
this.position.Y -= (float)(this.speed + this.addedSpeed);
if (!this.ignoreMovementAnimation)
{
- this.sprite.AnimateUp(time, (this.speed - 2 + this.addedSpeed) * -25, Utility.isOnScreen(this.getTileLocationPoint(), 1, currentLocation) ? "Cowboy_Footstep" : "");
+ this.spriteInformation.setUp(this);
+ this.characterRenderer.Animate(interval,true);
+ //this.sprite.AnimateUp(time, (this.speed - 2 + this.addedSpeed) * -25, Utility.isOnScreen(this.getTileLocationPoint(), 1, currentLocation) ? "Cowboy_Footstep" : "");
this.faceDirection(0);
}
}
@@ -207,7 +277,10 @@ namespace CustomNPCFramework.Framework.NPCS
this.position.X += (float)(this.speed + this.addedSpeed);
if (!this.ignoreMovementAnimation)
{
- this.sprite.AnimateRight(time, (this.speed - 2 + this.addedSpeed) * -25, Utility.isOnScreen(this.getTileLocationPoint(), 1, currentLocation) ? "Cowboy_Footstep" : "");
+ this.spriteInformation.setRight(this);
+ this.characterRenderer.Animate(interval,true);
+ //this.spriteInformation.sprite.Animate(time, 0, 3, 1f);
+ //this.sprite.AnimateRight(time, (this.speed - 2 + this.addedSpeed) * -25, Utility.isOnScreen(this.getTileLocationPoint(), 1, currentLocation) ? "Cowboy_Footstep" : "");
this.faceDirection(1);
}
}
@@ -232,7 +305,10 @@ namespace CustomNPCFramework.Framework.NPCS
this.position.Y += (float)(this.speed + this.addedSpeed);
if (!this.ignoreMovementAnimation)
{
- this.sprite.AnimateDown(time, (this.speed - 2 + this.addedSpeed) * -25, Utility.isOnScreen(this.getTileLocationPoint(), 1, currentLocation) ? "Cowboy_Footstep" : "");
+ this.spriteInformation.setDown(this);
+ this.characterRenderer.Animate(interval,true);
+ //this.spriteInformation.sprite.Animate(time, 0, 3, 1f);
+ //this.sprite.AnimateDown(time, (this.speed - 2 + this.addedSpeed) * -25, Utility.isOnScreen(this.getTileLocationPoint(), 1, currentLocation) ? "Cowboy_Footstep" : "");
this.faceDirection(2);
}
}
@@ -257,7 +333,10 @@ namespace CustomNPCFramework.Framework.NPCS
this.position.X -= (float)(this.speed + this.addedSpeed);
if (!this.ignoreMovementAnimation)
{
- this.sprite.AnimateLeft(time, (this.speed - 2 + this.addedSpeed) * -25, Utility.isOnScreen(this.getTileLocationPoint(), 1, currentLocation) ? "Cowboy_Footstep" : "");
+ this.spriteInformation.setLeft(this);
+ this.characterRenderer.Animate(interval,true);
+ //this.spriteInformation.sprite.Animate(time, 0, 3, 1f);
+ //this.sprite.AnimateLeft(time, (this.speed - 2 + this.addedSpeed) * -25, Utility.isOnScreen(this.getTileLocationPoint(), 1, currentLocation) ? "Cowboy_Footstep" : "");
this.faceDirection(3);
}
}
@@ -290,6 +369,12 @@ namespace CustomNPCFramework.Framework.NPCS
}
}
+ public override void Halt()
+ {
+ this.characterRenderer.setAnimation(AnimationKeys.standingKey);
+ base.Halt();
+ }
+
public override void update(GameTime time, GameLocation location)
{
base.update(time, location);
@@ -425,7 +510,7 @@ namespace CustomNPCFramework.Framework.NPCS
{
this.characterRenderer.setAnimation(AnimationKeys.swimmingKey);
this.characterRenderer.setDirection(this.facingDirection);
- this.characterRenderer.draw(b,this,this.getLocalPosition(Game1.viewport) + new Vector2((float)(Game1.tileSize / 2), (float)(Game1.tileSize + Game1.tileSize / 4 + this.yJumpOffset * 2)) + (this.shakeTimer > 0 ? new Vector2((float)Game1.random.Next(-1, 2), (float)Game1.random.Next(-1, 2)) : Vector2.Zero) - new Vector2(0.0f, this.yOffset), new Microsoft.Xna.Framework.Rectangle?(new Microsoft.Xna.Framework.Rectangle(this.sprite.SourceRect.X, this.sprite.SourceRect.Y, this.sprite.SourceRect.Width, this.sprite.SourceRect.Height / 2 - (int)((double)this.yOffset / (double)Game1.pixelZoom))), Color.White, this.rotation, new Vector2((float)(Game1.tileSize / 2), (float)(Game1.tileSize * 3 / 2)) / 4f, Math.Max(0.2f, this.scale) * (float)Game1.pixelZoom, this.flip ? SpriteEffects.FlipHorizontally : SpriteEffects.None, Math.Max(0.0f, this.drawOnTop ? 0.991f : (float)this.getStandingY() / 10000f));
+ this.characterRenderer.draw(b,this,this.getLocalPosition(Game1.viewport) + new Vector2((float)(Game1.tileSize / 2), (float)(Game1.tileSize + Game1.tileSize / 4 + this.yJumpOffset * 2)) + (this.shakeTimer > 0 ? new Vector2((float)Game1.random.Next(-1, 2), (float)Game1.random.Next(-1, 2)) : Vector2.Zero) - new Vector2(0.0f, this.yOffset), new Microsoft.Xna.Framework.Rectangle?(new Microsoft.Xna.Framework.Rectangle(this.sprite.SourceRect.X, this.sprite.SourceRect.Y, this.sprite.SourceRect.Width, this.sprite.SourceRect.Height / 2 - (int)((double)this.yOffset / (double)Game1.pixelZoom))), Color.White, this.rotation, new Vector2((float)(Game1.tileSize / 2), (float)(Game1.tileSize * 3 / 2)) / 4f, Math.Max(0.2f, this.scale) * (float)Game1.pixelZoom, this.flip ? SpriteEffects.FlipHorizontally : SpriteEffects.None, Math.Max(0.0f, (float)this.getStandingY() / 10000f));
//Vector2 localPosition = this.getLocalPosition(Game1.viewport);
//b.Draw(Game1.staminaRect, new Microsoft.Xna.Framework.Rectangle((int)localPosition.X + (int)this.yOffset + Game1.pixelZoom * 2, (int)localPosition.Y - 32 * Game1.pixelZoom + this.sprite.SourceRect.Height * Game1.pixelZoom + Game1.tileSize * 3 / 4 + this.yJumpOffset * 2 - (int)this.yOffset, this.sprite.SourceRect.Width * Game1.pixelZoom - (int)this.yOffset * 2 - Game1.pixelZoom * 4, Game1.pixelZoom), new Microsoft.Xna.Framework.Rectangle?(Game1.staminaRect.Bounds), Color.White * 0.75f, 0.0f, Vector2.Zero, SpriteEffects.None, (float)((double)this.getStandingY() / 10000.0 + 1.0 / 1000.0));
}
@@ -530,6 +615,11 @@ namespace CustomNPCFramework.Framework.NPCS
}
+ ///
+ /// Basic draw functionality to checkn whether or not to draw the npc using it's default sprite or using a custom character renderer.
+ ///
+ ///
+ ///
public override void draw(SpriteBatch b, float alpha = 1f)
{
if (this.characterRenderer == null)
diff --git a/GeneralMods/CustomNPCFramework/Framework/Utilities/NPCTracker.cs b/GeneralMods/CustomNPCFramework/Framework/Utilities/NPCTracker.cs
index a3aea34c..5c80adf9 100644
--- a/GeneralMods/CustomNPCFramework/Framework/Utilities/NPCTracker.cs
+++ b/GeneralMods/CustomNPCFramework/Framework/Utilities/NPCTracker.cs
@@ -1,4 +1,5 @@
using CustomNPCFramework.Framework.NPCS;
+using Microsoft.Xna.Framework;
using StardewValley;
using System;
using System.Collections.Generic;
@@ -32,6 +33,16 @@ namespace CustomNPCFramework.Framework.Utilities
{
this.moddedNPCS.Add(npc);
npc.defaultLocation = loc;
+ npc.currentLocation = loc;
+ loc.addCharacter(npc);
+ }
+
+ public void addNewNPCToLocation(GameLocation loc, ExtendedNPC npc, Vector2 tilePosition)
+ {
+ this.moddedNPCS.Add(npc);
+ npc.defaultLocation = loc;
+ npc.currentLocation = loc;
+ npc.position = tilePosition*Game1.tileSize;
loc.addCharacter(npc);
}
diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/VanillaFemaleBodyBase.json b/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/VanillaFemaleBodyBase.json
index a3d9458a..56fc7d20 100644
--- a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/VanillaFemaleBodyBase.json
+++ b/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/VanillaFemaleBodyBase.json
@@ -21,10 +21,10 @@
"downString": "FBodyBaseDown"
},
"movingAssetPaths": {
- "leftString": "FBodyBaseLeft",
- "rightString": "FBodyBaseRight",
- "upString": "FBodyBaseUp",
- "downString": "FBodyBaseDown"
+ "leftString": "FBodyBaseMovingLeft",
+ "rightString": "FBodyBaseMovingRight",
+ "upString": "FBodyBaseMovingUp",
+ "downString": "FBodyBaseMovingDown"
},
"sittingAssetPaths": {
"leftString": "FBodyBaseLeft",