/// <summary> /// Returns a new projectile for the entity /// </summary> /// <param name="lastFired">The last projectile fire time</param> /// <returns>Returns a projectile with a new memory address for the entity</returns> public Projectile createProjectile(double lastFired) { this.lastFired = lastFired; Projectile p = new Projectile(projectile.getOwner(), projectile.getTexture(), projectile.getVelocity(), projectile.getCooldown(), projectile.getRotationSpeed(), projectile.getSound()); p.setDamage(projectile.getDamage()); return(p); }
/// <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--; } } }