Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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");
        }