private void UpdateAttackFrameIfNeeded() { if (!NPC.Attacking || (DateTime.Now - _actionStartTime).TotalMilliseconds < 100) { return; } _actionStartTime = DateTime.Now; switch (Frame) { case NPCFrame.Standing: case NPCFrame.StandingFrame1: Frame = NPCFrame.Attack1; break; case NPCFrame.Attack1: Frame = NPCFrame.Attack2; break; case NPCFrame.Attack2: Frame = NPCFrame.Standing; NPC.EndAttacking(); break; } }
public INPC WithFrame(NPCFrame frame) { var copy = MakeCopy(this); copy.Frame = frame; return(copy); }
public override void Initialize() { base.Initialize(); //required to use the GraphicsDevice property InitializeTopPixel(); InitializeStandingFrame1(); _sb = new SpriteBatch(GraphicsDevice); Frame = NPCFrame.Standing; var baseFrame = _npcSheet.GetNPCTexture(NPC.Data.Graphic, Frame, NPC.Direction); _npcTextureFrameRectangle = new Rectangle(0, 0, baseFrame.Width, baseFrame.Height); UpdateDrawArea(); }
public Texture2D GetNPCTexture(int baseGraphic, NPCFrame whichFrame, EODirection direction) { int offset; switch (whichFrame) { case NPCFrame.Standing: offset = direction == EODirection.Down || direction == EODirection.Right ? 1 : 3; break; case NPCFrame.StandingFrame1: offset = direction == EODirection.Down || direction == EODirection.Right ? 2 : 4; break; case NPCFrame.WalkFrame1: offset = direction == EODirection.Down || direction == EODirection.Right ? 5 : 9; break; case NPCFrame.WalkFrame2: offset = direction == EODirection.Down || direction == EODirection.Right ? 6 : 10; break; case NPCFrame.WalkFrame3: offset = direction == EODirection.Down || direction == EODirection.Right ? 7 : 11; break; case NPCFrame.WalkFrame4: offset = direction == EODirection.Down || direction == EODirection.Right ? 8 : 12; break; case NPCFrame.Attack1: offset = direction == EODirection.Down || direction == EODirection.Right ? 13 : 15; break; case NPCFrame.Attack2: offset = direction == EODirection.Down || direction == EODirection.Right ? 14 : 16; break; default: return(null); } var baseGfx = (baseGraphic - 1) * 40; return(_gfxManager.TextureFromResource(GFXTypes.NPC, baseGfx + offset, true)); }
private void UpdateWalkFrameIfNeeded() { if (!NPC.Walking || (DateTime.Now - _actionStartTime).TotalMilliseconds < 100) { return; } _actionStartTime = DateTime.Now; switch (NPC.Direction) { case EODirection.Down: walkingAdjustedX += -8; walkingAdjustedY += 4; break; case EODirection.Left: walkingAdjustedX += -8; walkingAdjustedY += -4; break; case EODirection.Up: walkingAdjustedX += 8; walkingAdjustedY += -4; break; case EODirection.Right: walkingAdjustedX += 8; walkingAdjustedY += 4; break; } switch (Frame) { case NPCFrame.Standing: case NPCFrame.StandingFrame1: Frame = NPCFrame.WalkFrame1; break; case NPCFrame.WalkFrame1: Frame = NPCFrame.WalkFrame2; break; case NPCFrame.WalkFrame2: Frame = NPCFrame.WalkFrame3; break; case NPCFrame.WalkFrame3: Frame = NPCFrame.WalkFrame4; break; case NPCFrame.WalkFrame4: Frame = NPCFrame.Standing; NPC.EndWalking(); walkingAdjustedX = walkingAdjustedY = 0; break; } }
private void UpdateStandingFrameIfNeeded() { if (NPC.Walking || NPC.Attacking || !hasStandFrame1) { return; } //switch the standing animation for NPCs every 500ms, if they're standing still if ((DateTime.Now - _lastAnimUpdateTime).TotalMilliseconds > 250) { if (Frame == NPCFrame.Standing) { Frame = NPCFrame.StandingFrame1; } else if (Frame == NPCFrame.StandingFrame1) { Frame = NPCFrame.Standing; } _lastAnimUpdateTime = DateTime.Now; } }