PSF-LoginServer/common/src/test/scala/objects/ExoSuitTest.scala
Mazo 28beea4e30 MAX Capacitors (#297)
* fix isAnchored / isOverdrived faction check

* Faction specific MAX definitions

* GenericActionMessage documentation

* MAX Capacitor functionality and changes to damage resolution for NC MAX shield
2019-12-10 08:53:11 -05:00

175 lines
7.5 KiB
Scala

// Copyright (c) 2017 PSForever
package objects
import net.psforever.objects.GlobalDefinitions
import net.psforever.objects.definition.{ExoSuitDefinition, SpecialExoSuitDefinition}
import net.psforever.objects.equipment._
import net.psforever.objects.inventory.InventoryTile
import net.psforever.types.{ExoSuitType, PlanetSideEmpire}
import org.specs2.mutable._
class ExoSuitTest extends Specification {
"ExoSuitDefinition" should {
"construct" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.MaxArmor mustEqual 0
obj.InventoryScale mustEqual InventoryTile.Tile11
obj.InventoryOffset mustEqual 0
obj.SuitType mustEqual ExoSuitType.Standard
obj.Holsters.length mustEqual 5
obj.Holsters.foreach(slot => { if(slot != EquipmentSize.Blocked) { ko } })
ok
}
"produce the type of exo-suit that was provided as a clarified type" in {
ExoSuitDefinition(ExoSuitType.Standard).SuitType mustEqual ExoSuitType.Standard
ExoSuitDefinition(ExoSuitType.Agile).SuitType mustEqual ExoSuitType.Agile
}
"change the maximum armor value" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.MaxArmor mustEqual 0
obj.MaxArmor = 1
obj.MaxArmor mustEqual 1
}
"not change the maximum armor to an invalid value" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.MaxArmor mustEqual 0
obj.MaxArmor = -1
obj.MaxArmor mustEqual 0
obj.MaxArmor = 65536
obj.MaxArmor mustEqual 65535
}
"change the size of the inventory" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.InventoryScale mustEqual InventoryTile.Tile11
obj.InventoryScale = InventoryTile.Tile42
obj.InventoryScale mustEqual InventoryTile.Tile42
}
"change the start index of the inventory" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.InventoryOffset mustEqual 0
obj.InventoryOffset = 1
obj.InventoryOffset mustEqual 1
}
"not change the start index of the inventory to an invalid value" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.InventoryOffset mustEqual 0
obj.InventoryOffset = -1
obj.InventoryOffset mustEqual 0
obj.InventoryOffset = 65536
obj.InventoryOffset mustEqual 65535
}
"change specific holsters to specific values" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.Holster(0) mustEqual EquipmentSize.Blocked
obj.Holster(0, EquipmentSize.Pistol)
obj.Holster(0) mustEqual EquipmentSize.Pistol
obj.Holster(4) mustEqual EquipmentSize.Blocked
obj.Holster(4, EquipmentSize.Rifle)
obj.Holster(4) mustEqual EquipmentSize.Rifle
(0 to 4).foreach {
case 0 => obj.Holsters(0) mustEqual EquipmentSize.Pistol
case 4 => obj.Holsters(4) mustEqual EquipmentSize.Rifle
case x => obj.Holsters(x) mustEqual EquipmentSize.Blocked
}
ok
}
"can not change any slot that does not exist" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
obj.Holster(9) mustEqual EquipmentSize.Blocked
obj.Holster(9, EquipmentSize.Pistol)
obj.Holster(9) mustEqual EquipmentSize.Blocked
}
"produce a copy of the definition" in {
val obj = ExoSuitDefinition(ExoSuitType.Standard)
val obj2 = obj.Use
obj eq obj2
}
}
"SpecialExoSuitDefinition" should {
"construct" in {
val obj = SpecialExoSuitDefinition(ExoSuitType.Standard)
obj.MaxArmor mustEqual 0
obj.InventoryScale mustEqual InventoryTile.Tile11
obj.InventoryOffset mustEqual 0
obj.SuitType mustEqual ExoSuitType.Standard
obj.Holsters.length mustEqual 5
obj.Holsters.foreach(slot => { if(slot != EquipmentSize.Blocked) { ko } })
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
}
"configure UsingSpecial to various values" in {
val obj = SpecialExoSuitDefinition(ExoSuitType.Standard)
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Anchored
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Anchored
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Overdrive
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Overdrive
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Shielded
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Shielded
obj.UsingSpecial = SpecialExoSuitDefinition.Mode.Normal
obj.UsingSpecial mustEqual SpecialExoSuitDefinition.Mode.Normal
}
"produce a separate copy of the definition" in {
val obj = SpecialExoSuitDefinition(ExoSuitType.Standard)
val obj2 = obj.Use
obj ne obj2
}
}
"ExoSuitDefinition.Select" should {
"produce common, shared instances of exo suits" in {
ExoSuitDefinition.Select(ExoSuitType.Standard, PlanetSideEmpire.VS) eq ExoSuitDefinition.Select(ExoSuitType.Standard, PlanetSideEmpire.VS)
ExoSuitDefinition.Select(ExoSuitType.Agile, PlanetSideEmpire.VS) eq ExoSuitDefinition.Select(ExoSuitType.Agile, PlanetSideEmpire.VS)
ExoSuitDefinition.Select(ExoSuitType.Reinforced, PlanetSideEmpire.VS) eq ExoSuitDefinition.Select(ExoSuitType.Reinforced, PlanetSideEmpire.VS)
ExoSuitDefinition.Select(ExoSuitType.Infiltration, PlanetSideEmpire.VS) eq ExoSuitDefinition.Select(ExoSuitType.Infiltration, PlanetSideEmpire.VS)
}
"produce common, shared instances of exo suits across factions" in {
ExoSuitDefinition.Select(ExoSuitType.Standard, PlanetSideEmpire.VS) eq ExoSuitDefinition.Select(ExoSuitType.Standard, PlanetSideEmpire.TR)
ExoSuitDefinition.Select(ExoSuitType.Standard, PlanetSideEmpire.VS) eq ExoSuitDefinition.Select(ExoSuitType.Standard, PlanetSideEmpire.NC)
ExoSuitDefinition.Select(ExoSuitType.Agile, PlanetSideEmpire.VS) eq ExoSuitDefinition.Select(ExoSuitType.Agile, PlanetSideEmpire.TR)
ExoSuitDefinition.Select(ExoSuitType.Agile, PlanetSideEmpire.VS) eq ExoSuitDefinition.Select(ExoSuitType.Agile, PlanetSideEmpire.NC)
ExoSuitDefinition.Select(ExoSuitType.Reinforced, PlanetSideEmpire.VS) eq ExoSuitDefinition.Select(ExoSuitType.Reinforced, PlanetSideEmpire.TR)
ExoSuitDefinition.Select(ExoSuitType.Reinforced, PlanetSideEmpire.VS) eq ExoSuitDefinition.Select(ExoSuitType.Reinforced, PlanetSideEmpire.NC)
ExoSuitDefinition.Select(ExoSuitType.Infiltration, PlanetSideEmpire.VS) eq ExoSuitDefinition.Select(ExoSuitType.Infiltration, PlanetSideEmpire.TR)
ExoSuitDefinition.Select(ExoSuitType.Infiltration, PlanetSideEmpire.VS) eq ExoSuitDefinition.Select(ExoSuitType.Infiltration, PlanetSideEmpire.NC)
}
"can select max for TR" in {
val obj = ExoSuitDefinition.Select(ExoSuitType.MAX, PlanetSideEmpire.TR)
obj.isInstanceOf[SpecialExoSuitDefinition] mustEqual true
obj.MaxCapacitor mustEqual 300
}
"can select max for VS" in {
val obj = ExoSuitDefinition.Select(ExoSuitType.MAX, PlanetSideEmpire.VS)
obj.isInstanceOf[SpecialExoSuitDefinition] mustEqual true
obj.MaxCapacitor mustEqual 50
}
"can select max for NC" in {
val obj = ExoSuitDefinition.Select(ExoSuitType.MAX, PlanetSideEmpire.NC)
obj.isInstanceOf[SpecialExoSuitDefinition] mustEqual true
obj.MaxCapacitor mustEqual 400
}
"produces unique instances of the mechanized assault exo suit" in {
val obj = ExoSuitDefinition.Select(ExoSuitType.MAX, PlanetSideEmpire.VS)
obj ne ExoSuitDefinition.Select(ExoSuitType.MAX, PlanetSideEmpire.VS)
obj.isInstanceOf[SpecialExoSuitDefinition] mustEqual true
}
}
}