mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-02-23 00:23:40 +00:00
* fix isAnchored / isOverdrived faction check * Faction specific MAX definitions * GenericActionMessage documentation * MAX Capacitor functionality and changes to damage resolution for NC MAX shield
175 lines
7.5 KiB
Scala
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
|
|
}
|
|
}
|
|
}
|