public void ActivatableTest() { //by default part is not activated IActivatable activatable = new Shield(Connector.None, Connector.None, Connector.None, Connector.None); Assert.False(activatable.Activated); activatable.Activate(); Assert.True(activatable.Activated); activatable.Deactivate(); Assert.False(activatable.Activated); //since IActivatable is only an interface, test for each implementing type activatable = new LaserDouble(Connector.None, Connector.None, Connector.None, Connector.None); Assert.False(activatable.Activated); activatable.Activate(); Assert.True(activatable.Activated); activatable.Deactivate(); Assert.False(activatable.Activated); activatable = new EngineDouble(Connector.None, Connector.None, Connector.None, Connector.None); Assert.False(activatable.Activated); activatable.Activate(); Assert.True(activatable.Activated); activatable.Deactivate(); Assert.False(activatable.Activated); }
public void ActivatablesTest() { Ship ship = new Ship(ShipLayout.Small, PlayerColor.Blue); Battery battery = new Battery(Connector.Universal, Connector.Universal, Connector.Universal, Connector.Universal, 5); Shield shield = new Shield(Connector.Universal, Connector.Universal, Connector.Universal, Connector.Universal); EngineDouble engine = new EngineDouble(Connector.Universal, Connector.Universal, Connector.None, Connector.Universal); LaserDouble laser = new LaserDouble(Connector.None, Connector.Universal, Connector.Universal, Connector.Universal); //ship has no activatable parts to begin with Assert.False(ship.HighlightActivatables()); //once again cockpit is at 5,5 ship.AddPart(battery, 5, 4); ship.AddPart(shield, 5, 6); ship.AddPart(engine, 6, 5); ship.AddPart(laser, 4, 5); //ship has activatable parts now Assert.True(ship.HighlightActivatables()); //none are activated to begin with, battery has maximum charges Assert.Equal(5, battery.Charges); Assert.False(shield.Activated); Assert.False(engine.Activated); Assert.False(laser.Activated); //in this state the laser and the engine have 0 fire and enginepower Assert.Equal(0, laser.Firepower); Assert.Equal(0, engine.Enginepower); //activate the shield - one charge should be removed, and shield should be activate ship.ActivatePartAt(5, 6); Assert.Equal(4, battery.Charges); Assert.True(shield.Activated); //activate the engine - apart from the above, the enginepower should be 2 ship.ActivatePartAt(6, 5); Assert.Equal(3, battery.Charges); Assert.True(engine.Activated); Assert.Equal(2, engine.Enginepower); //activate the laser - apart from the above, the enginepower should be 4 ship.ActivatePartAt(4, 5); Assert.Equal(2, battery.Charges); Assert.True(laser.Activated); Assert.Equal(4, laser.Firepower); //deactivate all ship.ResetActivatables(); Assert.False(shield.Activated); Assert.False(engine.Activated); Assert.False(laser.Activated); Assert.Equal(0, engine.Enginepower); Assert.Equal(0, laser.Firepower); }
void OnTriggerEnter2D(Collider2D collider) { Projectile laser = collider.gameObject.GetComponent <Projectile>(); projectile = Projectile.FindObjectOfType <Projectile>(); MissileProjectile missile = collider.gameObject.GetComponent <MissileProjectile>(); missile = MissileProjectile.FindObjectOfType <MissileProjectile>(); LaserDouble laserx2 = collider.gameObject.GetComponent <LaserDouble>(); doublelaser = LaserDouble.FindObjectOfType <LaserDouble>(); if (laser) { Debug.Log("hit by a laser"); Destroy(collider.gameObject); scoreKeeper.Score(scoreValue); EnemyHealth = EnemyHealth - projectile.basicLaserDamage; Debug.Log(EnemyHealth); if (EnemyHealth <= 0) { Die(); } } if (missile) { Debug.Log("Hit by a missile"); Destroy(collider.gameObject); scoreKeeper.Score(MissileScoreValue); EnemyHealth = EnemyHealth - missile.missileDamage; hitbymissile.Play(); Debug.Log(EnemyHealth); if (EnemyHealth <= 0) { Die(); } } if (laserx2) { Debug.Log("Hit by double laser"); Destroy(collider.gameObject); scoreKeeper.Score(LaserScoreValue); EnemyHealth = EnemyHealth - doublelaser.DoubleLaserDamage; Debug.Log(EnemyHealth); if (EnemyHealth <= 0) { Die(); } } }
public void LaserTest() { //lasers can't have a connector facing upwards Laser invalidLaser; Assert.Throws <ArgumentException>(() => invalidLaser = new Laser(Connector.Universal, Connector.None, Connector.None, Connector.None)); Laser regularLaser = new Laser(Connector.None, Connector.None, Connector.None, Connector.None); //while facing top, lasers have a firepower of 2 Assert.Equal(Direction.Top, regularLaser.Rotation); Assert.Equal(2, regularLaser.Firepower); //while facing any other direction, regular laser has a firepower of 1 regularLaser.Rotate(1); Assert.Equal(1, regularLaser.Firepower); regularLaser.Rotate(1); Assert.Equal(1, regularLaser.Firepower); regularLaser.Rotate(1); Assert.Equal(1, regularLaser.Firepower); //inactive double laser has a firepower of 0 regardless of rotation LaserDouble doubleLaser = new LaserDouble(Connector.None, Connector.None, Connector.None, Connector.None); for (int i = 0; i < 4; ++i) { doubleLaser.Rotate(1); Assert.Equal(0, doubleLaser.Firepower); } //while activated, double laser has 4 firepower if facing top, 2 if facing any other direction doubleLaser.Activate(); Assert.Equal(Direction.Top, doubleLaser.Rotation); Assert.Equal(4, doubleLaser.Firepower); doubleLaser.Rotate(1); Assert.Equal(2, doubleLaser.Firepower); doubleLaser.Rotate(1); Assert.Equal(2, doubleLaser.Firepower); doubleLaser.Rotate(1); Assert.Equal(2, doubleLaser.Firepower); }
public void ProjectileTest() { Ship ship = new Ship(ShipLayout.Small, PlayerColor.Blue); Part battery = new Battery(Connector.Universal, Connector.Universal, Connector.Universal, Connector.Universal, 100); Part laser = new Laser(Connector.None, Connector.Universal, Connector.Universal, Connector.Universal); Shield shield = new Shield(Connector.None, Connector.Universal, Connector.None, Connector.None); ship.AddPart(battery, 5, 6); ship.AddPart(laser, 4, 5); ship.AddPart(shield, 5, 4); //the newly added parts are in the parts collection Assert.Contains(battery, ship.Parts); Assert.Contains(laser, ship.Parts); Assert.Contains(shield, ship.Parts); Assert.Equal(0, ship.Penalty); //launch a small meteor at the ship - this should only cause damage if it hits an open connector - and even then can be blocked by shields //this hits the front of the laser, but there is no connector there ship.ApplyProjectile(Projectile.MeteorSmall, Direction.Top, 5); Assert.Contains(laser, ship.Parts); Assert.Equal(0, ship.Penalty); //this hits the front of the shield - yet again, there's no connector there ship.ApplyProjectile(Projectile.MeteorSmall, Direction.Top, 4); Assert.Contains(shield, ship.Parts); Assert.Equal(0, ship.Penalty); //try to hit into an open connector on the battery, but with shields activated(currently the shield is facing top/right) ship.ActivatePartAt(5, 4); ship.ApplyProjectile(Projectile.MeteorSmall, Direction.Top, 6); Assert.True(shield.Activated); Assert.Contains(battery, ship.Parts); Assert.Equal(0, ship.Penalty); //same with shields not active - the battery gets removed ship.ResetActivatables(); ship.ApplyProjectile(Projectile.MeteorSmall, Direction.Top, 6); Assert.False(shield.Activated); Assert.DoesNotContain(battery, ship.Parts); Assert.Equal(1, ship.Penalty); //launch a large meteor at the ship - this should cause damage unless it's shot by an active laser facing it in the destined line ship.AddPart(battery, 5, 6); Part doubleLaser = new LaserDouble(Connector.None, Connector.Universal, Connector.Universal, Connector.Universal); //add an activatable laser ship.AddPart(doubleLaser, 4, 6); //flying into a regular laser - laser remains instact ship.ApplyProjectile(Projectile.MeteorLarge, Direction.Top, 5); Assert.Contains(laser, ship.Parts); Assert.Equal(1, ship.Penalty); //flying into the activated double laser - laser remains intact ship.ActivatePartAt(4, 6); ship.ApplyProjectile(Projectile.MeteorLarge, Direction.Top, 6); Assert.Contains(doubleLaser, ship.Parts); Assert.Equal(1, ship.Penalty); //Flying into the deactivated double laser - laser gets removed ship.ResetActivatables(); ship.ApplyProjectile(Projectile.MeteorLarge, Direction.Top, 6); Assert.DoesNotContain(doubleLaser, ship.Parts); Assert.Equal(2, ship.Penalty); //flying into the deactivated laser with shields on - does not block the projectile ship.AddPart(doubleLaser, 4, 6); ship.ActivatePartAt(5, 4); ship.ApplyProjectile(Projectile.MeteorLarge, Direction.Top, 6); Assert.DoesNotContain(doubleLaser, ship.Parts); Assert.Equal(3, ship.Penalty); //launch a small shot at the ship - this causes damage unless shielded //shield is still active ship.ApplyProjectile(Projectile.ShotSmall, Direction.Top, 5); Assert.True(shield.Activated); Assert.Contains(laser, ship.Parts); Assert.Equal(3, ship.Penalty); //repeat the small shot with shields inactive, the laser doesn't stop it either ship.ResetActivatables(); ship.ApplyProjectile(Projectile.ShotSmall, Direction.Top, 5); Assert.False(shield.Activated); Assert.DoesNotContain(laser, ship.Parts); Assert.Equal(4, ship.Penalty); //launch a large shot at the ship - this causes damage regardless of anything //fired into the laser, while shields are active too ship.ActivatePartAt(5, 4); ship.AddPart(laser, 4, 5); Assert.Contains(laser, ship.Parts); ship.ApplyProjectile(Projectile.ShotLarge, Direction.Top, 5); Assert.True(shield.Activated); Assert.DoesNotContain(laser, ship.Parts); Assert.Equal(5, ship.Penalty); //fire at the shield to deactivate it ship.ApplyProjectile(Projectile.ShotLarge, Direction.Top, 4); Assert.DoesNotContain(shield, ship.Parts); //note - 5 is the upper limit for penalty for the small shiplayout Assert.Equal(5, ship.Penalty); //fire a small shot at the cockpit - shield is removed, so the shot deals damage, and wrecks the ship bool wrecked = false; ship.Wrecked += (sender, e) => { wrecked = true; }; ship.ApplyProjectile(Projectile.ShotSmall, Direction.Top, 5); Assert.Null(ship.GetCockpit()); Assert.True(wrecked); }