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;
            }
        }
Beispiel #2
0
        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;
            }
        }