Ejemplo n.º 1
0
    /// <summary>
    /// Generates weapons for the player's use
    /// </summary>
    /// <param name="ship">Player ship</param>
    private void GeneratePlayerWeapons(RRShip ship)
    {
        SoundEffect WeaponFire = LoadSoundEffect("Shot");
        SoundEffect WeaponFireLarge = LoadSoundEffect("LargeShot");

        // Primary Weapon (Plasma Cannon): all-purpose

        //Upgrade levels. Same for each weapon for now
        double pwSizeMultiplier = ((pwArsenalUpgrades[0] >= 1) ? (2) : (1));
        double pwFireBonusMultiplier = 1 + (2 * ((pwArsenalUpgrades[0] >= 3) ? (1) : (0)));
        double pwDamageBonusMultiplier = 1 + (1.5 * ((pwArsenalUpgrades[0] >= 2) ? (1) : (0)));

        primaryWeapon = new RRWeapon(5, 10, true, PLAYER_WEAPONPOWER, PLAYER_FIRERATE * pwFireBonusMultiplier, new RRProjectileGenerator(14 * pwSizeMultiplier, 14 * pwSizeMultiplier, 0.1, new Color(55, 255, 128, 128), 10 * pwDamageBonusMultiplier));
        primaryWeapon.Position += new Vector(0, 30);
        primaryWeapon.projectileGenerator.projectileShape = Shape.Diamond;
        primaryWeapon.projectileGenerator.defaultCollisionIgnoreGroup = 3;
        primaryWeapon.projectileGenerator.defaultTag = "PP";
        primaryWeapon.projectileGenerator.canRotate = false;
        primaryWeapon.projectileGenerator.shotSound = WeaponFire;
        primaryWeapon.Color = new Color(0, 0, 0, 0);
        primaryWeapon.Angle += Angle.FromDegrees(90);

        // Secondary Weapon (Laser Blaster): laser, pierces smaller enemies

        double swSizeMultiplier = ((pwArsenalUpgrades[1] >= 1) ? (2) : (1));
        double swFireBonusMultiplier = 1 + (2 * ((pwArsenalUpgrades[1] >= 2) ? (1) : (0)));
        double swDamageBonusMultiplier = 1 + (2.2 * ((pwArsenalUpgrades[1] >= 3) ? (1) : (0)));

        secWeapon = new RRWeapon(5, 10, true, PLAYER_WEAPONPOWER / 2, PLAYER_FIRERATE * 10 * swFireBonusMultiplier, new RRProjectileGenerator(80 * swSizeMultiplier, 3 * swSizeMultiplier, 0.01, new Color(233, 111, 111, 128), 0.85 * swDamageBonusMultiplier));
        secWeapon.Position += new Vector(0, 60);
        secWeapon.projectileGenerator.defaultCollisionIgnoreGroup = 3;
        secWeapon.projectileGenerator.ignoresCollisionResponse = true;
        secWeapon.projectileGenerator.defaultTag = "LP";
        secWeapon.projectileGenerator.canRotate = false;
        secWeapon.projectileGenerator.shotSound = WeaponFire;
        secWeapon.Color = new Color(0, 0, 0, 0);
        secWeapon.Angle += Angle.FromDegrees(90);

        // Third Weapon (Minigun): inaccurate but powerful

        double triSizeMultiplier = ((pwArsenalUpgrades[2] >= 1) ? (2) : (1));
        double triFireBonusMultiplier = 1 + (5.2 * ((pwArsenalUpgrades[2] >= 3) ? (1) : (0)));
        double triDamageBonusMultiplier = 1 + (4.2 * ((pwArsenalUpgrades[2] >= 2) ? (1) : (0)));

        triWeapon = new RRWeapon(5, 10, true, PLAYER_WEAPONPOWER, PLAYER_FIRERATE * 5 * triFireBonusMultiplier, new RRProjectileGenerator(9 * triSizeMultiplier, 9 * triSizeMultiplier, 0.1, new Color(222, 222, 11, 128), 2.25 * triDamageBonusMultiplier));
        triWeapon.Position += new Vector(0, 35);
        triWeapon.projectileGenerator.defaultCollisionIgnoreGroup = 3;
        triWeapon.projectileGenerator.defaultTag = "PP";
        triWeapon.projectileGenerator.canRotate = false;
        triWeapon.projectileGenerator.shotSound = WeaponFire;
        triWeapon.Color = new Color(0, 0, 0, 0);
        triWeapon.Angle += Angle.FromDegrees(90);
        triWeapon.setBaseAngle(triWeapon.Angle);
        triWeapon.randomizedAngleSlate = 14 + pwArsenalUpgrades[2].Value*10.9;

        // Bomb: special weapon, deals extreme damage and clears all enemy bullets from the screen for its duration. Access the explosion's parameters from BombExplosion, under the region Colliders.

        double bombSizeMultiplier = ((pwArsenalUpgrades[3] >= 1) ? (2) : (1));
        double bombFireBonusMultiplier = 1 + (1 * ((pwArsenalUpgrades[3] >= 3) ? (1) : (0)));
        double bombDamageBonusMultiplier = 1 + (3 * ((pwArsenalUpgrades[3] >= 2) ? (1) : (0)));

        bomb = new RRWeapon(30, 30, true, PLAYER_WEAPONPOWER * 2, PLAYER_FIRERATE / 10 * bombFireBonusMultiplier, new RRProjectileGenerator(30 * bombSizeMultiplier, 30 * bombSizeMultiplier, 0.2, new Color(111, 111, 111, 128), 50 * bombDamageBonusMultiplier));
        bomb.projectileGenerator.projectileShape = Shape.Circle;
        bomb.projectileGenerator.defaultCollisionIgnoreGroup = 3;
        bomb.projectileGenerator.defaultTag = "BOMB";
        bomb.projectileGenerator.canRotate = false;
        bomb.projectileGenerator.shotSound = WeaponFireLarge;
        bomb.Color = new Color(0, 0, 0, 0);
        bomb.Angle += Angle.FromDegrees(90);
        bomb.countInWeaponArsenal = false;

        this.playerWeaponArsenal = new RRWeaponArsenal(primaryWeapon);
        //rP = primaryWeapon;
        this.playerWeaponArsenal.ProjectileCollision = playerCollisionHandler;
        this.playerWeaponArsenal.addNewWeapon(secWeapon);
        this.playerWeaponArsenal.addNewWeapon(triWeapon);
        this.playerWeaponArsenal.addNewWeapon(bomb);
        ship.Add(playerWeaponArsenal);

        CreateWeaponMeter();
    }
