//Updating enemies internal void Update(float a_elapsedTime) { m_enemyProjectiles.RemoveAll(x => x.Active == false); foreach (Enemy enemy in m_enemies) { if (!m_player.IsAlive) { enemy.IsAlive = true; } //Fall & jump mechanics //Needs to be updated before Vertical collision if (!enemy.IsOnGround && !enemy.IsJumping) { enemy.Obj.Bounds.Y += Convert.ToInt32(a_elapsedTime * enemy.Speed.X); } if ((enemy.EnemyType == Enemy.Type.Jumper || enemy.EnemyType == Enemy.Type.Shooter) && enemy.IsAlive) { if (enemy.IsJumping) { enemy.IsOnGround = false; enemy.Obj.Bounds.Y -= (int)enemy.Speed.Y; enemy.SpeedY -= a_elapsedTime / 0.10f; } //Updating jump mechanics within the enemy object enemy.Update(a_elapsedTime); } //Collision handeling; Vertical m_level.CheckVerticalCollision(enemy); if (enemy.IsAlive) { enemy.Visibility = 1; //Updating logic for enemy type; Shooter if (enemy.EnemyType == Enemy.Type.Shooter) { #region Shooter bool leftDirection = m_player.Rectangle.Center.X < enemy.Rectangle.Center.X; if (enemy.ProjectileCoolDown <= 0) { int shotSpawn; if (leftDirection) { shotSpawn = enemy.Rectangle.Left; } else { shotSpawn = enemy.Rectangle.Right; } m_enemyProjectiles.Add(new Projectile(shotSpawn, enemy.Rectangle.Center.Y - 5, leftDirection)); enemy.ProjectileCoolDown = 2; } else { enemy.ProjectileCoolDown -= a_elapsedTime; } if ((enemy.ProjectileCoolDown < 0.5 || enemy.ProjectileCoolDown > 1.5)) { if (leftDirection) { enemy.UnitState = State.ID.JUMPING_LEFT; } else { enemy.UnitState = State.ID.JUMPING_RIGHT; } } else { if (leftDirection) { enemy.UnitState = State.ID.FACING_LEFT; } else { enemy.UnitState = State.ID.FACING_RIGHT; } } #endregion } //Updating logic for enemy type; Crawler and Jumper #region Crawler & Jumper horizontal movments if ((enemy.UnitState != State.ID.MOVING_RIGHT && enemy.UnitState != State.ID.MOVING_LEFT) && enemy.EnemyType != Enemy.Type.Shooter) { enemy.UnitState = State.ID.MOVING_RIGHT; } if (enemy.UnitState == State.ID.MOVING_RIGHT) { enemy.Obj.Bounds.X += Convert.ToInt32(a_elapsedTime * enemy.Speed.X); } else if (enemy.UnitState == State.ID.MOVING_LEFT) { enemy.Obj.Bounds.X -= Convert.ToInt32(a_elapsedTime * enemy.Speed.X); } #endregion if (m_level.DidReachTurningPoint(enemy)) { if (enemy.UnitState == State.ID.MOVING_RIGHT) { enemy.UnitState = State.ID.MOVING_LEFT; } else { enemy.UnitState = State.ID.MOVING_RIGHT; } } CheckPlayerCollision(enemy); } else { enemy.Visibility = enemy.Visibility - 0.01f; } } //Updating all projectiles generated from enemy type; Shooter foreach (Projectile projectile in m_enemyProjectiles) { if (projectile.DirectionLeft) { projectile.X -= Convert.ToInt32(a_elapsedTime * projectile.Speed); } else { projectile.X += Convert.ToInt32(a_elapsedTime * projectile.Speed); } if (projectile.Rec.Intersects(m_player.Rectangle)) { m_player.LostLife(); } } }
//Updating player logic internal void Update(float a_elapsedTime) { if (!m_player.IsAlive) { m_level.ResetTriggersAndItems(); } //Updating internal player mechanics m_player.Update(a_elapsedTime); //Collision modification MovingPlatforms //Needs to be updated before Horizontinal & Vertical if (!m_level.TriggerOneIsActive) { m_level.CheckMovingPlatformCollision(m_player.Obj); } //Collision handeling Horizontinal m_level.CheckHorizontalCollision(m_player); //Fall & jump mechanics //Needs to be updated before Vertical collision #region Jumping/falling if (!m_player.IsOnGround && !m_player.IsJumping && !m_player.IsClimbing && !m_player.PowerUpOneIsActive) { m_player.IsFalling = true; m_player.Obj.Bounds.Y += Convert.ToInt32(a_elapsedTime * m_player.Speed.X); } else if (m_player.IsJumping) { if (m_player.IsClimbing || m_player.PowerUpOneIsActive) { m_player.IsJumping = false; } else { m_player.Obj.Bounds.Y -= (int)m_player.Speed.Y; m_player.SpeedY -= a_elapsedTime / 0.10f; } } else { m_player.IsFalling = false; } #endregion //Ladder climbing mechanics #region Climbing if (m_level.UnitIsOnLadder(m_player)) { m_player.CanClimb = true; } else { m_player.CanClimb = false; m_player.IsClimbing = false; } if (m_player.IsClimbing) { m_player.IsOnGround = false; } #endregion //Trampoline mechanics if (m_level.UnitTriggeredTrampoline(m_player)) { m_player.SpeedY = 10; m_player.IsJumping = true; } //Collision handeling; Vertical and Obstacles m_level.CheckVerticalCollision(m_player); m_level.CheckObstaclesCollision(m_player); //Checks for interaction with collectable items m_level.CheckTriggersAndItems(m_player); }