예제 #1
0
        public void InitializeSprites(ContentManager Content)
        {
            //healthNumberSprite = new NumberSprite(Content, 52, HealthNumberNumDigits);

            for (SpriteState.MotionType motionType = SpriteState.MotionType.FirstMotionType;
                 motionType < SpriteState.MotionType.LastMotionType;
                 ++motionType)
            {
                for (SpriteState.HorizontalFacing horizontalFacing = SpriteState.HorizontalFacing.FirstHorizontalFacing;
                     horizontalFacing < SpriteState.HorizontalFacing.LastHorizontalFacing;
                     ++horizontalFacing)
                {
                    for (SpriteState.VerticalFacing verticalFacing = SpriteState.VerticalFacing.FirstVerticalFacing;
                         verticalFacing < SpriteState.VerticalFacing.LastVerticalFacing;
                         ++verticalFacing)
                    {
                        for (SpriteState.StrideType strideType = SpriteState.StrideType.FirstStrideType;
                             strideType < SpriteState.StrideType.LastStrideType;
                             ++strideType)
                        {
                            InitializeSprite(Content, new SpriteState(
                                                 new Tuple <SpriteState.MotionType, SpriteState.HorizontalFacing, SpriteState.VerticalFacing, SpriteState.StrideType>(
                                                     motionType, horizontalFacing, verticalFacing, strideType)));
                        }
                    }
                }
            }
        }
예제 #2
0
        public void InitializeSprites(ContentManager Content)
        {
            for (GunLevelUnit gunLevel = 0; gunLevel < Units.MaxGunLevel; gunLevel++)
            {
                horizontalProjectiles[gunLevel] = new Sprite(Content, "Bullet",
                                                             Units.TileToPixel(HorizontalProjectileSourceXs[gunLevel]), Units.TileToPixel(ProjectileSourceYs[gunLevel]),
                                                             Units.TileToPixel(1), Units.TileToPixel(1));
                verticalProjectiles[gunLevel] = new Sprite(Content, "Bullet",
                                                           Units.TileToPixel(HorizontalProjectileSourceXs[gunLevel] + 1), Units.TileToPixel(ProjectileSourceYs[gunLevel]),
                                                           Units.TileToPixel(1), Units.TileToPixel(1));
            }

            for (SpriteState.HorizontalFacing horizontalFacing = SpriteState.HorizontalFacing.FirstHorizontalFacing;
                 horizontalFacing < SpriteState.HorizontalFacing.LastHorizontalFacing;
                 ++horizontalFacing)
            {
                for (SpriteState.VerticalFacing verticalFacing = SpriteState.VerticalFacing.FirstVerticalFacing;
                     verticalFacing < SpriteState.VerticalFacing.LastVerticalFacing;
                     ++verticalFacing)
                {
                    InitializeSprite(Content, new PolarStarSpriteState(
                                         new Tuple <SpriteState.HorizontalFacing, SpriteState.VerticalFacing>(
                                             horizontalFacing, verticalFacing)));
                }
            }
        }
예제 #3
0
 public Player(ContentManager Content, ParticleTools particleTools, GameUnit x, GameUnit y)
     : base(CollisionType.StickyCollision)
 {
     sprites = new Dictionary<SpriteState, Sprite>();
     InitializeSprites(Content);
     this.particleTools = particleTools;
     kinematicsX = new Kinematics(x, 0);
     kinematicsY = new Kinematics(y, 0);
     accelerationX = 0;
     horizontalFacing = SpriteState.HorizontalFacing.Left;
     intendedVerticalFacing = SpriteState.VerticalFacing.Horizontal;
     walkingAnimation = new WalkingAnimation();
     maybeGroundTile = null;
     jumpActive = false;
     playerHealth = new PlayerHealth(Content);
     interacting = false;
     invincibleTimer = new Timer(InvincibleTime);
     damageText = new FloatingNumber(Content, FloatingNumber.NumberType.Damage);
     experienceText = new FloatingNumber(Content, FloatingNumber.NumberType.Experience);
     gunExperienceHud = new GunExperienceHud(Content);
     polarStar = new PolarStar(Content);
     collisionRectangle = new CompositeCollisionRectangle(new Rectangle((int)Math.Round(CollisionTopLeft), (int)Math.Round(CollisionYTop),
         (int)Math.Round(CollisionTopWidth), (int)Math.Round(CollisionYHeight / 2)),
         new Rectangle((int)Math.Round(CollisionBottomLeft), (int)Math.Round(CollisionYTop + CollisionYHeight / 2),
         (int)Math.Round(CollisionBottomWidth), (int)Math.Round(CollisionYHeight / 2)),
         new Rectangle(6, 10, 10, 12),
         new Rectangle(16, 10, 10, 12));
 }