Ejemplo n.º 2
0
    /// <summary>
    /// Creates controls for the player depending on the chosen control method.
    /// </summary>
    /// <param name="player">The player to be moved</param>
    /// <param name="controllerType">The current control type</param>
    /// <param name="primaryWeapon">The player's weapon</param>
    private void CreateControls(PhysicsObject player, ControllerType controllerType, RRWeaponArsenal primaryWeapon)
    {
        ClearControls();
        vibrateEnabled = (controllerType == ControllerType.Xbox);
        switch (controllerType)
        {
            case ControllerType.Keyboard:
                Keyboard.Listen(Key.Up, ButtonState.Down, MovePlayer, null, PLAYER_SPEED_Y, player);
                Keyboard.Listen(Key.Up, ButtonState.Released, MovePlayer, null, Vector.Zero, player);
                Keyboard.Listen(Key.Down, ButtonState.Down, MovePlayer, null, -PLAYER_SPEED_Y, player);
                Keyboard.Listen(Key.Down, ButtonState.Released, MovePlayer, null, Vector.Zero, player);
                Keyboard.Listen(Key.Left, ButtonState.Down, MovePlayer, null, -PLAYER_SPEED_X, player);
                Keyboard.Listen(Key.Left, ButtonState.Released, MovePlayer, null, Vector.Zero, player);
                Keyboard.Listen(Key.Right, ButtonState.Down, MovePlayer, null, PLAYER_SPEED_X, player);
                Keyboard.Listen(Key.Right, ButtonState.Released, MovePlayer, null, Vector.Zero, player);
                Keyboard.Listen(Key.P, ButtonState.Pressed, delegate { PauseMenu(player, controllerType, primaryWeapon); }, null);
                Keyboard.Listen(Key.Z, ButtonState.Down, FireWeapon, null, primaryWeapon);
                Keyboard.Listen(Key.X, ButtonState.Pressed, triggerBomb, null);
                Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, shiftWeapons, null);

                break;
            case ControllerType.Xbox:
                ControllerOne.Listen(Button.DPadUp, ButtonState.Down, MovePlayer, null, PLAYER_SPEED_Y, player);
                ControllerOne.Listen(Button.DPadUp, ButtonState.Released, MovePlayer, null, Vector.Zero, player);
                ControllerOne.Listen(Button.DPadDown, ButtonState.Down, MovePlayer, null, -PLAYER_SPEED_Y, player);
                ControllerOne.Listen(Button.DPadDown, ButtonState.Released, MovePlayer, null, Vector.Zero, player);
                ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, MovePlayer, null, -PLAYER_SPEED_X, player);
                ControllerOne.Listen(Button.DPadLeft, ButtonState.Released, MovePlayer, null, Vector.Zero, player);
                ControllerOne.Listen(Button.DPadRight, ButtonState.Down, MovePlayer, null, PLAYER_SPEED_X, player);
                ControllerOne.Listen(Button.DPadRight, ButtonState.Released, MovePlayer, null, Vector.Zero, player);
                ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, movePlayerAnalog, null, player);
                ControllerOne.Listen(Button.Start, ButtonState.Pressed, delegate { PauseMenu(player, controllerType, primaryWeapon); }, null);
                ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, FireWeapon, null, primaryWeapon);
                ControllerOne.Listen(Button.Y, ButtonState.Pressed, shiftWeapons, null);
                break;
            default:
                break;
        }
    }
Ejemplo n.º 3
0
    /// <summary>
    /// A pause menu that pops up if the pause button is pressed.
    /// </summary>
    /// <param name="controllerType">The type of controls being used.</param>
    /// <param name="player">The player.</param>
    /// <param name="primaryWeapon">The player's weapon.</param>
    public void PauseMenu(PhysicsObject player, ControllerType controllerType, RRWeaponArsenal primaryWeapon)
    {
        ClearControls();

        showArsenalLabels();

        MediaPlayer.Pause();
        Pause();
        ES.isPaused = true;
        switch (controllerType)
        {
            case ControllerType.Keyboard:
                Keyboard.Listen(Key.Escape, ButtonState.Pressed, delegate { Pause(); ResetGame(); }, null);
                Keyboard.Listen(Key.P, ButtonState.Pressed, delegate { Unpause(player, controllerType, primaryWeapon); }, null);
                Keyboard.Listen(Key.Q, ButtonState.Pressed, triggerUpdateKeys, null, 0);
                Keyboard.Listen(Key.W, ButtonState.Pressed, triggerUpdateKeys, null, 1);
                Keyboard.Listen(Key.E, ButtonState.Pressed, triggerUpdateKeys, null, 2);
                Keyboard.Listen(Key.R, ButtonState.Pressed, triggerUpdateKeys, null, 3);
                break;

            case ControllerType.Xbox:
                ControllerOne.Listen(Button.Back, ButtonState.Pressed, delegate { Pause(); ResetGame(); }, null);
                ControllerOne.Listen(Button.Start, ButtonState.Pressed, delegate { Unpause(player, controllerType, primaryWeapon); }, null);
                break;
        }
    }
Ejemplo n.º 4
0
    /// <summary>
    /// Unpauses the game and resumes music.
    /// </summary>
    /// <param name="controllerType">The type of controls being used.</param>
    /// <param name="player">The player.</param>
    /// <param name="primaryWeapon">The player's weapon.</param>
    public void Unpause(PhysicsObject player, ControllerType controllerType, RRWeaponArsenal primaryWeapon)
    {
        ClearControls();
        MediaPlayer.Resume();
        Pause();

        hideArsenalLabels();

        CreateControls(player, controllerType, primaryWeapon);

        // Informs RREnemySpawner that the game is paused
        ES.isPaused = false;
    }
Ejemplo n.º 5
0
 /// <summary>
 /// Fires the primary weapon of the player.
 /// </summary>
 /// <param name="weapon">The weapon to be fired</param>
 public void FireWeapon(RRWeaponArsenal weapon)
 {
     //TODO - Clean up FireWeapon, and the superflous "weapon" clause.
     PhysicsObject projectile = playerWeaponArsenal.Shoot();
 }