Exemplo n.º 1
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));
 }
Exemplo n.º 2
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));
 }
Exemplo n.º 3
0
        /// <summary>
        /// Returns true if projectile is still alive
        /// </summary>
        /// <param name="gameTime"></param>
        /// <returns>True if projectile is still alive</returns>
        public bool Update(GameTime gameTime, Map map, ParticleTools particleTools)
        {
            offset += (float)gameTime.ElapsedGameTime.TotalMilliseconds * ProjectileSpeed;

            TileInfo.SideType    direction      = TileInfo.FromFacing(horizontalDirection, verticalDirection);
            Rectangle            rectangle      = CollisionRectangle;
            List <CollisionTile> collidingTiles = map.GetCollidingTiles(rectangle, direction);

            for (int i = 0; i < collidingTiles.Count; i++)
            {
                TileInfo.SideType side = TileInfo.OppositeSide(direction);
                GameUnit          perpendicularPosition = TileInfo.Vertical(side) ?
                                                          rectangle.Center.X : rectangle.Center.Y;
                GameUnit          leadingPosition  = rectangle.Side(direction);
                bool              shouldTestSlopes = true;
                TestCollisionInfo testInfo         = collidingTiles[i].TestCollision(side, perpendicularPosition,
                                                                                     leadingPosition, shouldTestSlopes);
                if (testInfo.isColliding)
                {
                    GameUnit collisionX;
                    if (TileInfo.Vertical(side))
                    {
                        collisionX = perpendicularPosition;
                    }
                    else
                    {
                        collisionX = testInfo.position;
                    }
                    GameUnit collisionY;
                    if (TileInfo.Vertical(side))
                    {
                        collisionY = testInfo.position;
                    }
                    else
                    {
                        collisionY = perpendicularPosition;
                    }
                    particleTools.FrontSystem.AddNewParticle(ProjectileWallParticle.Create(particleTools.Content,
                                                                                           collisionX - Units.HalfTile, collisionY - Units.HalfTile));
                    return(false);
                }
            }
            if (!alive)
            {
                return(false);
            }
            else if (offset >= ProjectileMaxOffsets[gunLevel - 1])
            {
                particleTools.FrontSystem.AddNewParticle(ProjectileStarParticle.Create(particleTools.Content, X, Y));
                return(false);
            }
            else
            {
                return(true);
            }
        }
Exemplo n.º 4
0
 public static void CreateRandomDeathCloud(ParticleTools particleTools,
     GameUnit centerX, GameUnit centerY,
     int numParticles)
 {
     for (int i = 0; i < numParticles; i++)
     {
         particleTools.EntitySystem.AddNewParticle(new DeathCloudParticle(particleTools.Content,
             centerX, centerY,
             Game1.Random.Next(0, 3) * BaseVelocity, Game1.Random.Next(0, 360)));
     }
 }
Exemplo n.º 5
0
 public static void CreateRandomDeathCloud(ParticleTools particleTools,
                                           GameUnit centerX, GameUnit centerY,
                                           int numParticles)
 {
     for (int i = 0; i < numParticles; i++)
     {
         particleTools.EntitySystem.AddNewParticle(new DeathCloudParticle(particleTools.Content,
                                                                          centerX, centerY,
                                                                          Game1.Random.Next(0, 3) * BaseVelocity, Game1.Random.Next(0, 360)));
     }
 }
Exemplo n.º 6
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));
 }
Exemplo n.º 7
0
 public void UpdateProjectiles(GameTime gameTime, Map map, ParticleTools particleTools)
 {
     if (projectileA != null)
     {
         if (!projectileA.Update(gameTime, map, particleTools))
         {
             projectileA = null;
         }
     }
     if (projectileB != null)
     {
         if (!projectileB.Update(gameTime, map, particleTools))
         {
             projectileB = null;
         }
     }
 }
Exemplo n.º 8
0
        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(graphics.GraphicsDevice);

            frontParticleSystem  = new ParticleSystem();
            entityParticleSystem = new ParticleSystem();
            particleTools        = new ParticleTools(frontParticleSystem, entityParticleSystem, Content);
            player = new Player(Content, particleTools, Units.TileToGame(ScreenWidth / 2), Units.TileToGame(ScreenHeight / 2));
            damageTexts.AddDamageable(player);
            bat = new FirstCaveBat(Content, Units.TileToGame(7), Units.TileToGame(ScreenHeight / 2 + 1));
            damageTexts.AddDamageable(bat);
            map = Map.CreateSlopeTestMap(Content);

            pickups.Add(new PowerDoritoPickup(Content, bat.CenterX, bat.CenterY, PowerDoritoPickup.SizeType.Medium));
            pickups.Add(new PowerDoritoPickup(Content, bat.CenterX, bat.CenterY, PowerDoritoPickup.SizeType.Medium));
            pickups.Add(new PowerDoritoPickup(Content, bat.CenterX, bat.CenterY, PowerDoritoPickup.SizeType.Medium));
            base.LoadContent();
        }
