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); } }
/// <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(); }
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); }
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); } }
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); }
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(); }