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)); }
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)); }
/// <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); } }
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))); } }
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)); }
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; } } }
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(); }
/// <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; } }
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); } }