Exemplo n.º 9
0
        /// <summary>
        /// Returns true if projectile is still alive
        /// </summary>
        /// <param name="gameTime"></param>
        /// <returns>True if projectile is still alive</returns>
        public bool Update(GameTime gameTime, Map map, ParticleTools particleTools)
        {
            offset += (float)gameTime.ElapsedGameTime.TotalMilliseconds * ProjectileSpeed;

            TileInfo.SideType direction = TileInfo.FromFacing(horizontalDirection, verticalDirection);
            Rectangle rectangle = CollisionRectangle;
            List<CollisionTile> collidingTiles = map.GetCollidingTiles(rectangle, direction);
            for (int i = 0; i < collidingTiles.Count; i++)
            {
                TileInfo.SideType side = TileInfo.OppositeSide(direction);
                GameUnit perpendicularPosition = TileInfo.Vertical(side) ?
                    rectangle.Center.X : rectangle.Center.Y;
                GameUnit leadingPosition = rectangle.Side(direction);
                bool shouldTestSlopes = true;
                TestCollisionInfo testInfo = collidingTiles[i].TestCollision(side, perpendicularPosition,
                    leadingPosition, shouldTestSlopes);
                if (testInfo.isColliding)
                {
                    GameUnit collisionX;
                    if (TileInfo.Vertical(side))
                    {
                        collisionX = perpendicularPosition;
                    }
                    else
                    {
                        collisionX = testInfo.position;
                    }
                    GameUnit collisionY;
                    if (TileInfo.Vertical(side))
                    {
                        collisionY = testInfo.position;
                    }
                    else
                    {
                        collisionY = perpendicularPosition;
                    }
                    particleTools.FrontSystem.AddNewParticle(ProjectileWallParticle.Create(particleTools.Content,
                        collisionX - Units.HalfTile, collisionY - Units.HalfTile));
                    return false;
                }
            }
            if (!alive)
            {
                return false;
            }
            else if (offset >= ProjectileMaxOffsets[gunLevel - 1])
            {
                particleTools.FrontSystem.AddNewParticle(ProjectileStarParticle.Create(particleTools.Content, X, Y));
                return false;
            }
            else
            {
                return true;
            }
        }
Exemplo n.º 10
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));
 }
Exemplo n.º 11
0
 public void UpdateProjectiles(GameTime gameTime, Map map, ParticleTools particleTools)
 {
     if (projectileA != null)
     {
         if (!projectileA.Update(gameTime, map, particleTools))
         {
             projectileA = null;
         }
     }
     if (projectileB != null)
     {
         if (!projectileB.Update(gameTime, map, particleTools))
         {
             projectileB = null;
         }
     }
 }
Exemplo n.º 12
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);
            }
        }
Exemplo n.º 13
0
        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(graphics.GraphicsDevice);

            frontParticleSystem = new ParticleSystem();
            entityParticleSystem = new ParticleSystem();
            particleTools = new ParticleTools(frontParticleSystem, entityParticleSystem, Content);
            player = new Player(Content, particleTools, Units.TileToGame(ScreenWidth / 2), Units.TileToGame(ScreenHeight / 2));
            damageTexts.AddDamageable(player);
            bat = new FirstCaveBat(Content, Units.TileToGame(7), Units.TileToGame(ScreenHeight / 2 + 1));
            damageTexts.AddDamageable(bat);
            map = Map.CreateSlopeTestMap(Content);

            pickups.Add(new PowerDoritoPickup(Content, bat.CenterX, bat.CenterY, PowerDoritoPickup.SizeType.Medium));
            pickups.Add(new PowerDoritoPickup(Content, bat.CenterX, bat.CenterY, PowerDoritoPickup.SizeType.Medium));
            pickups.Add(new PowerDoritoPickup(Content, bat.CenterX, bat.CenterY, PowerDoritoPickup.SizeType.Medium));
            base.LoadContent();
        }
Exemplo n.º 14
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);
            }
        }