mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-01-20 02:24:45 +00:00
359 lines
12 KiB
Scala
359 lines
12 KiB
Scala
// Copyright (c) 2017 PSForever
|
|
package objects
|
|
|
|
import net.psforever.objects._
|
|
import net.psforever.objects.equipment.CItem.{DeployedItem, Unit}
|
|
import net.psforever.objects.equipment._
|
|
import net.psforever.objects.inventory.InventoryTile
|
|
import net.psforever.objects.GlobalDefinitions._
|
|
import net.psforever.objects.definition._
|
|
import org.specs2.mutable._
|
|
|
|
class EquipmentTest extends Specification {
|
|
"EquipmentSize" should {
|
|
"equal" in {
|
|
//basic equality
|
|
EquipmentSize.isEqual(EquipmentSize.Pistol, EquipmentSize.Pistol) mustEqual true
|
|
EquipmentSize.isEqual(EquipmentSize.Pistol, EquipmentSize.Rifle) mustEqual false
|
|
//Inventory is always allowed
|
|
EquipmentSize.isEqual(EquipmentSize.Inventory, EquipmentSize.Rifle) mustEqual true
|
|
EquipmentSize.isEqual(EquipmentSize.Pistol, EquipmentSize.Inventory) mustEqual true
|
|
//Blocked is never allowed
|
|
EquipmentSize.isEqual(EquipmentSize.Blocked, EquipmentSize.Rifle) mustEqual false
|
|
EquipmentSize.isEqual(EquipmentSize.Pistol, EquipmentSize.Blocked) mustEqual false
|
|
EquipmentSize.isEqual(EquipmentSize.Blocked, EquipmentSize.Inventory) mustEqual false
|
|
}
|
|
}
|
|
|
|
"AmmoBox" should {
|
|
"define" in {
|
|
val obj = AmmoBoxDefinition(86)
|
|
obj.Capacity = 300
|
|
obj.Tile = InventoryTile.Tile44
|
|
|
|
obj.AmmoType mustEqual Ammo.aphelion_immolation_cannon_ammo
|
|
obj.Capacity mustEqual 300
|
|
obj.Tile.Width mustEqual InventoryTile.Tile44.Width
|
|
obj.Tile.Height mustEqual InventoryTile.Tile44.Height
|
|
obj.ObjectId mustEqual 86
|
|
}
|
|
|
|
"construct" in {
|
|
val obj = AmmoBox(bullet_9mm)
|
|
obj.AmmoType mustEqual Ammo.bullet_9mm
|
|
obj.Capacity mustEqual 50
|
|
}
|
|
|
|
"construct (2)" in {
|
|
val obj = AmmoBox(bullet_9mm, 150)
|
|
obj.AmmoType mustEqual Ammo.bullet_9mm
|
|
obj.Capacity mustEqual 150
|
|
}
|
|
|
|
"vary capacity" in {
|
|
val obj = AmmoBox(bullet_9mm, 0)
|
|
obj.Capacity mustEqual 1 //can not be initialized to 0
|
|
obj.Capacity = 75
|
|
obj.Capacity mustEqual 75
|
|
}
|
|
|
|
"limit capacity" in {
|
|
val obj = AmmoBox(bullet_9mm)
|
|
obj.Capacity mustEqual 50
|
|
obj.Capacity = -1
|
|
obj.Capacity mustEqual 0
|
|
obj.Capacity = 65536
|
|
obj.Capacity mustEqual 65535
|
|
}
|
|
|
|
"split (0)" in {
|
|
val obj = AmmoBox(bullet_9mm)
|
|
obj.Capacity = 0
|
|
val list = AmmoBox.Split(obj)
|
|
list.size mustEqual 0
|
|
}
|
|
|
|
"split (1)" in {
|
|
val obj = AmmoBox(bullet_9mm)
|
|
obj.Capacity = 50
|
|
val list = AmmoBox.Split(obj)
|
|
list.size mustEqual 1
|
|
list.head.Capacity mustEqual 50
|
|
}
|
|
|
|
"split (2)" in {
|
|
val obj = AmmoBox(bullet_9mm)
|
|
obj.Capacity = 75
|
|
val list = AmmoBox.Split(obj)
|
|
list.size mustEqual 2
|
|
list.head.Capacity mustEqual 50
|
|
list(1).Capacity mustEqual 25
|
|
}
|
|
|
|
"split (4)" in {
|
|
val obj = AmmoBox(bullet_9mm)
|
|
obj.Capacity = 165
|
|
val list = AmmoBox.Split(obj)
|
|
list.size mustEqual 4
|
|
list.head.Capacity mustEqual 50
|
|
list(1).Capacity mustEqual 50
|
|
list(2).Capacity mustEqual 50
|
|
list(3).Capacity mustEqual 15
|
|
}
|
|
}
|
|
|
|
"Tool" should {
|
|
"define" in {
|
|
val obj = ToolDefinition(1076)
|
|
obj.Name = "sample_weapon"
|
|
obj.Size = EquipmentSize.Rifle
|
|
obj.AmmoTypes += GlobalDefinitions.shotgun_shell
|
|
obj.AmmoTypes += GlobalDefinitions.shotgun_shell_AP
|
|
obj.FireModes += new FireModeDefinition
|
|
obj.FireModes.head.AmmoTypeIndices += 0
|
|
obj.FireModes.head.AmmoTypeIndices += 1
|
|
obj.FireModes.head.AmmoSlotIndex = 0
|
|
obj.FireModes.head.Magazine = 18
|
|
obj.FireModes += new FireModeDefinition
|
|
obj.FireModes(1).AmmoTypeIndices += 0
|
|
obj.FireModes(1).AmmoTypeIndices += 1
|
|
obj.FireModes(1).AmmoSlotIndex = 1
|
|
obj.FireModes(1).Chamber = 3
|
|
obj.FireModes(1).Magazine = 18
|
|
obj.Tile = InventoryTile.Tile93
|
|
obj.ObjectId mustEqual 1076
|
|
|
|
obj.Name mustEqual "sample_weapon"
|
|
obj.AmmoTypes.head mustEqual GlobalDefinitions.shotgun_shell
|
|
obj.AmmoTypes(1) mustEqual GlobalDefinitions.shotgun_shell_AP
|
|
obj.FireModes.head.AmmoTypeIndices.head mustEqual 0
|
|
obj.FireModes.head.AmmoTypeIndices(1) mustEqual 1
|
|
obj.FireModes.head.AmmoSlotIndex mustEqual 0
|
|
obj.FireModes.head.Chamber mustEqual 1
|
|
obj.FireModes.head.Magazine mustEqual 18
|
|
obj.FireModes(1).AmmoTypeIndices.head mustEqual 0
|
|
obj.FireModes(1).AmmoTypeIndices(1) mustEqual 1
|
|
obj.FireModes(1).AmmoSlotIndex mustEqual 1
|
|
obj.FireModes(1).Chamber mustEqual 3
|
|
obj.FireModes(1).Magazine mustEqual 18
|
|
obj.Tile.Width mustEqual InventoryTile.Tile93.Width
|
|
obj.Tile.Height mustEqual InventoryTile.Tile93.Height
|
|
}
|
|
|
|
"construct" in {
|
|
val obj : Tool = Tool(fury_weapon_systema)
|
|
obj.Definition.ObjectId mustEqual fury_weapon_systema.ObjectId
|
|
}
|
|
|
|
"fire mode" in {
|
|
//explanation: fury_weapon_systema has one fire mode and that fire mode is our only option
|
|
val obj : Tool = Tool(fury_weapon_systema)
|
|
obj.Magazine = obj.MaxMagazine
|
|
obj.Magazine mustEqual obj.Definition.FireModes.head.Magazine
|
|
//fmode = 0
|
|
obj.FireModeIndex mustEqual 0
|
|
obj.FireMode.Magazine mustEqual 2
|
|
obj.AmmoType mustEqual Ammo.hellfire_ammo
|
|
//fmode -> 1 (0)
|
|
obj.FireModeIndex = 1
|
|
obj.FireModeIndex mustEqual 0
|
|
obj.FireMode.Magazine mustEqual 2
|
|
obj.AmmoType mustEqual Ammo.hellfire_ammo
|
|
}
|
|
|
|
"multiple fire modes" in {
|
|
//explanation: sample_weapon has two fire modes; each fire mode has a different ammunition type
|
|
val obj : Tool = Tool(punisher)
|
|
//fmode = 0
|
|
obj.FireModeIndex mustEqual 0
|
|
obj.FireMode.Magazine mustEqual 30
|
|
obj.AmmoType mustEqual Ammo.bullet_9mm
|
|
//fmode -> 1
|
|
obj.NextFireMode
|
|
obj.FireModeIndex mustEqual 1
|
|
obj.FireMode.Magazine mustEqual 1
|
|
obj.AmmoType mustEqual Ammo.rocket
|
|
//fmode -> 0
|
|
obj.NextFireMode
|
|
obj.FireModeIndex mustEqual 0
|
|
obj.FireMode.Magazine mustEqual 30
|
|
obj.AmmoType mustEqual Ammo.bullet_9mm
|
|
}
|
|
|
|
"multiple types of ammunition" in {
|
|
//explanation: obj has one fire mode and two ammunitions; adjusting the AmmoType changes between them
|
|
val obj : Tool = Tool(flechette)
|
|
//ammo = 0
|
|
obj.AmmoTypeIndex mustEqual 0
|
|
obj.AmmoType mustEqual Ammo.shotgun_shell
|
|
//ammo -> 1
|
|
obj.NextAmmoType
|
|
obj.AmmoTypeIndex mustEqual 1
|
|
obj.AmmoType mustEqual Ammo.shotgun_shell_AP
|
|
//ammo -> 2 (0)
|
|
obj.NextAmmoType
|
|
obj.AmmoTypeIndex mustEqual 0
|
|
obj.AmmoType mustEqual Ammo.shotgun_shell
|
|
}
|
|
|
|
"multiple ammo types and multiple fire modes, split (Punisher)" in {
|
|
val obj = Tool(GlobalDefinitions.punisher)
|
|
//ammo = 0, fmode = 0
|
|
obj.FireModeIndex mustEqual 0
|
|
obj.AmmoTypeIndex mustEqual 0
|
|
obj.AmmoType mustEqual Ammo.bullet_9mm
|
|
//ammo = 2, fmode = 1
|
|
obj.NextFireMode
|
|
obj.FireModeIndex mustEqual 1
|
|
obj.AmmoTypeIndex mustEqual 2
|
|
obj.AmmoType mustEqual Ammo.rocket
|
|
//ammo = 3, fmode = 1
|
|
obj.NextAmmoType
|
|
obj.AmmoTypeIndex mustEqual 3
|
|
obj.AmmoType mustEqual Ammo.frag_cartridge
|
|
//ammo = 4, fmode = 1
|
|
obj.NextAmmoType
|
|
obj.AmmoTypeIndex mustEqual 4
|
|
obj.AmmoType mustEqual Ammo.jammer_cartridge
|
|
//ammo = 0, fmode = 0
|
|
obj.NextFireMode
|
|
obj.FireModeIndex mustEqual 0
|
|
obj.AmmoTypeIndex mustEqual 0
|
|
obj.AmmoType mustEqual Ammo.bullet_9mm
|
|
//ammo = 1, fmode = 0
|
|
obj.NextAmmoType
|
|
obj.AmmoTypeIndex mustEqual 1
|
|
obj.AmmoType mustEqual Ammo.bullet_9mm_AP
|
|
//ammo = 5, fmode = 1
|
|
obj.NextFireMode
|
|
obj.NextAmmoType
|
|
obj.FireModeIndex mustEqual 1
|
|
obj.AmmoTypeIndex mustEqual 5
|
|
obj.AmmoType mustEqual Ammo.plasma_cartridge
|
|
//ammo = 2, fmode = 1
|
|
obj.NextAmmoType
|
|
obj.AmmoTypeIndex mustEqual 2
|
|
obj.AmmoType mustEqual Ammo.rocket
|
|
}
|
|
|
|
"discharge (1)" in {
|
|
val obj = Tool(GlobalDefinitions.punisher)
|
|
obj.Magazine mustEqual 30
|
|
obj.Discharge
|
|
obj.Magazine mustEqual 29
|
|
obj.Discharge
|
|
obj.Discharge
|
|
obj.Magazine mustEqual 27
|
|
}
|
|
|
|
"chamber" in {
|
|
val obj = Tool(GlobalDefinitions.flechette)
|
|
obj.Magazine mustEqual 12
|
|
obj.AmmoSlot.Chamber mustEqual 8
|
|
|
|
obj.Discharge
|
|
obj.Magazine mustEqual 12
|
|
obj.AmmoSlot.Chamber mustEqual 7
|
|
obj.Discharge
|
|
obj.Discharge
|
|
obj.Magazine mustEqual 12
|
|
obj.AmmoSlot.Chamber mustEqual 5
|
|
obj.Discharge
|
|
obj.Discharge
|
|
obj.Discharge
|
|
obj.Discharge
|
|
obj.Magazine mustEqual 12
|
|
obj.AmmoSlot.Chamber mustEqual 1
|
|
obj.Discharge
|
|
obj.Magazine mustEqual 11
|
|
obj.AmmoSlot.Chamber mustEqual 8
|
|
}
|
|
}
|
|
|
|
"Kit" should {
|
|
"define" in {
|
|
val sample = KitDefinition(Kits.medkit)
|
|
sample.ObjectId mustEqual medkit.ObjectId
|
|
sample.Tile.Width mustEqual medkit.Tile.Width
|
|
sample.Tile.Height mustEqual medkit.Tile.Height
|
|
}
|
|
|
|
"construct" in {
|
|
val obj : Kit = Kit(medkit)
|
|
obj.Definition.ObjectId mustEqual medkit.ObjectId
|
|
}
|
|
}
|
|
|
|
"ConstructionItem" should {
|
|
val advanced_ace_tr = ConstructionItemDefinition(39)
|
|
advanced_ace_tr.Modes += DeployedItem.tank_traps
|
|
advanced_ace_tr.Modes += DeployedItem.portable_manned_turret_tr
|
|
advanced_ace_tr.Modes += DeployedItem.deployable_shield_generator
|
|
advanced_ace_tr.Tile = InventoryTile.Tile63
|
|
|
|
"define" in {
|
|
val sample = ConstructionItemDefinition(Unit.advanced_ace)
|
|
sample.Modes += DeployedItem.tank_traps
|
|
sample.Modes += DeployedItem.portable_manned_turret_tr
|
|
sample.Modes += DeployedItem.deployable_shield_generator
|
|
sample.Tile = InventoryTile.Tile63
|
|
sample.Modes.head mustEqual DeployedItem.tank_traps
|
|
sample.Modes(1) mustEqual DeployedItem.portable_manned_turret_tr
|
|
sample.Modes(2) mustEqual DeployedItem.deployable_shield_generator
|
|
sample.Tile.Width mustEqual InventoryTile.Tile63.Width
|
|
sample.Tile.Height mustEqual InventoryTile.Tile63.Height
|
|
}
|
|
|
|
"construct" in {
|
|
val obj : ConstructionItem = ConstructionItem(advanced_ace_tr)
|
|
obj.Definition.ObjectId mustEqual advanced_ace_tr.ObjectId
|
|
}
|
|
|
|
"fire mode" in {
|
|
//explanation: router_telepad has one fire mode and that fire mode is our only option
|
|
val router_telepad : ConstructionItemDefinition = ConstructionItemDefinition(Unit.router_telepad)
|
|
router_telepad.Modes += DeployedItem.router_telepad_deployable
|
|
val obj : ConstructionItem = ConstructionItem(router_telepad)
|
|
//fmode = 0
|
|
obj.FireModeIndex mustEqual 0
|
|
obj.FireMode mustEqual DeployedItem.router_telepad_deployable
|
|
//fmode -> 1 (0)
|
|
obj.FireModeIndex = 1
|
|
obj.FireModeIndex mustEqual 0
|
|
obj.FireMode mustEqual DeployedItem.router_telepad_deployable
|
|
}
|
|
|
|
"multiple fire modes" in {
|
|
//explanation: advanced_ace_tr has three fire modes; adjusting the FireMode changes between them
|
|
val obj : ConstructionItem = ConstructionItem(advanced_ace_tr)
|
|
//fmode = 0
|
|
obj.FireModeIndex mustEqual 0
|
|
obj.FireMode mustEqual DeployedItem.tank_traps
|
|
//fmode -> 1
|
|
obj.NextFireMode
|
|
obj.FireModeIndex mustEqual 1
|
|
obj.FireMode mustEqual DeployedItem.portable_manned_turret_tr
|
|
//fmode -> 2
|
|
obj.NextFireMode
|
|
obj.FireModeIndex mustEqual 2
|
|
obj.FireMode mustEqual DeployedItem.deployable_shield_generator
|
|
//fmode -> 0
|
|
obj.NextFireMode
|
|
obj.FireModeIndex mustEqual 0
|
|
obj.FireMode mustEqual DeployedItem.tank_traps
|
|
}
|
|
}
|
|
|
|
"SimpleItem" should {
|
|
"define" in {
|
|
val sample = SimpleItemDefinition(SItem.remote_electronics_kit)
|
|
sample.ObjectId mustEqual remote_electronics_kit.ObjectId
|
|
}
|
|
|
|
"construct" in {
|
|
val obj : SimpleItem = SimpleItem(remote_electronics_kit)
|
|
obj.Definition.ObjectId mustEqual remote_electronics_kit.ObjectId
|
|
}
|
|
}
|
|
}
|