/// <summary> /// Update powerup for given elapsed time /// </summary> public bool Update(GameManager game, float elapsedTime) { if (game == null) { throw new ArgumentNullException("game"); } // add elapsed time for this frame this.elapsedTime += elapsedTime; // if waiting to respawn if (waitTime > 0) { // decrease wait time waitTime = Math.Max(0.0f, waitTime - elapsedTime); // if wait time is finished if (waitTime == 0) { // add powerup spawn animated sprite game.AddAnimSprite(AnimSpriteType.Spawn, transform.Translation, 50, 40, 30, DrawMode.Additive, -1); // play powerup spawn sound game.PlaySound3D("powerup_spawn", transform.Translation); } // return true to keep powerup alive return(true); } // calculate bobbing angles float turn_angle = (this.elapsedTime * GameOptions.PowerupTurnSpeed) % MathHelper.TwoPi; float move_angle = (this.elapsedTime * GameOptions.PowerupMoveSpeed) % MathHelper.TwoPi; // create bobbing matrix bobbing = Matrix.CreateRotationY(turn_angle) * Matrix.CreateTranslation((float)Math.Cos(move_angle) * GameOptions.PowerupMoveDistance * Vector3.Up); // check for any player at the powerup location int playerHit = game.GetPlayerAtPosition(transform.Translation); if (playerHit != -1) { // disable powerup until respawn time waitTime = GameOptions.PowerupRespawnTime; // get player at powerup location PlayerShip p = game.GetPlayer(playerHit); switch (powerupType) { case PowerupType.Energy: p.AddEnergy(0.5f); // add 50% energy break; case PowerupType.Missile: p.AddMissile(3); // add 3 missiles break; } // add powerup spawn animates sprite game.AddAnimSprite(AnimSpriteType.Spawn, transform.Translation, 40, 40, 30, DrawMode.Additive, -1); // play powerup get sound game.PlaySound("powerup_get"); } // return true to keep powerup alive return(true); }
/// <summary> /// Load the game files (level, ships, wepons, etc...) /// </summary> public void LoadFiles(ContentManager content) { String level = levelFile + "/" + levelFile; // load level model levelColor = content.Load<Model>("levels/" + level); // load collision model Model collisionModel = content.Load<Model>( "levels/" + level + "_collision"); levelCollision = new CollisionMesh(collisionModel, GameOptions.CollisionMeshSubdivisions); collisionModel = null; // load spawns and lights levelSpawns = EntityList.Load("content/levels/" + level + "_spawns.xml"); levelLights = LightList.Load("content/levels/" + level + "_lights.xml"); // load particle textures if (particleTextures == null) { int i, j = particleFiles.GetLength(0); particleTextures = new Texture2D[j]; for (i = 0; i < j; i++) particleTextures[i] = content.Load<Texture2D>( "particles/" + particleFiles[i]); } // load animated sprite textures if (animatedSpriteTextures == null) { int i, j = animatedSpriteFiles.GetLength(0); animatedSpriteTextures = new Texture2D[j]; for (i = 0; i < j; i++) animatedSpriteTextures[i] = content.Load<Texture2D>( "explosions/" + animatedSpriteFiles[i]); } // load projectile models if (projectileModels == null) { int i, j = projectileFiles.GetLength(0); projectileModels = new Model[j]; for (i = 0; i < j; i++) projectileModels[i] = content.Load<Model>( "projectiles/" + projectileFiles[i]); } // load powerup models if (powerupModels == null) { int i, j = powerupFiles.GetLength(0); powerupModels = new Model[j]; for (i = 0; i < j; i++) powerupModels[i] = content.Load<Model>( "powerups/" + powerupFiles[i]); } // cerate players for (int i = 0; i < GameOptions.MaxPlayers; i++) if (shipFile[i] != null) { Model ShipModel = content.Load<Model>( "ships/" + shipFile[i]); EntityList ShipEnities = EntityList.Load( "content/ships/" + shipFile[i] + ".xml"); players[i] = new PlayerShip(this, i, ShipModel, ShipEnities, GameOptions.CollisionBoxRadius); } else players[i] = null; // create powerups EntityList powerups = EntityList.Load( "content/levels/" + level + "_powerups.xml"); foreach (Entity entity in powerups.Entities) { switch (entity.name) { case "energy": AddPowerup(PowerupType.Energy, entity.transform); break; case "missile": AddPowerup(PowerupType.Missile, entity.transform); break; } } // load hud textures if (gameMode == GameMode.SinglePlayer) { hudCrosshair = content.Load<Texture2D>( "screens/hud_sp_crosshair"); hudEnergy = content.Load<Texture2D>( "screens/hud_sp_energy"); hudMissile = content.Load<Texture2D>( "screens/hud_sp_missile"); hudScore = content.Load<Texture2D>( "screens/hud_sp_score"); hudBars = content.Load<Texture2D>( "screens/hud_sp_bars"); } else { hudCrosshair = content.Load<Texture2D>( "screens/hud_mp_crosshair"); hudEnergy = content.Load<Texture2D>( "screens/hud_mp_energy"); hudMissile = content.Load<Texture2D>( "screens/hud_mp_missile"); hudScore = content.Load<Texture2D>( "screens/hud_mp_score"); hudBars = content.Load<Texture2D>( "screens/hud_mp_bars"); } // load damage indicator texture damageTexture = content.Load<Texture2D>("screens/damage"); }