예제 #4
0
 public Player(ContentManager Content, ParticleTools particleTools, GameUnit x, GameUnit y) : base(CollisionType.StickyCollision)
 {
     sprites = new Dictionary <SpriteState, Sprite>();
     InitializeSprites(Content);
     this.particleTools     = particleTools;
     kinematicsX            = new Kinematics(x, 0);
     kinematicsY            = new Kinematics(y, 0);
     accelerationX          = 0;
     horizontalFacing       = SpriteState.HorizontalFacing.Left;
     intendedVerticalFacing = SpriteState.VerticalFacing.Horizontal;
     walkingAnimation       = new WalkingAnimation();
     maybeGroundTile        = null;
     jumpActive             = false;
     playerHealth           = new PlayerHealth(Content);
     interacting            = false;
     invincibleTimer        = new Timer(InvincibleTime);
     damageText             = new FloatingNumber(Content, FloatingNumber.NumberType.Damage);
     experienceText         = new FloatingNumber(Content, FloatingNumber.NumberType.Experience);
     gunExperienceHud       = new GunExperienceHud(Content);
     polarStar          = new PolarStar(Content);
     collisionRectangle = new CompositeCollisionRectangle(new Rectangle((int)Math.Round(CollisionTopLeft), (int)Math.Round(CollisionYTop),
                                                                        (int)Math.Round(CollisionTopWidth), (int)Math.Round(CollisionYHeight / 2)),
                                                          new Rectangle((int)Math.Round(CollisionBottomLeft), (int)Math.Round(CollisionYTop + CollisionYHeight / 2),
                                                                        (int)Math.Round(CollisionBottomWidth), (int)Math.Round(CollisionYHeight / 2)),
                                                          new Rectangle(6, 10, 10, 12),
                                                          new Rectangle(16, 10, 10, 12));
 }
예제 #5
0
 public void InitializeSprites(ContentManager Content)
 {
     for (SpriteState.HorizontalFacing facing = CaveStory.SpriteState.HorizontalFacing.FirstHorizontalFacing;
          facing < CaveStory.SpriteState.HorizontalFacing.LastHorizontalFacing; facing++)
     {
         InitializeSprite(Content, new BatSpriteState(new Tuple <SpriteState.HorizontalFacing>(facing)));
     }
 }
예제 #6
0
 public bool Update(GameTime gameTime, GameUnit playerX)
 {
     flightAngle += AngularVelocity *
                    (float)gameTime.ElapsedGameTime.TotalMilliseconds;
     facing = x + Units.HalfTile > playerX ?
              CaveStory.SpriteState.HorizontalFacing.Left : CaveStory.SpriteState.HorizontalFacing.Right;
     y = flightCenterY + FlightAmplitude * (float)Math.Sin(MathHelper.ToRadians(flightAngle));
     sprites[SpriteState].Update();
     return(alive);
 }
예제 #7
0
 public void StartMovingRight()
 {
     if (OnGround && accelerationX == 0)
     {
         walkingAnimation.Reset();
     }
     interacting      = false;
     accelerationX    = 1;
     horizontalFacing = SpriteState.HorizontalFacing.Right;
 }
예제 #8
0
 private GameUnit GunX(SpriteState.HorizontalFacing horizontalFacing, GameUnit playerX)
 {
     if (horizontalFacing == SpriteState.HorizontalFacing.Left)
     {
         return(playerX - Units.HalfTile);
     }
     else
     {
         return(playerX);
     }
 }
예제 #9
0
 public FirstCaveBat(ContentManager Content, GameUnit x, GameUnit y)
 {
     sprites       = new Dictionary <BatSpriteState, Sprite>();
     this.x        = x;
     this.y        = y;
     flightCenterY = y;
     alive         = true;
     flightAngle   = 0.0f;
     facing        = CaveStory.SpriteState.HorizontalFacing.Right;
     damageText    = new FloatingNumber(Content, FloatingNumber.NumberType.Damage);
     InitializeSprites(Content);
 }
예제 #10
0
 public FirstCaveBat(ContentManager Content, GameUnit x, GameUnit y)
 {
     sprites = new Dictionary<BatSpriteState, Sprite>();
     this.x = x;
     this.y = y;
     flightCenterY = y;
     alive = true;
     flightAngle = 0.0f;
     facing = CaveStory.SpriteState.HorizontalFacing.Right;
     damageText = new FloatingNumber(Content, FloatingNumber.NumberType.Damage);
     InitializeSprites(Content);
 }
예제 #11
0
 public Projectile(Sprite sprite,
                   SpriteState.HorizontalFacing horizontalDirection, SpriteState.VerticalFacing verticalDirection,
                   GameUnit x, GameUnit y,
                   GunLevelUnit gunLevel, ParticleTools particleTools)
 {
     this.sprite = sprite;
     this.horizontalDirection = horizontalDirection;
     this.verticalDirection   = verticalDirection;
     this.x        = x;
     this.y        = y;
     this.gunLevel = gunLevel;
     offset        = 0;
     alive         = true;
     particleTools.FrontSystem.AddNewParticle(ProjectileStarParticle.Create(particleTools.Content, x, y));
 }
