Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
    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();
            }
        }
    }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }