示例#1
0
 /// <summary>
 /// Updates the list of active projectiles, checking for collisions with objects, NPCs, and the player,
 /// while also removing inactive projectiles
 /// </summary>
 public void updateProjectiles()
 {
     for (int i = 0; i < projectiles.Count; i++)
     {
         Projectile projectile = projectiles[i];
         projectile.update(game, projectile.getOwner());
         if (projectile.isActive())
         {
             foreach (Npc n in npcs)
             {
                 if (projectile.getOwner() == n)
                 {
                     if (collisionManager.collides(projectile, player))
                     {
                         projectile.setActive(false);
                         playerManager.damagePlayer(projectile.getDamage());
                         player.getHitsplat().playEffect();
                     }
                     break;
                 }
                 else if (collisionManager.collides(projectile, n))
                 {
                     projectile.setActive(false);
                     n.deriveHealth(-projectile.getDamage());
                     n.setHit(true);
                     n.resetCombatTicks();
                     n.getDisplayBar().update(n.getCurrentHealth(), n.getMaxHealth());
                     n.getHitsplat().setHit("" + projectile.getDamage());
                     n.getHitsplat().playEffect();
                     int exp = 4 * projectile.getDamage();
                     playerManager.incrementExperience(exp);
                     PauseMenu pause = (PauseMenu)getScreen("Pause");
                     pause.setExperience(pause.getExperience() + exp);
                     inputManager.setDropText("+ " + exp + " EXP");
                     break;
                 }
             }
             if (projectile.isActive())
             {
                 foreach (GameObject e in objects)
                 {
                     if (collisionManager.collides(projectile, e))
                     {
                         projectile.setActive(false);
                         break;
                     }
                 }
             }
             if (projectile.isActive())
             {
                 foreach (Wall w in walls)
                 {
                     if (collisionManager.collides(projectile, w))
                     {
                         projectile.setActive(false);
                         break;
                     }
                 }
             }
             if (projectile.isActive())
             {
                 foreach (Door d in doors)
                 {
                     if (collisionManager.collides(projectile, d))
                     {
                         projectile.setActive(false);
                         break;
                     }
                 }
             }
             if (projectile.isActive())
             {
                 foreach (Barrier b in barriers)
                 {
                     if (!b.isOpen() && collisionManager.collides(projectile, b))
                     {
                         projectile.setActive(false);
                         break;
                     }
                 }
             }
         }
         if (!projectile.isActive())
         {
             projectiles.RemoveAt(i);
             i--;
         }
     }
 }