예제 #12
0
 public static SideType FromFacing(SpriteState.HorizontalFacing horizontalFacing,
                                   SpriteState.VerticalFacing verticalFacing)
 {
     if (verticalFacing == SpriteState.VerticalFacing.Up)
     {
         return(SideType.TopSide);
     }
     if (verticalFacing == SpriteState.VerticalFacing.Down)
     {
         return(SideType.BottomSide);
     }
     if (horizontalFacing == SpriteState.HorizontalFacing.Left)
     {
         return(SideType.LeftSide);
     }
     return(SideType.RightSide);
 }
예제 #13
0
        public void Draw(SpriteBatch spriteBatch,
                         SpriteState.HorizontalFacing horizontalFacing, SpriteState.VerticalFacing verticalFacing,
                         bool gunUp,
                         GameUnit playerX, GameUnit playerY)
        {
            GameUnit x = GunX(horizontalFacing, playerX);
            GameUnit y = GunY(verticalFacing, gunUp, playerY);

            sprites[new PolarStarSpriteState(new Tuple <SpriteState.HorizontalFacing, SpriteState.VerticalFacing>(
                                                 horizontalFacing, verticalFacing))].Draw(spriteBatch, x, y);
            if (projectileA != null)
            {
                projectileA.Draw(spriteBatch);
            }
            if (projectileB != null)
            {
                projectileB.Draw(spriteBatch);
            }
        }
예제 #14
0
 public void StartMovingRight()
 {
     if (OnGround && accelerationX == 0)
     {
         walkingAnimation.Reset();
     }
     interacting = false;
     accelerationX = 1;
     horizontalFacing = SpriteState.HorizontalFacing.Right;
 }
예제 #15
0
 public Projectile(Sprite sprite,
     SpriteState.HorizontalFacing horizontalDirection, SpriteState.VerticalFacing verticalDirection,
     GameUnit x, GameUnit y,
     GunLevelUnit gunLevel, ParticleTools particleTools)
 {
     this.sprite = sprite;
     this.horizontalDirection = horizontalDirection;
     this.verticalDirection = verticalDirection;
     this.x = x;
     this.y = y;
     this.gunLevel = gunLevel;
     offset = 0;
     alive = true;
     particleTools.FrontSystem.AddNewParticle(ProjectileStarParticle.Create(particleTools.Content, x, y));
 }
예제 #16
0
 public bool Update(GameTime gameTime, GameUnit playerX)
 {
     flightAngle += AngularVelocity *
         (float)gameTime.ElapsedGameTime.TotalMilliseconds;
     facing = x + Units.HalfTile > playerX ?
         CaveStory.SpriteState.HorizontalFacing.Left : CaveStory.SpriteState.HorizontalFacing.Right;
     y = flightCenterY + FlightAmplitude * (float)Math.Sin(MathHelper.ToRadians(flightAngle));
     sprites[SpriteState].Update();
     return alive;
 }
예제 #17
0
        public void StartFire(GameUnit playerX, GameUnit playerY,
                              SpriteState.HorizontalFacing horizontalFacing,
                              SpriteState.VerticalFacing verticalFacing,
                              bool gunUp, ParticleTools particleTools)
        {
            if (projectileA != null && projectileB != null)
            {
                return;
            }
            GameUnit bulletX = GunX(horizontalFacing, playerX) - Units.HalfTile;
            GameUnit bulletY = GunY(verticalFacing, gunUp, playerY) - Units.HalfTile;

            switch (verticalFacing)
            {
            case SpriteState.VerticalFacing.Horizontal:
                bulletY += NozzleHorizontalY;
                if (horizontalFacing == SpriteState.HorizontalFacing.Left)
                {
                    bulletX += NozzleHorizontalLeftX;
                }
                else
                {
                    bulletX += NozzleHorizontalRightX;
                }
                break;

            case SpriteState.VerticalFacing.Up:
                bulletY += NozzleUpY;
                if (horizontalFacing == SpriteState.HorizontalFacing.Left)
                {
                    bulletX += NozzleUpLeftX;
                }
                else
                {
                    bulletX += NozzleUpRightX;
                }
                break;

            case SpriteState.VerticalFacing.Down:
                bulletY += NozzleDownY;
                if (horizontalFacing == SpriteState.HorizontalFacing.Left)
                {
                    bulletX += NozzleDownLeftX;
                }
                else
                {
                    bulletX += NozzleDownRightX;
                }
                break;

            default:
                break;
            }

            if (projectileA == null)
            {
                projectileA = new Projectile(verticalFacing == SpriteState.VerticalFacing.Horizontal ?
                                             horizontalProjectiles[CurrentLevel - 1] :
                                             verticalProjectiles[CurrentLevel - 1],
                                             horizontalFacing, verticalFacing, bulletX, bulletY, CurrentLevel, particleTools);
            }
            else if (projectileB == null)
            {
                projectileB = new Projectile(verticalFacing == SpriteState.VerticalFacing.Horizontal ?
                                             horizontalProjectiles[CurrentLevel - 1] :
                                             verticalProjectiles[CurrentLevel - 1],
                                             horizontalFacing, verticalFacing, bulletX, bulletY, CurrentLevel, particleTools);
            }
        }