mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-02-22 16:13:35 +00:00
shotgun pellet fire modes; fire mode for melee weapons; cleanup code for phoenix (decimator) and handling last phoneix rocket fire; temporary cleanup of grenades
This commit is contained in:
parent
53c5902512
commit
4059d50e72
6 changed files with 336 additions and 96 deletions
|
|
@ -2,11 +2,11 @@
|
|||
package objects
|
||||
|
||||
import net.psforever.objects._
|
||||
import net.psforever.objects.definition._
|
||||
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 {
|
||||
|
|
@ -109,12 +109,12 @@ class EquipmentTest extends Specification {
|
|||
obj.Size = EquipmentSize.Rifle
|
||||
obj.AmmoTypes += GlobalDefinitions.shotgun_shell
|
||||
obj.AmmoTypes += GlobalDefinitions.shotgun_shell_AP
|
||||
obj.FireModes += FireModeDefinition()
|
||||
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 += FireModeDefinition()
|
||||
obj.FireModes += new FireModeDefinition
|
||||
obj.FireModes(1).AmmoTypeIndices += 0
|
||||
obj.FireModes(1).AmmoTypeIndices += 1
|
||||
obj.FireModes(1).AmmoSlotIndex = 1
|
||||
|
|
@ -162,47 +162,27 @@ class EquipmentTest extends Specification {
|
|||
}
|
||||
|
||||
"multiple fire modes" in {
|
||||
//explanation: sample_weapon has two fire modes; adjusting the FireMode changes between them
|
||||
val tdef = ToolDefinition(1076)
|
||||
tdef.Size = EquipmentSize.Rifle
|
||||
tdef.AmmoTypes += GlobalDefinitions.shotgun_shell
|
||||
tdef.AmmoTypes += GlobalDefinitions.shotgun_shell_AP
|
||||
tdef.FireModes += new FireModeDefinition
|
||||
tdef.FireModes.head.AmmoTypeIndices += 0
|
||||
tdef.FireModes.head.AmmoSlotIndex = 0
|
||||
tdef.FireModes.head.Magazine = 9
|
||||
tdef.FireModes += new FireModeDefinition
|
||||
tdef.FireModes(1).AmmoTypeIndices += 1
|
||||
tdef.FireModes(1).AmmoSlotIndex = 1
|
||||
tdef.FireModes(1).Magazine = 18
|
||||
val obj : Tool = Tool(tdef)
|
||||
//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 9
|
||||
obj.AmmoType mustEqual Ammo.shotgun_shell
|
||||
obj.FireMode.Magazine mustEqual 30
|
||||
obj.AmmoType mustEqual Ammo.bullet_9mm
|
||||
//fmode -> 1
|
||||
obj.NextFireMode
|
||||
obj.FireModeIndex mustEqual 1
|
||||
obj.FireMode.Magazine mustEqual 18
|
||||
obj.AmmoType mustEqual Ammo.shotgun_shell_AP
|
||||
obj.FireMode.Magazine mustEqual 1
|
||||
obj.AmmoType mustEqual Ammo.rocket
|
||||
//fmode -> 0
|
||||
obj.NextFireMode
|
||||
obj.FireModeIndex mustEqual 0
|
||||
obj.FireMode.Magazine mustEqual 9
|
||||
obj.AmmoType mustEqual Ammo.shotgun_shell
|
||||
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 tdef = ToolDefinition(1076)
|
||||
tdef.Size = EquipmentSize.Rifle
|
||||
tdef.AmmoTypes += GlobalDefinitions.shotgun_shell
|
||||
tdef.AmmoTypes += GlobalDefinitions.shotgun_shell_AP
|
||||
tdef.FireModes += new FireModeDefinition
|
||||
tdef.FireModes.head.AmmoTypeIndices += 0
|
||||
tdef.FireModes.head.AmmoTypeIndices += 1
|
||||
tdef.FireModes.head.AmmoSlotIndex = 0
|
||||
val obj : Tool = Tool(tdef)
|
||||
val obj : Tool = Tool(flechette)
|
||||
//ammo = 0
|
||||
obj.AmmoTypeIndex mustEqual 0
|
||||
obj.AmmoType mustEqual Ammo.shotgun_shell
|
||||
|
|
@ -255,6 +235,39 @@ class EquipmentTest extends Specification {
|
|||
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 {
|
||||
|
|
|
|||
127
common/src/test/scala/objects/FireModeTest.scala
Normal file
127
common/src/test/scala/objects/FireModeTest.scala
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package objects
|
||||
|
||||
import net.psforever.objects.definition.ToolDefinition
|
||||
import net.psforever.objects.{GlobalDefinitions, Tool}
|
||||
import net.psforever.objects.equipment.{EquipmentSize, FireModeDefinition, InfiniteFireModeDefinition, PelletFireModeDefinition}
|
||||
import org.specs2.mutable._
|
||||
|
||||
class FireModeTest extends Specification {
|
||||
"FireModeDefinition" should {
|
||||
"construct" in {
|
||||
val obj = new FireModeDefinition
|
||||
obj.AmmoTypeIndices mustEqual Nil
|
||||
obj.AmmoSlotIndex mustEqual 0
|
||||
obj.Magazine mustEqual 1
|
||||
obj.Rounds mustEqual 1
|
||||
obj.Chamber mustEqual 1
|
||||
}
|
||||
|
||||
"test configurations" in {
|
||||
val tdef = ToolDefinition(1076) //fake object id
|
||||
tdef.Size = EquipmentSize.Rifle
|
||||
tdef.AmmoTypes += GlobalDefinitions.bullet_9mm
|
||||
tdef.AmmoTypes += GlobalDefinitions.shotgun_shell
|
||||
tdef.FireModes += new FireModeDefinition
|
||||
tdef.FireModes.head.AmmoTypeIndices += 0
|
||||
tdef.FireModes.head.AmmoSlotIndex = 0
|
||||
tdef.FireModes.head.Magazine = 18
|
||||
tdef.FireModes.head.Rounds = 18
|
||||
tdef.FireModes.head.Chamber = 2
|
||||
tdef.FireModes += new FireModeDefinition
|
||||
tdef.FireModes(1).AmmoTypeIndices += 1
|
||||
tdef.FireModes(1).AmmoTypeIndices += 2
|
||||
tdef.FireModes(1).AmmoSlotIndex = 1
|
||||
tdef.FireModes(1).Magazine = 9
|
||||
tdef.FireModes(1).Rounds = 2
|
||||
tdef.FireModes(1).Chamber = 8
|
||||
|
||||
tdef.AmmoTypes.toList mustEqual List(GlobalDefinitions.bullet_9mm, GlobalDefinitions.shotgun_shell)
|
||||
tdef.FireModes.size mustEqual 2
|
||||
tdef.FireModes.head.AmmoTypeIndices.toList mustEqual List(0)
|
||||
tdef.FireModes.head.AmmoSlotIndex mustEqual 0
|
||||
tdef.FireModes.head.Magazine mustEqual 18
|
||||
tdef.FireModes.head.Rounds mustEqual 18
|
||||
tdef.FireModes.head.Chamber mustEqual 2
|
||||
tdef.FireModes(1).AmmoTypeIndices.toList mustEqual List(1, 2)
|
||||
tdef.FireModes(1).AmmoSlotIndex mustEqual 1
|
||||
tdef.FireModes(1).Magazine mustEqual 9
|
||||
tdef.FireModes(1).Rounds mustEqual 2
|
||||
tdef.FireModes(1).Chamber mustEqual 8
|
||||
}
|
||||
|
||||
"discharge" in {
|
||||
val obj = Tool(GlobalDefinitions.beamer) //see EquipmentTest
|
||||
obj.FireMode.isInstanceOf[FireModeDefinition] mustEqual true
|
||||
obj.Magazine mustEqual 16
|
||||
obj.FireMode.Rounds mustEqual 1
|
||||
obj.FireMode.Chamber mustEqual 1
|
||||
|
||||
obj.Magazine mustEqual 16
|
||||
obj.Discharge
|
||||
obj.Magazine mustEqual 15
|
||||
obj.Discharge
|
||||
obj.Discharge
|
||||
obj.Magazine mustEqual 13
|
||||
}
|
||||
}
|
||||
|
||||
"PelletFireModeDefinition" should {
|
||||
"construct" in {
|
||||
val obj = new PelletFireModeDefinition
|
||||
obj.AmmoTypeIndices mustEqual Nil
|
||||
obj.AmmoSlotIndex mustEqual 0
|
||||
obj.Magazine mustEqual 1
|
||||
obj.Rounds mustEqual 1
|
||||
obj.Chamber mustEqual 1
|
||||
}
|
||||
|
||||
"discharge" in {
|
||||
val obj = Tool(GlobalDefinitions.flechette) //see EquipmentTest
|
||||
obj.FireMode.isInstanceOf[PelletFireModeDefinition] mustEqual true
|
||||
obj.Magazine mustEqual 12
|
||||
obj.FireMode.Rounds mustEqual 1
|
||||
obj.FireMode.Chamber mustEqual 8
|
||||
|
||||
obj.Magazine mustEqual 12
|
||||
obj.Discharge //1
|
||||
obj.Magazine mustEqual 12
|
||||
obj.Discharge //2
|
||||
obj.Discharge //3
|
||||
obj.Magazine mustEqual 12
|
||||
obj.Discharge //4
|
||||
obj.Discharge //5
|
||||
obj.Discharge //6
|
||||
obj.Discharge //7
|
||||
obj.Magazine mustEqual 12
|
||||
obj.Discharge //8
|
||||
obj.Magazine mustEqual 11
|
||||
}
|
||||
}
|
||||
|
||||
"InfiniteFireModeDefinition" should {
|
||||
"construct" in {
|
||||
val obj = new InfiniteFireModeDefinition
|
||||
obj.AmmoTypeIndices mustEqual Nil
|
||||
obj.AmmoSlotIndex mustEqual 0
|
||||
obj.Magazine mustEqual 1
|
||||
obj.Rounds mustEqual 1
|
||||
obj.Chamber mustEqual 1
|
||||
}
|
||||
|
||||
"discharge" in {
|
||||
val obj = Tool(GlobalDefinitions.magcutter) //see EquipmentTest
|
||||
obj.FireMode.isInstanceOf[InfiniteFireModeDefinition] mustEqual true
|
||||
obj.Magazine mustEqual 1
|
||||
obj.FireMode.Rounds mustEqual 1
|
||||
obj.FireMode.Chamber mustEqual 1
|
||||
|
||||
obj.Magazine mustEqual 1
|
||||
obj.Discharge
|
||||
obj.Magazine mustEqual 1
|
||||
obj.Discharge
|
||||
obj.Discharge
|
||||
obj.Magazine mustEqual 1
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue