Beispiel #1
0
    public void collisionHandler(RRShip collidee, PhysicsObject collider)
    {
        lock (thisLock)
        {
            bool modifiedHP = false;

                if ((collider.Tag.ToString() == "B") && ((Math.Abs(this.Velocity.X) + Math.Abs(this.Velocity.Y)) > 600))
                {
                    Health -= 1;
                    modifiedHP = true;
                }
                else if (collider.Tag.ToString().EndsWith("E"))
                {
                    Health -= ((Health > 1) ? 2 : 1);
                    modifiedHP = true;
                }

            collisionFunc(collidee, collider);

            if (modifiedHP) updateMeters(this);
        }
    }
Beispiel #2
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();
    }
Beispiel #3
0
    public void onPlayerDeath(RRShip player)
    {
        if (((ControllerOne.GetType()) == typeof(GamePad)) && vibrateEnabled)
        {
            GamePad gp = ControllerOne as GamePad;
            gp.Vibrate(1, 1, 1, 1, 1);
        }

        Explosion expl = new Explosion(200);
        expl.Position = player.Position;
        Add(expl);

        player.Destroy();

        SCOREMETER.Value -= (int)player.ScoreValue;
        POWERMETER.Reset();
        ClearControls();

        Keyboard.Listen(Key.Z, ButtonState.Pressed, delegate
        {
            for (int i = 0; i < METER_RECTANGLES.Length; i++)
            {
                METER_RECTANGLES[i].Color = Color.Green;
            }
            CreatePlayer(RESPAWN_POSITION, 20, 20, ControllerType.Keyboard);
        }, null);
        ControllerOne.Listen(Button.A, ButtonState.Pressed, delegate
        {
            for (int i = 0; i < METER_RECTANGLES.Length; i++)
            {
                METER_RECTANGLES[i].Color = Color.Green;
            }
            CreatePlayer(RESPAWN_POSITION, 20, 20, ControllerType.Xbox);
        }, null);
    }
Beispiel #4
0
    public void meterHandlerFunc(RRShip player)
    {
        for (int i = 0; i < METER_RECTANGLES.Length; i++)
        {
            METER_RECTANGLES[i].Color = ((i < player.Health) ? Color.Green : Color.Red);
        }

        if (player.Health == 0)
        {
            onPlayerDeath(player);
        }
    }
Beispiel #5
0
    public void CreatePlayer(Vector position, double width, double height, ControllerType controllerType)
    {
        // Replaced by RRShip
        /*RRObject player = new RRObject(width, height);
        player.Tag = "P";
        player.Shape = Shape.Diamond;
        player.Health = PLAYER_HP;
        player.ScoreValue = PLAYER_SVALUE;
        player.Position = position;
        player.CanRotate = false;
        player.Color = Color.Red;
        player.CollisionIgnoreGroup = 2;
        Add(player);
        player.Add(new GameObject(LoadImage("PlayerSprite")));
        player.IgnoresGravity = true;
        AddCollisionHandler<RRObject, PhysicsObject>(player, PlayerCollision);*/

        playerShip = new RRShip(this, width, height, PLAYER_HP, PLAYER_SVALUE, position, collisionHandler, meterHandlerFunc);
        Add(playerShip);
        HEALTHMETER.Value = PLAYER_HP;

        //Let's generate this first..

        GeneratePlayerWeapons(playerShip);

        CreateControls(playerShip, controllerType, playerWeaponArsenal);
    }
Beispiel #6
0
 public void collisionHandler(RRShip collider, PhysicsObject collidee)
 {
     //System.Diagnostics.Debugger.Log(0, "Info", collider.Tag + "on" + collidee.Tag + "\n");
     if ((String)collidee.Tag != "Z") vibrateController();
 }