2017-09-24 22:23:22 +00:00
module TK.SpaceTac.Specs {
2017-10-26 21:47:13 +00:00
testing ( "Ship" , test = > {
test . case ( "creates a full name" , check = > {
2017-07-31 18:17:43 +00:00
let ship = new Ship ( ) ;
2017-12-12 22:17:25 +00:00
check . equals ( ship . getName ( false ) , "Ship" ) ;
check . equals ( ship . getName ( true ) , "Level 1 Ship" ) ;
2017-07-31 18:17:43 +00:00
2017-12-12 22:17:25 +00:00
ship . model = new ShipModel ( "test" , "Hauler" ) ;
check . equals ( ship . getName ( false ) , "Hauler" ) ;
check . equals ( ship . getName ( true ) , "Level 1 Hauler" ) ;
2017-07-31 18:17:43 +00:00
2017-12-12 22:17:25 +00:00
ship . name = "Titan-W12" ;
check . equals ( ship . getName ( false ) , "Titan-W12" ) ;
check . equals ( ship . getName ( true ) , "Level 1 Titan-W12" ) ;
2017-07-31 18:17:43 +00:00
2017-12-12 22:17:25 +00:00
ship . level . forceLevel ( 3 ) ;
check . equals ( ship . getName ( false ) , "Titan-W12" ) ;
check . equals ( ship . getName ( true ) , "Level 3 Titan-W12" ) ;
2017-07-31 18:17:43 +00:00
} ) ;
2017-11-14 00:07:06 +00:00
test . case ( "moves in the arena" , check = > {
2017-08-17 17:51:22 +00:00
let ship = new Ship ( null , "Test" ) ;
let engine = TestTools . addEngine ( ship , 50 ) ;
2014-12-31 00:00:00 +00:00
2017-11-14 00:07:06 +00:00
check . equals ( ship . arena_x , 0 ) ;
check . equals ( ship . arena_y , 0 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . arena_angle , 0 ) ;
2015-01-26 00:00:00 +00:00
2017-11-14 00:07:06 +00:00
ship . setArenaFacingAngle ( 1.2 ) ;
ship . setArenaPosition ( 12 , 50 ) ;
2015-01-26 00:00:00 +00:00
2017-11-14 00:07:06 +00:00
check . equals ( ship . arena_x , 12 ) ;
check . equals ( ship . arena_y , 50 ) ;
check . nears ( ship . arena_angle , 1.2 ) ;
2017-05-16 23:12:05 +00:00
} ) ;
2017-10-26 21:47:13 +00:00
test . case ( "lists available actions from attached equipment" , check = > {
2015-01-16 00:00:00 +00:00
var ship = new Ship ( null , "Test" ) ;
var actions : BaseAction [ ] ;
var slot : Slot ;
var equipment : Equipment ;
actions = ship . getAvailableActions ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( actions . length , 1 ) ;
check . equals ( actions [ 0 ] . code , "endturn" ) ;
2015-01-16 00:00:00 +00:00
slot = ship . addSlot ( SlotType . Engine ) ;
2017-09-17 23:12:51 +00:00
equipment = new Equipment ( slot . type ) ;
2015-01-28 00:00:00 +00:00
equipment . action = new MoveAction ( equipment ) ;
2015-01-16 00:00:00 +00:00
slot . attach ( equipment ) ;
2017-03-09 18:43:24 +00:00
slot = ship . addSlot ( SlotType . Weapon ) ;
2017-09-17 23:12:51 +00:00
equipment = new Equipment ( slot . type ) ;
slot . attach ( equipment ) ;
slot = ship . addSlot ( SlotType . Power ) ;
equipment = new Equipment ( slot . type ) ;
2017-10-03 16:11:30 +00:00
equipment . action = new TriggerAction ( equipment ) ;
2017-03-09 18:43:24 +00:00
slot . attach ( equipment ) ;
2015-01-16 00:00:00 +00:00
actions = ship . getAvailableActions ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( actions . length , 3 ) ;
check . equals ( actions [ 0 ] . code , "move" ) ;
check . equals ( actions [ 1 ] . code , "fire-equipment" ) ;
check . equals ( actions [ 2 ] . code , "endturn" ) ;
2015-01-16 00:00:00 +00:00
} ) ;
2015-01-22 00:00:00 +00:00
2017-10-26 21:47:13 +00:00
test . case ( "applies permanent effects of equipments on attributes" , check = > {
2015-01-22 00:00:00 +00:00
var ship = new Ship ( null , "Test" ) ;
var slot : Slot ;
var equipment : Equipment ;
slot = ship . addSlot ( SlotType . Power ) ;
equipment = new Equipment ( ) ;
2017-04-18 19:51:23 +00:00
equipment . slot_type = slot . type ;
equipment . effects . push ( new AttributeEffect ( "power_capacity" , 4 ) ) ;
2015-01-22 00:00:00 +00:00
slot . attach ( equipment ) ;
slot = ship . addSlot ( SlotType . Power ) ;
equipment = new Equipment ( ) ;
2017-04-18 19:51:23 +00:00
equipment . slot_type = slot . type ;
equipment . effects . push ( new AttributeEffect ( "power_capacity" , 5 ) ) ;
2015-01-22 00:00:00 +00:00
slot . attach ( equipment ) ;
ship . updateAttributes ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . attributes . power_capacity . get ( ) , 9 ) ;
2015-01-22 00:00:00 +00:00
} ) ;
2015-01-28 00:00:00 +00:00
2017-10-26 21:47:13 +00:00
test . case ( "repairs hull and recharges shield" , check = > {
2015-01-28 00:00:00 +00:00
var ship = new Ship ( null , "Test" ) ;
2017-11-14 00:07:06 +00:00
TestTools . setAttribute ( ship , "hull_capacity" , 120 ) ;
TestTools . setAttribute ( ship , "shield_capacity" , 150 ) ;
2015-01-28 00:00:00 +00:00
2017-11-14 00:07:06 +00:00
check . equals ( ship . getValue ( "hull" ) , 0 ) ;
check . equals ( ship . getValue ( "shield" ) , 0 ) ;
2015-01-28 00:00:00 +00:00
ship . restoreHealth ( ) ;
2017-11-14 00:07:06 +00:00
check . equals ( ship . getValue ( "hull" ) , 120 ) ;
check . equals ( ship . getValue ( "shield" ) , 150 ) ;
2015-02-06 00:00:00 +00:00
} ) ;
2017-10-26 21:47:13 +00:00
test . case ( "checks if a ship is able to play" , check = > {
2017-10-25 22:45:53 +00:00
let battle = new Battle ( ) ;
let ship = battle . fleets [ 0 ] . addShip ( ) ;
2017-11-14 00:07:06 +00:00
ship . setValue ( "hull" , 10 ) ;
2015-02-06 00:00:00 +00:00
2017-10-26 21:47:13 +00:00
check . equals ( ship . isAbleToPlay ( ) , false ) ;
check . equals ( ship . isAbleToPlay ( false ) , true ) ;
2015-02-06 00:00:00 +00:00
2017-11-14 00:07:06 +00:00
ship . setValue ( "power" , 5 ) ;
2015-02-06 00:00:00 +00:00
2017-10-26 21:47:13 +00:00
check . equals ( ship . isAbleToPlay ( ) , true ) ;
check . equals ( ship . isAbleToPlay ( false ) , true ) ;
2015-02-06 00:00:00 +00:00
2017-11-14 00:07:06 +00:00
ship . setDead ( ) ;
2015-02-06 00:00:00 +00:00
2017-10-26 21:47:13 +00:00
check . equals ( ship . isAbleToPlay ( ) , false ) ;
check . equals ( ship . isAbleToPlay ( false ) , false ) ;
2015-02-06 00:00:00 +00:00
} ) ;
2015-02-13 00:00:00 +00:00
2017-10-26 21:47:13 +00:00
test . case ( "counts attached equipment" , check = > {
2015-02-13 00:00:00 +00:00
var ship = new Ship ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . getEquipmentCount ( ) , 0 ) ;
2015-02-13 00:00:00 +00:00
2017-03-05 14:12:08 +00:00
ship . addSlot ( SlotType . Hull ) . attach ( new Equipment ( SlotType . Hull ) ) ;
2015-02-13 00:00:00 +00:00
ship . addSlot ( SlotType . Shield ) ;
ship . addSlot ( SlotType . Weapon ) . attach ( new Equipment ( SlotType . Weapon ) ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . getEquipmentCount ( ) , 2 ) ;
2015-02-13 00:00:00 +00:00
} ) ;
2017-10-26 21:47:13 +00:00
test . case ( "can pick a random attached equipment" , check = > {
2015-02-13 00:00:00 +00:00
var ship = new Ship ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . getRandomEquipment ( ) , null ) ;
2015-02-13 00:00:00 +00:00
2017-03-05 14:12:08 +00:00
ship . addSlot ( SlotType . Hull ) . attach ( new Equipment ( SlotType . Hull ) ) ;
2015-02-13 00:00:00 +00:00
ship . addSlot ( SlotType . Shield ) ;
ship . addSlot ( SlotType . Weapon ) . attach ( new Equipment ( SlotType . Weapon ) ) ;
2017-02-26 17:44:15 +00:00
var random = new SkewedRandomGenerator ( [ 0.2 ] ) ;
2015-02-13 00:00:00 +00:00
var picked = ship . getRandomEquipment ( random ) ;
2017-10-26 21:47:13 +00:00
check . notequals ( picked , null ) ;
check . same ( picked , ship . slots [ 0 ] . attached ) ;
2015-02-13 00:00:00 +00:00
2017-02-26 17:44:15 +00:00
random = new SkewedRandomGenerator ( [ 0.999999 ] ) ;
2015-02-13 00:00:00 +00:00
picked = ship . getRandomEquipment ( random ) ;
2017-10-26 21:47:13 +00:00
check . notequals ( picked , null ) ;
check . same ( picked , ship . slots [ 2 ] . attached ) ;
2015-02-13 00:00:00 +00:00
} ) ;
2017-01-12 00:36:34 +00:00
2017-10-26 21:47:13 +00:00
test . case ( "checks if a ship is inside a given circle" , check = > {
2017-02-06 21:46:55 +00:00
let ship = new Ship ( ) ;
ship . arena_x = 5 ;
ship . arena_y = 8 ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . isInCircle ( 5 , 8 , 0 ) , true ) ;
check . equals ( ship . isInCircle ( 5 , 8 , 1 ) , true ) ;
check . equals ( ship . isInCircle ( 5 , 7 , 1 ) , true ) ;
check . equals ( ship . isInCircle ( 6 , 9 , 1.7 ) , true ) ;
check . equals ( ship . isInCircle ( 5 , 8.1 , 0 ) , false ) ;
check . equals ( ship . isInCircle ( 5 , 7 , 0.9 ) , false ) ;
check . equals ( ship . isInCircle ( 12 , - 4 , 5 ) , false ) ;
2017-02-06 21:46:55 +00:00
} ) ;
2017-02-08 00:47:18 +00:00
2017-10-26 21:47:13 +00:00
test . case ( "stores items in cargo space" , check = > {
2017-03-05 23:29:02 +00:00
let ship = new Ship ( ) ;
let equipment1 = new Equipment ( ) ;
let equipment2 = new Equipment ( ) ;
let result = ship . addCargo ( equipment1 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( result , false ) ;
check . equals ( ship . cargo , [ ] ) ;
check . equals ( ship . getFreeCargoSpace ( ) , 0 ) ;
2017-03-05 23:29:02 +00:00
ship . setCargoSpace ( 1 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . getFreeCargoSpace ( ) , 1 ) ;
2017-03-05 23:29:02 +00:00
result = ship . addCargo ( equipment1 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( result , true ) ;
check . equals ( ship . cargo , [ equipment1 ] ) ;
check . equals ( ship . getFreeCargoSpace ( ) , 0 ) ;
2017-03-05 23:29:02 +00:00
result = ship . addCargo ( equipment1 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( result , false ) ;
check . equals ( ship . cargo , [ equipment1 ] ) ;
2017-03-05 23:29:02 +00:00
result = ship . addCargo ( equipment2 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( result , false ) ;
check . equals ( ship . cargo , [ equipment1 ] ) ;
2017-03-05 23:29:02 +00:00
ship . setCargoSpace ( 2 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . getFreeCargoSpace ( ) , 1 ) ;
2017-03-05 23:29:02 +00:00
result = ship . addCargo ( equipment2 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( result , true ) ;
check . equals ( ship . cargo , [ equipment1 , equipment2 ] ) ;
check . equals ( ship . getFreeCargoSpace ( ) , 0 ) ;
2017-03-05 23:29:02 +00:00
ship . setCargoSpace ( 1 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . cargo , [ equipment1 ] ) ;
check . equals ( ship . getFreeCargoSpace ( ) , 0 ) ;
2017-03-05 23:29:02 +00:00
ship . setCargoSpace ( 2 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . cargo , [ equipment1 ] ) ;
check . equals ( ship . getFreeCargoSpace ( ) , 1 ) ;
2017-03-05 23:29:02 +00:00
} ) ;
2017-10-26 21:47:13 +00:00
test . case ( "equips items from cargo" , check = > {
2017-03-05 23:29:02 +00:00
let ship = new Ship ( ) ;
let equipment = new Equipment ( SlotType . Weapon ) ;
let slot = ship . addSlot ( SlotType . Weapon ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . listEquipment ( ) , [ ] ) ;
2017-03-05 23:29:02 +00:00
let result = ship . equip ( equipment ) ;
2017-10-26 21:47:13 +00:00
check . equals ( result , false ) ;
check . equals ( ship . listEquipment ( ) , [ ] ) ;
2017-03-05 23:29:02 +00:00
ship . setCargoSpace ( 1 ) ;
ship . addCargo ( equipment ) ;
result = ship . equip ( equipment ) ;
2017-10-26 21:47:13 +00:00
check . equals ( result , true ) ;
check . equals ( ship . listEquipment ( SlotType . Weapon ) , [ equipment ] ) ;
check . equals ( equipment . attached_to , slot ) ;
2017-03-05 23:29:02 +00:00
} ) ;
2017-10-26 21:47:13 +00:00
test . case ( "removes equipped items" , check = > {
2017-03-05 23:29:02 +00:00
let ship = new Ship ( ) ;
let equipment = new Equipment ( SlotType . Weapon ) ;
let slot = ship . addSlot ( SlotType . Weapon ) ;
slot . attach ( equipment ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . listEquipment ( ) , [ equipment ] ) ;
check . same ( slot . attached , equipment ) ;
check . same ( equipment . attached_to , slot ) ;
2017-03-05 23:29:02 +00:00
let result = ship . unequip ( equipment ) ;
2017-10-26 21:47:13 +00:00
check . equals ( result , false ) ;
check . equals ( ship . listEquipment ( ) , [ equipment ] ) ;
check . equals ( ship . cargo , [ ] ) ;
2017-03-05 23:29:02 +00:00
ship . setCargoSpace ( 10 ) ;
result = ship . unequip ( equipment ) ;
2017-10-26 21:47:13 +00:00
check . equals ( result , true ) ;
check . equals ( ship . listEquipment ( ) , [ ] ) ;
check . equals ( ship . cargo , [ equipment ] ) ;
check . equals ( slot . attached , null ) ;
check . equals ( equipment . attached_to , null ) ;
2017-03-05 23:29:02 +00:00
result = ship . unequip ( equipment ) ;
2017-10-26 21:47:13 +00:00
check . equals ( result , false ) ;
check . equals ( ship . listEquipment ( ) , [ ] ) ;
check . equals ( ship . cargo , [ equipment ] ) ;
2017-03-05 23:29:02 +00:00
} ) ;
2017-03-17 00:07:00 +00:00
2017-10-26 21:47:13 +00:00
test . case ( "checks equipment requirements" , check = > {
2017-04-25 18:24:43 +00:00
let ship = new Ship ( ) ;
let equipment = new Equipment ( SlotType . Hull ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . canEquip ( equipment ) , null ) ;
2017-04-25 18:24:43 +00:00
ship . addSlot ( SlotType . Engine ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . canEquip ( equipment ) , null ) ;
2017-04-25 18:24:43 +00:00
let slot = ship . addSlot ( SlotType . Hull ) ;
2017-10-26 21:47:13 +00:00
check . same ( ship . canEquip ( equipment ) , slot ) ;
2017-04-25 18:24:43 +00:00
2017-06-11 20:44:12 +00:00
equipment . requirements [ "skill_photons" ] = 2 ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . canEquip ( equipment ) , null ) ;
2017-04-25 18:24:43 +00:00
2017-06-11 20:44:12 +00:00
ship . upgradeSkill ( "skill_photons" ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . canEquip ( equipment ) , null ) ;
2017-04-25 18:24:43 +00:00
2017-06-11 20:44:12 +00:00
ship . upgradeSkill ( "skill_photons" ) ;
2017-10-26 21:47:13 +00:00
check . same ( ship . canEquip ( equipment ) , slot ) ;
2017-04-25 18:24:43 +00:00
slot . attach ( new Equipment ( SlotType . Hull ) ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . canEquip ( equipment ) , null ) ;
2017-04-25 18:24:43 +00:00
} ) ;
2017-10-26 21:47:13 +00:00
test . case ( "allow skills upgrading from current level" , check = > {
2017-03-17 00:07:00 +00:00
let ship = new Ship ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . level . get ( ) , 1 ) ;
check . equals ( ship . getAvailableUpgradePoints ( ) , 10 ) ;
2017-03-17 00:07:00 +00:00
ship . level . forceLevel ( 2 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . level . get ( ) , 2 ) ;
check . equals ( ship . getAvailableUpgradePoints ( ) , 15 ) ;
2017-03-17 00:07:00 +00:00
2017-10-26 21:47:13 +00:00
check . equals ( ship . getAttribute ( "skill_photons" ) , 0 ) ;
2017-06-11 20:44:12 +00:00
ship . upgradeSkill ( "skill_photons" ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . getAttribute ( "skill_photons" ) , 1 ) ;
2017-03-17 00:07:00 +00:00
range ( 50 ) . forEach ( ( ) = > ship . upgradeSkill ( "skill_gravity" ) ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . getAttribute ( "skill_photons" ) , 1 ) ;
check . equals ( ship . getAttribute ( "skill_gravity" ) , 14 ) ;
check . equals ( ship . getAvailableUpgradePoints ( ) , 0 ) ;
2017-03-17 00:07:00 +00:00
ship . updateAttributes ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . getAttribute ( "skill_photons" ) , 1 ) ;
check . equals ( ship . getAttribute ( "skill_gravity" ) , 14 ) ;
2017-03-17 00:07:00 +00:00
} ) ;
2017-05-10 17:16:57 +00:00
2017-10-26 21:47:13 +00:00
test . case ( "restores as new at the end of battle" , check = > {
2017-05-10 17:16:57 +00:00
let ship = new Ship ( ) ;
TestTools . setShipHP ( ship , 10 , 20 ) ;
TestTools . setShipAP ( ship , 5 , 0 ) ;
2017-11-14 00:07:06 +00:00
ship . setValue ( "hull" , 5 ) ;
ship . setValue ( "shield" , 15 ) ;
ship . setValue ( "power" , 2 ) ;
ship . active_effects . add ( new StickyEffect ( new AttributeLimitEffect ( "power_capacity" , 3 ) , 12 ) ) ;
2017-05-10 17:16:57 +00:00
ship . updateAttributes ( ) ;
2017-12-20 18:23:33 +00:00
let action1 = new BaseAction ( ) ;
let action2 = new ToggleAction ( new Equipment ( ) ) ;
action2 . activated = true ;
let action3 = new ToggleAction ( new Equipment ( ) ) ;
check . patch ( ship , "getAvailableActions" , ( ) = > [ action1 , action2 , action3 ] ) ;
2017-05-10 17:16:57 +00:00
2017-11-14 00:07:06 +00:00
check . in ( "before" , check = > {
check . equals ( ship . getValue ( "hull" ) , 5 , "hull" ) ;
check . equals ( ship . getValue ( "shield" ) , 15 , "shield" ) ;
check . equals ( ship . getValue ( "power" ) , 2 , "power" ) ;
check . equals ( ship . active_effects . count ( ) , 1 , "effects count" ) ;
check . equals ( ship . getAttribute ( "power_capacity" ) , 3 , "power capacity" ) ;
2017-12-20 18:23:33 +00:00
check . equals ( action2 . activated , true , "action 2 activation" ) ;
check . equals ( action3 . activated , false , "action 3 activation" ) ;
2017-11-14 00:07:06 +00:00
} ) ;
ship . restoreInitialState ( ) ;
check . in ( "after" , check = > {
check . equals ( ship . getValue ( "hull" ) , 10 , "hull" ) ;
check . equals ( ship . getValue ( "shield" ) , 20 , "shield" ) ;
check . equals ( ship . getValue ( "power" ) , 5 , "power" ) ;
check . equals ( ship . active_effects . count ( ) , 0 , "effects count" ) ;
check . equals ( ship . getAttribute ( "power_capacity" ) , 5 , "power capacity" ) ;
2017-12-20 18:23:33 +00:00
check . equals ( action2 . activated , false , "action 2 activation" ) ;
check . equals ( action3 . activated , false , "action 3 activation" ) ;
2017-11-14 00:07:06 +00:00
} ) ;
2017-05-10 17:16:57 +00:00
} ) ;
2017-06-12 22:28:54 +00:00
2017-10-26 21:47:13 +00:00
test . case ( "lists active effects" , check = > {
2017-06-12 22:28:54 +00:00
let ship = new Ship ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( imaterialize ( ship . ieffects ( ) ) , [ ] ) ;
2017-06-12 22:28:54 +00:00
let equipment = ship . addSlot ( SlotType . Engine ) . attach ( new Equipment ( SlotType . Engine ) ) ;
2017-10-26 21:47:13 +00:00
check . equals ( imaterialize ( ship . ieffects ( ) ) , [ ] ) ;
2017-06-12 22:28:54 +00:00
2017-11-14 00:07:06 +00:00
let effect1 = new AttributeEffect ( "precision" , 4 ) ;
equipment . effects . push ( effect1 ) ;
check . equals ( imaterialize ( ship . ieffects ( ) ) , [ effect1 ] ) ;
2017-06-12 22:28:54 +00:00
2017-11-14 00:07:06 +00:00
let effect2 = new AttributeLimitEffect ( "precision" , 2 ) ;
ship . active_effects . add ( new StickyEffect ( effect2 , 4 ) ) ;
check . equals ( imaterialize ( ship . ieffects ( ) ) , [ effect1 , effect2 ] ) ;
2017-06-12 22:28:54 +00:00
} ) ;
2017-07-12 23:18:20 +00:00
2017-10-26 21:47:13 +00:00
test . case ( "gets a textual description of an attribute" , check = > {
2017-07-12 23:18:20 +00:00
let ship = new Ship ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . getAttributeDescription ( "skill_photons" ) , "Forces of light, and electromagnetic radiation" ) ;
2017-07-12 23:18:20 +00:00
let equipment = new Equipment ( SlotType . Engine ) ;
equipment . effects = [ new AttributeEffect ( "skill_photons" , 4 ) ] ;
equipment . name = "Photonic engine" ;
ship . addSlot ( SlotType . Engine ) . attach ( equipment ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . getAttribute ( "skill_photons" ) , 4 ) ;
check . equals ( ship . getAttributeDescription ( "skill_photons" ) , "Forces of light, and electromagnetic radiation\n\nPhotonic engine Mk1: +4" ) ;
2017-07-12 23:18:20 +00:00
ship . level . forceLevelUp ( ) ;
ship . upgradeSkill ( "skill_photons" ) ;
ship . upgradeSkill ( "skill_photons" ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . getAttributeDescription ( "skill_photons" ) , "Forces of light, and electromagnetic radiation\n\nLevelled up: +2\nPhotonic engine Mk1: +4" ) ;
2017-07-12 23:18:20 +00:00
2017-11-14 00:07:06 +00:00
ship . active_effects . add ( new StickyEffect ( new AttributeLimitEffect ( "skill_photons" , 3 ) ) ) ;
2017-10-26 21:47:13 +00:00
check . equals ( ship . getAttributeDescription ( "skill_photons" ) , "Forces of light, and electromagnetic radiation\n\nLevelled up: +2\nPhotonic engine Mk1: +4\n???: limit to 3" ) ;
2017-07-12 23:18:20 +00:00
} ) ;
2017-11-29 23:56:22 +00:00
test . case ( "produces death diffs" , check = > {
let battle = TestTools . createBattle ( 1 ) ;
let ship = nn ( battle . playing_ship ) ;
check . equals ( ship . getDeathDiffs ( battle ) , [
new ShipValueDiff ( ship , "hull" , - 1 ) ,
new ShipDeathDiff ( battle , ship ) ,
] ) ;
let effect1 = ship . active_effects . add ( new AttributeEffect ( "skill_quantum" , 2 ) ) ;
let effect2 = ship . active_effects . add ( new StickyEffect ( new AttributeEffect ( "skill_materials" , 4 ) ) ) ;
let weapon1 = TestTools . addWeapon ( ship ) ;
weapon1 . action = new ToggleAction ( weapon1 , 3 ) ;
let weapon2 = TestTools . addWeapon ( ship ) ;
let action = weapon2 . action = new ToggleAction ( weapon2 , 3 ) ;
action . activated = true ;
check . equals ( ship . getDeathDiffs ( battle ) , [
new ShipEffectRemovedDiff ( ship , effect1 ) ,
new ShipAttributeDiff ( ship , "skill_quantum" , { } , { cumulative : 2 } ) ,
new ShipEffectRemovedDiff ( ship , effect2 ) ,
new ShipAttributeDiff ( ship , "skill_materials" , { } , { cumulative : 4 } ) ,
new ShipActionToggleDiff ( ship , action , false ) ,
new ShipValueDiff ( ship , "hull" , - 1 ) ,
new ShipDeathDiff ( battle , ship ) ,
] ) ;
} ) ;
2014-12-31 00:00:00 +00:00
} ) ;
2015-01-07 00:00:00 +00:00
}