while it's still a dice roll, all tests currently implemented are capable of passing

This commit is contained in:
Fate-JH 2024-05-22 01:05:10 -04:00
parent 1847b4bedf
commit 46cc8bae14
4 changed files with 331 additions and 334 deletions

View file

@ -131,15 +131,10 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con
startHeartbeat()
case SessionActor.PokeClient =>
middlewareActor ! MiddlewareActor.Send(KeepAliveMessage())
pokeClient()
case SessionActor.SetMode(newMode) =>
if (mode != newMode) {
logic.switchFrom(data.session)
mode = newMode
logic = mode.setup(data)
}
logic.switchTo(data.session)
changeMode(newMode)
case packet =>
parse(sender())(packet)
@ -157,6 +152,19 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con
)
}
private def pokeClient(): Unit = {
middlewareActor ! MiddlewareActor.Send(KeepAliveMessage())
}
private def changeMode(newMode: PlayerMode): Unit = {
if (mode != newMode) {
logic.switchFrom(data.session)
mode = newMode
logic = mode.setup(data)
}
logic.switchTo(data.session)
}
private def parse(sender: ActorRef): Receive = {
/* really common messages (very frequently, every life) */
case packet: PlanetSideGamePacket =>

View file

@ -31,17 +31,19 @@ import org.specs2.mutable.Specification
import scala.concurrent.duration._
import net.psforever.objects.avatar.Avatar
import net.psforever.objects.definition.ProjectileDefinition
import net.psforever.objects.serverobject.terminals.implant.{ImplantTerminalMech, ImplantTerminalMechControl}
import net.psforever.objects.sourcing.{PlayerSource, SourceEntry}
import net.psforever.objects.vital.interaction.DamageInteraction
import net.psforever.objects.vital.base.DamageResolution
import net.psforever.objects.vital.projectile.ProjectileReason
import net.psforever.objects.vital.resolution.ResolutionCalculations.Output
class DamageableTest extends Specification {
val player1 = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val pSource = PlayerSource(player1)
val weaponA = Tool(GlobalDefinitions.phoenix) //decimator
val projectileA = weaponA.Projectile
val player1: Player = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute))
val pSource: PlayerSource = PlayerSource(player1)
val weaponA: Tool = Tool(GlobalDefinitions.phoenix) //decimator
val projectileA: ProjectileDefinition = weaponA.Projectile
"Damageable" should {
"permit damage" in {
@ -282,16 +284,20 @@ essentially, treat them more as generic entities whose object types are damageab
see specific object type tests in relation to what those object types does above and beyond that during damage
*/
class DamageableEntityDamageTest extends ActorTest {
val activityProbe: TestProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val buildingProbe: TestProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(5))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
override def Activity: ActorRef = activityProbe.ref
override def AvatarEvents: ActorRef = avatarProbe.ref
}
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val gen = Generator(GlobalDefinitions.generator) //guid=2
val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
val building: Building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val gen: Generator = Generator(GlobalDefinitions.generator) //guid=2
val player1: Player = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
guid.register(building, 1)
guid.register(gen, 2)
guid.register(player1, 3)
@ -300,17 +306,11 @@ class DamageableEntityDamageTest extends ActorTest {
building.Amenities = gen
gen.Position = Vector3(1, 0, 0)
gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control")
val activityProbe = TestProbe()
val avatarProbe = TestProbe()
val buildingProbe = TestProbe()
zone.Activity = activityProbe.ref
zone.AvatarEvents = avatarProbe.ref
building.Actor = buildingProbe.ref
val weapon = Tool(GlobalDefinitions.phoenix) //decimator
val projectile = weapon.Projectile
val resolved = DamageInteraction(
val weapon: Tool = Tool(GlobalDefinitions.phoenix) //decimator
val projectile: ProjectileDefinition = weapon.Projectile
val resolved: DamageInteraction = DamageInteraction(
SourceEntry(gen),
ProjectileReason(
DamageResolution.Hit,
@ -319,14 +319,14 @@ class DamageableEntityDamageTest extends ActorTest {
),
Vector3(1,0,0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
expectNoMessage(200 milliseconds)
"DamageableEntity" should {
"handle taking damage" in {
gen.Actor ! Vitality.Damage(applyDamageTo)
val msg1 = avatarProbe.receiveOne(500 milliseconds)
val msg2 = activityProbe.receiveOne(500 milliseconds)
val msg1 = avatarProbe.receiveOne(5000 milliseconds)
val msg2 = activityProbe.receiveOne(5000 milliseconds)
msg1 match {
case AvatarServiceMessage("test", AvatarAction.PlanetsideAttributeToAll(ValidPlanetSideGUID(2), 0, 3600)) => ()
case _ => assert(false, "DamageableEntity:handle taking damage - player not messaged")
@ -344,34 +344,34 @@ class DamageableEntityDamageTest extends ActorTest {
class DamageableEntityDestroyedTest extends ActorTest {
val guid = new NumberPoolHub(new MaxNumberSource(5))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
}
val avatarProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
zone.AvatarEvents = avatarProbe.ref
val activityProbe = TestProbe()
val activityProbe: TestProbe = TestProbe()
zone.Activity = activityProbe.ref
val mech = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) //guid=2
val mech: ImplantTerminalMech = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) //guid=2
mech.Position = Vector3(1, 0, 0)
mech.Actor = system.actorOf(Props(classOf[ImplantTerminalMechControl], mech), "mech-control")
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Position = Vector3(14, 0, 0) //<14m from generator; dies
player1.Spawn()
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val building: Building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
building.Position = Vector3(1, 0, 0)
building.Zone = zone
building.Amenities = mech
val buildingProbe = TestProbe()
val buildingProbe: TestProbe = TestProbe()
building.Actor = buildingProbe.ref
guid.register(building, 1)
guid.register(mech, 2)
guid.register(player1, 3)
val weapon = Tool(GlobalDefinitions.phoenix) //decimator
val projectile = weapon.Projectile
val resolved = DamageInteraction(
val weapon: Tool = Tool(GlobalDefinitions.phoenix) //decimator
val projectile: ProjectileDefinition = weapon.Projectile
val resolved: DamageInteraction = DamageInteraction(
SourceEntry(mech),
ProjectileReason(
DamageResolution.Hit,
@ -388,7 +388,7 @@ class DamageableEntityDestroyedTest extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
expectNoMessage(200 milliseconds)
//we're not testing that the math is correct
@ -420,14 +420,14 @@ class DamageableEntityDestroyedTest extends ActorTest {
class DamageableEntityNotDestroyTwice extends ActorTest {
val guid = new NumberPoolHub(new MaxNumberSource(10))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
}
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val gen = Generator(GlobalDefinitions.generator) //guid=2
val player1 =
val building: Building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val gen: Generator = Generator(GlobalDefinitions.generator) //guid=2
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn()
guid.register(building, 1)
@ -438,16 +438,16 @@ class DamageableEntityNotDestroyTwice extends ActorTest {
building.Amenities = gen
gen.Position = Vector3(1, 0, 0)
gen.Actor = system.actorOf(Props(classOf[GeneratorControl], gen), "generator-control")
val activityProbe = TestProbe()
val avatarProbe = TestProbe()
val buildingProbe = TestProbe()
val activityProbe: TestProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val buildingProbe: TestProbe = TestProbe()
zone.Activity = activityProbe.ref
zone.AvatarEvents = avatarProbe.ref
building.Actor = buildingProbe.ref
val weapon = Tool(GlobalDefinitions.phoenix) //decimator
val projectile = weapon.Projectile
val resolved = DamageInteraction(
val weapon: Tool = Tool(GlobalDefinitions.phoenix) //decimator
val projectile: ProjectileDefinition = weapon.Projectile
val resolved: DamageInteraction = DamageInteraction(
SourceEntry(gen),
ProjectileReason(
DamageResolution.Hit,
@ -464,7 +464,7 @@ class DamageableEntityNotDestroyTwice extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
expectNoMessage(200 milliseconds)
//we're not testing that the math is correct
@ -493,20 +493,20 @@ class DamageableEntityNotDestroyTwice extends ActorTest {
class DamageableAmenityTest extends ActorTest {
val guid = new NumberPoolHub(new MaxNumberSource(10))
val activityProbe = TestProbe()
val avatarProbe = TestProbe()
val buildingProbe = TestProbe()
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val activityProbe: TestProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val buildingProbe: TestProbe = TestProbe()
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
override def AvatarEvents: ActorRef = avatarProbe.ref
override def Activity: ActorRef = activityProbe.ref
GUID(guid)
}
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val term = Terminal(GlobalDefinitions.order_terminal) //guid=2
val player1 =
val building: Building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val term: Terminal = Terminal(GlobalDefinitions.order_terminal) //guid=2
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn()
guid.register(building, 1)
@ -520,9 +520,9 @@ class DamageableAmenityTest extends ActorTest {
term.Actor = system.actorOf(Props(classOf[TerminalControl], term), "terminal-control")
building.Actor = buildingProbe.ref
val weapon = Tool(GlobalDefinitions.phoenix) //decimator
val projectile = weapon.Projectile
val resolved = DamageInteraction(
val weapon: Tool = Tool(GlobalDefinitions.phoenix) //decimator
val projectile: ProjectileDefinition = weapon.Projectile
val resolved: DamageInteraction = DamageInteraction(
SourceEntry(term),
ProjectileReason(
DamageResolution.Hit,
@ -539,7 +539,7 @@ class DamageableAmenityTest extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
expectNoMessage(200 milliseconds)
//we're not testing that the math is correct
@ -577,19 +577,19 @@ class DamageableAmenityTest extends ActorTest {
class DamageableMountableDamageTest extends ActorTest {
//TODO this test with not send HitHint packets because LivePlayers is not being allocated for the players in the zone
val guid = new NumberPoolHub(new MaxNumberSource(10))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
}
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val mech = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) //guid=2
val player1 =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
val building: Building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val mech: ImplantTerminalMech = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) //guid=2
val player1: Player = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Zone = zone
player1.Spawn()
player1.Position = Vector3(2, 2, 2)
val player2 =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
val player2: Player = Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Zone = zone
player2.Spawn()
guid.register(building, 1)
guid.register(mech, 2)
@ -600,16 +600,16 @@ class DamageableMountableDamageTest extends ActorTest {
building.Amenities = mech
mech.Position = Vector3(1, 0, 0)
mech.Actor = system.actorOf(Props(classOf[ImplantTerminalMechControl], mech), "mech-control")
val activityProbe = TestProbe()
val avatarProbe = TestProbe()
val buildingProbe = TestProbe()
val activityProbe: TestProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val buildingProbe: TestProbe = TestProbe()
zone.Activity = activityProbe.ref
zone.AvatarEvents = avatarProbe.ref
building.Actor = buildingProbe.ref
val weapon = Tool(GlobalDefinitions.phoenix) //decimator
val projectile = weapon.Projectile
val resolved = DamageInteraction(
val weapon: Tool = Tool(GlobalDefinitions.phoenix) //decimator
val projectile: ProjectileDefinition = weapon.Projectile
val resolved: DamageInteraction = DamageInteraction(
SourceEntry(mech),
ProjectileReason(
DamageResolution.Hit,
@ -626,7 +626,7 @@ class DamageableMountableDamageTest extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
mech.Seats(0).mount(player2) //mount the player
player2.VehicleSeated = Some(mech.GUID) //mount the player
expectNoMessage(200 milliseconds)
@ -637,8 +637,8 @@ class DamageableMountableDamageTest extends ActorTest {
assert(mech.Health == mech.Definition.DefaultHealth)
mech.Actor ! Vitality.Damage(applyDamageTo)
val msg1_3 = avatarProbe.receiveN(2, 500 milliseconds)
val msg2 = activityProbe.receiveOne(500 milliseconds)
val msg1_3 = avatarProbe.receiveN(2, 5000 milliseconds)
val msg2 = activityProbe.receiveOne(5000 milliseconds)
assert(
msg1_3.head match {
case AvatarServiceMessage("test", AvatarAction.PlanetsideAttributeToAll(PlanetSideGUID(2), 0, _)) => true
@ -671,25 +671,25 @@ class DamageableMountableDamageTest extends ActorTest {
class DamageableMountableDestroyTest extends ActorTest {
//TODO this test with not send HitHint packets because LivePlayers is not being allocated for the players in the zone
val guid = new NumberPoolHub(new MaxNumberSource(10))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
}
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val mech = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) //guid=2
val player1 = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
val building: Building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val mech: ImplantTerminalMech = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) //guid=2
val player1: Player = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
mech.Zone = zone
player1.Spawn()
player1.Zone = zone
player1.Position = Vector3(2, 2, 2)
val player1Probe = TestProbe()
val player1Probe: TestProbe = TestProbe()
player1.Actor = player1Probe.ref
val player2 =
val player2: Player =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Spawn()
player2.Zone = zone
val player2Probe = TestProbe()
val player2Probe: TestProbe = TestProbe()
player2.Actor = player2Probe.ref
guid.register(building, 1)
guid.register(mech, 2)
@ -700,16 +700,16 @@ class DamageableMountableDestroyTest extends ActorTest {
building.Amenities = mech
mech.Position = Vector3(1, 0, 0)
mech.Actor = system.actorOf(Props(classOf[ImplantTerminalMechControl], mech), "mech-control")
val activityProbe = TestProbe()
val avatarProbe = TestProbe()
val buildingProbe = TestProbe()
val activityProbe: TestProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val buildingProbe: TestProbe = TestProbe()
zone.actor = ActorTestKit().createTestProbe[ZoneActor.Command]().ref
zone.Activity = activityProbe.ref
zone.AvatarEvents = avatarProbe.ref
building.Actor = buildingProbe.ref
val weapon = Tool(GlobalDefinitions.phoenix) //decimator
val projectile = weapon.Projectile
val resolved = DamageInteraction(
val weapon: Tool = Tool(GlobalDefinitions.phoenix) //decimator
val projectile: ProjectileDefinition = weapon.Projectile
val resolved: DamageInteraction = DamageInteraction(
SourceEntry(mech),
ProjectileReason(
DamageResolution.Hit,
@ -726,7 +726,7 @@ class DamageableMountableDestroyTest extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
mech.Seats(0).mount(player2) //mount the player
player2.VehicleSeated = Some(mech.GUID) //mount the player
expectNoMessage(200 milliseconds)
@ -752,8 +752,8 @@ class DamageableMountableDestroyTest extends ActorTest {
case _ => assert(false)
}
msg3 match {
case Player.Die(_) => true
case _ => assert(false)
case Player.Die(_) => ()
case _ => assert(false)
}
assert(mech.Health <= mech.Definition.DamageDestroysAt)
assert(mech.Destroyed)
@ -763,13 +763,13 @@ class DamageableMountableDestroyTest extends ActorTest {
class DamageableWeaponTurretDamageTest extends ActorTest {
val guid = new NumberPoolHub(new MaxNumberSource(10))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
}
val activityProbe = TestProbe()
val avatarProbe = TestProbe()
val vehicleProbe = TestProbe()
val activityProbe: TestProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val vehicleProbe: TestProbe = TestProbe()
zone.actor = ActorTestKit().createTestProbe[ZoneActor.Command]().ref
zone.Activity = activityProbe.ref
zone.AvatarEvents = avatarProbe.ref
@ -779,17 +779,17 @@ class DamageableWeaponTurretDamageTest extends ActorTest {
turret.Zone = zone
turret.Position = Vector3(1, 0, 0)
turret.LogActivity(SpawningActivity(SourceEntry(turret), zone.Number, None)) //seed a spawn event
val tSource = SourceEntry(turret)
val player1 =
val tSource: SourceEntry = SourceEntry(turret)
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn()
player1.Position = Vector3(2, 2, 2)
val player1Probe = TestProbe()
val player1Probe: TestProbe = TestProbe()
player1.Actor = player1Probe.ref
val player2 =
val player2: Player =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Spawn()
val player2Probe = TestProbe()
val player2Probe: TestProbe = TestProbe()
player2.Actor = player2Probe.ref
guid.register(turret, 2)
guid.register(player1, 3)
@ -797,10 +797,10 @@ class DamageableWeaponTurretDamageTest extends ActorTest {
turret.Seats(0).mount(player2)
player2.VehicleSeated = turret.GUID
val weapon = Tool(GlobalDefinitions.suppressor)
val projectile = weapon.Projectile
val pSource = PlayerSource(player1)
val resolved = DamageInteraction(
val weapon: Tool = Tool(GlobalDefinitions.suppressor)
val projectile: ProjectileDefinition = weapon.Projectile
val pSource: PlayerSource = PlayerSource(player1)
val resolved: DamageInteraction = DamageInteraction(
tSource,
ProjectileReason(
DamageResolution.Hit,
@ -817,7 +817,7 @@ class DamageableWeaponTurretDamageTest extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
expectNoMessage(200 milliseconds)
//we're not testing that the math is correct
@ -861,13 +861,13 @@ class DamageableWeaponTurretDamageTest extends ActorTest {
class DamageableWeaponTurretJammerTest extends ActorTest {
val guid = new NumberPoolHub(new MaxNumberSource(10))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
}
val activityProbe = TestProbe()
val avatarProbe = TestProbe()
val vehicleProbe = TestProbe()
val activityProbe: TestProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val vehicleProbe: TestProbe = TestProbe()
zone.Activity = activityProbe.ref
zone.AvatarEvents = avatarProbe.ref
zone.VehicleEvents = vehicleProbe.ref
@ -876,18 +876,18 @@ class DamageableWeaponTurretJammerTest extends ActorTest {
turret.Actor = system.actorOf(Props(classOf[TurretControl], turret), "turret-control")
turret.Zone = zone
turret.Position = Vector3(1, 0, 0)
val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool]
val turretWeapon: Tool = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool]
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn()
player1.Position = Vector3(2, 2, 2)
val player1Probe = TestProbe()
val player1Probe: TestProbe = TestProbe()
player1.Actor = player1Probe.ref
val player2 =
val player2: Player =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Spawn()
val player2Probe = TestProbe()
val player2Probe: TestProbe = TestProbe()
player2.Actor = player2Probe.ref
guid.register(turret, 2)
@ -898,10 +898,10 @@ class DamageableWeaponTurretJammerTest extends ActorTest {
turret.Seats(0).mount(player2)
player2.VehicleSeated = turret.GUID
val weapon = Tool(GlobalDefinitions.jammer_grenade)
val projectile = weapon.Projectile
val turretSource = SourceEntry(turret)
val resolved = DamageInteraction(
val weapon: Tool = Tool(GlobalDefinitions.jammer_grenade)
val projectile: ProjectileDefinition = weapon.Projectile
val turretSource: SourceEntry = SourceEntry(turret)
val resolved: DamageInteraction = DamageInteraction(
turretSource,
ProjectileReason(
DamageResolution.Hit,
@ -918,7 +918,7 @@ class DamageableWeaponTurretJammerTest extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
expectNoMessage(200 milliseconds)
//we're not testing that the math is correct
@ -958,15 +958,15 @@ class DamageableWeaponTurretJammerTest extends ActorTest {
class DamageableWeaponTurretDestructionTest extends ActorTest {
val guid = new NumberPoolHub(new MaxNumberSource(10))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
}
val building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val activityProbe = TestProbe()
val avatarProbe = TestProbe()
val vehicleProbe = TestProbe()
val buildingProbe = TestProbe()
val building: Building = Building("test-building", 1, 1, zone, StructureType.Facility) //guid=1
val activityProbe: TestProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val vehicleProbe: TestProbe = TestProbe()
val buildingProbe: TestProbe = TestProbe()
zone.actor = ActorTestKit().createTestProbe[ZoneActor.Command]().ref
zone.Activity = activityProbe.ref
zone.AvatarEvents = avatarProbe.ref
@ -977,18 +977,18 @@ class DamageableWeaponTurretDestructionTest extends ActorTest {
turret.Actor = system.actorOf(Props(classOf[FacilityTurretControl], turret), "turret-control")
turret.Zone = zone
turret.Position = Vector3(1, 0, 0)
val turretWeapon = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool]
val turretWeapon: Tool = turret.Weapons.values.head.Equipment.get.asInstanceOf[Tool]
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player1.Spawn()
player1.Position = Vector3(2, 2, 2)
val player1Probe = TestProbe()
val player1Probe: TestProbe = TestProbe()
player1.Actor = player1Probe.ref
val player2 =
val player2: Player =
Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
player2.Spawn()
val player2Probe = TestProbe()
val player2Probe: TestProbe = TestProbe()
player2.Actor = player2Probe.ref
guid.register(building, 1)
@ -1003,11 +1003,11 @@ class DamageableWeaponTurretDestructionTest extends ActorTest {
building.Zone = zone
building.Amenities = turret
val turretSource = SourceEntry(turret)
val turretSource: SourceEntry = SourceEntry(turret)
//turret.History(EntitySpawn(turretSource, zone)) //seed a spawn event
val weaponA = Tool(GlobalDefinitions.jammer_grenade)
val projectileA = weaponA.Projectile
val resolvedA = DamageInteraction(
val weaponA: Tool = Tool(GlobalDefinitions.jammer_grenade)
val projectileA: ProjectileDefinition = weaponA.Projectile
val resolvedA: DamageInteraction = DamageInteraction(
turretSource,
ProjectileReason(
DamageResolution.Hit,
@ -1024,11 +1024,11 @@ class DamageableWeaponTurretDestructionTest extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageToA = resolvedA.calculate()
val applyDamageToA: Output = resolvedA.calculate()
val weaponB = Tool(GlobalDefinitions.phoenix) //decimator
val projectileB = weaponB.Projectile
val resolvedB = DamageInteraction(
val weaponB: Tool = Tool(GlobalDefinitions.phoenix) //decimator
val projectileB: ProjectileDefinition = weaponB.Projectile
val resolvedB: DamageInteraction = DamageInteraction(
turretSource,
ProjectileReason(
@ -1046,7 +1046,7 @@ class DamageableWeaponTurretDestructionTest extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageToB = resolvedB.calculate()
val applyDamageToB: Output = resolvedB.calculate()
expectNoMessage(200 milliseconds)
//we're not testing that the math is correct
@ -1080,7 +1080,7 @@ class DamageableWeaponTurretDestructionTest extends ActorTest {
assert(false, s"DamageableWeaponTurretDestructionTest-2: ${msg12_4(1)}")
}
msg3 match {
case Player.Die(_) => true
case Player.Die(_) => ()
case _ =>
assert(false, s"DamageableWeaponTurretDestructionTest-3: player not dead - $msg3")
}
@ -1095,10 +1095,8 @@ class DamageableWeaponTurretDestructionTest extends ActorTest {
assert(false, s"DamageableWeaponTurretDestructionTest-5: ${msg56.head}")
}
msg56(1) match {
case VehicleServiceMessage.TurretUpgrade(TurretUpgrader.AddTask(t, _, TurretUpgrade.None, _)) if t eq turret => ;
true
case _ =>
assert(false, s"DamageableWeaponTurretDestructionTest-6: ${msg56(1)}")
case VehicleServiceMessage.TurretUpgrade(TurretUpgrader.AddTask(t, _, TurretUpgrade.None, _)) if t eq turret => ()
case _ => assert(false, s"DamageableWeaponTurretDestructionTest-6: ${msg56(1)}")
}
assert(turret.Health <= turret.Definition.DamageDestroysAt)
assert(!turret.Jammed)
@ -1109,33 +1107,33 @@ class DamageableWeaponTurretDestructionTest extends ActorTest {
class DamageableVehicleDamageTest extends ActorTest {
val guid = new NumberPoolHub(new MaxNumberSource(10))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
}
val activityProbe = TestProbe()
val avatarProbe = TestProbe()
val vehicleProbe = TestProbe()
val activityProbe: TestProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val vehicleProbe: TestProbe = TestProbe()
zone.actor = ActorTestKit().createTestProbe[ZoneActor.Command]().ref
zone.Activity = activityProbe.ref
zone.AvatarEvents = avatarProbe.ref
zone.VehicleEvents = vehicleProbe.ref
val atv = Vehicle(GlobalDefinitions.quadstealth) //guid=1
val atv: Vehicle = Vehicle(GlobalDefinitions.quadstealth) //guid=1
atv.Actor = system.actorOf(Props(classOf[VehicleControl], atv), "vehicle-control")
atv.Position = Vector3(1, 0, 0)
//atv.History(EntitySpawn(turretSource, zone)) //seed a spawn event
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
player1.Spawn()
player1.Position = Vector3(2, 0, 0)
val player1Probe = TestProbe()
val player1Probe: TestProbe = TestProbe()
player1.Actor = player1Probe.ref
val player2 =
val player2: Player =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player2.Spawn()
val player2Probe = TestProbe()
val player2Probe: TestProbe = TestProbe()
player2.Actor = player2Probe.ref
guid.register(atv, 1)
@ -1145,11 +1143,11 @@ class DamageableVehicleDamageTest extends ActorTest {
atv.Seats(0).mount(player2)
player2.VehicleSeated = atv.GUID
val weapon = Tool(GlobalDefinitions.suppressor)
val projectile = weapon.Projectile
val pSource = PlayerSource(player1)
val vehicleSource = SourceEntry(atv)
val resolved = DamageInteraction(
val weapon: Tool = Tool(GlobalDefinitions.suppressor)
val projectile: ProjectileDefinition = weapon.Projectile
val pSource: PlayerSource = PlayerSource(player1)
val vehicleSource: SourceEntry = SourceEntry(atv)
val resolved: DamageInteraction = DamageInteraction(
vehicleSource,
ProjectileReason(
DamageResolution.Hit,
@ -1166,7 +1164,7 @@ class DamageableVehicleDamageTest extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
expectNoMessage(200 milliseconds)
//we're not testing that the math is correct
@ -1219,13 +1217,13 @@ class DamageableVehicleDamageTest extends ActorTest {
class DamageableVehicleDamageMountedTest extends FreedContextActorTest {
val guid = new NumberPoolHub(new MaxNumberSource(15))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
}
val activityProbe = TestProbe()
val avatarProbe = TestProbe()
val vehicleProbe = TestProbe()
val activityProbe: TestProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val vehicleProbe: TestProbe = TestProbe()
zone.actor = ActorTestKit().createTestProbe[ZoneActor.Command]().ref
zone.Activity = activityProbe.ref
zone.AvatarEvents = avatarProbe.ref
@ -1233,28 +1231,28 @@ class DamageableVehicleDamageMountedTest extends FreedContextActorTest {
import akka.actor.typed.scaladsl.adapter._
zone.actor = new TestProbe(system).ref.toTyped[ZoneActor.Command]
val lodestar = Vehicle(GlobalDefinitions.lodestar) //guid=1 & 4,5,6,7,8,9
val lodestar: Vehicle = Vehicle(GlobalDefinitions.lodestar) //guid=1 & 4,5,6,7,8,9
lodestar.Position = Vector3(1, 0, 0)
//lodestar.History(EntitySpawn(VehicleSource(lodestar), zone)) //seed a spawn event
val atv = Vehicle(GlobalDefinitions.quadstealth) //guid=11
val atv: Vehicle = Vehicle(GlobalDefinitions.quadstealth) //guid=11
atv.Position = Vector3(1, 0, 0)
atv.Actor = system.actorOf(Props(classOf[VehicleControl], atv), "atv-control")
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
player1.Spawn()
player1.Position = Vector3(2, 0, 0)
val player1Probe = TestProbe()
val player1Probe: TestProbe = TestProbe()
player1.Actor = player1Probe.ref
val player2 =
val player2: Player =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player2.Spawn()
val player2Probe = TestProbe()
val player2Probe: TestProbe = TestProbe()
player2.Actor = player2Probe.ref
val player3 =
val player3: Player =
Player(Avatar(0, "TestCharacter3", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=10
player3.Spawn()
val player3Probe = TestProbe()
val player3Probe: TestProbe = TestProbe()
player3.Actor = player3Probe.ref
guid.register(lodestar, 1)
@ -1280,11 +1278,11 @@ class DamageableVehicleDamageMountedTest extends FreedContextActorTest {
lodestar.CargoHolds(1).mount(atv)
atv.MountedIn = lodestar.GUID
val weapon = Tool(GlobalDefinitions.phoenix) //decimator
val projectile = weapon.Projectile
val pSource = PlayerSource(player1)
val vSource = SourceEntry(lodestar)
val resolved = DamageInteraction(
val weapon: Tool = Tool(GlobalDefinitions.phoenix) //decimator
val projectile: ProjectileDefinition = weapon.Projectile
val pSource: PlayerSource = PlayerSource(player1)
val vSource: SourceEntry = SourceEntry(lodestar)
val resolved: DamageInteraction = DamageInteraction(
vSource,
ProjectileReason(
DamageResolution.Hit,
@ -1301,7 +1299,7 @@ class DamageableVehicleDamageMountedTest extends FreedContextActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
expectNoMessage(200 milliseconds)
//we're not testing that the math is correct
@ -1355,40 +1353,40 @@ class DamageableVehicleDamageMountedTest extends FreedContextActorTest {
class DamageableVehicleJammeringMountedTest extends FreedContextActorTest {
val guid = new NumberPoolHub(new MaxNumberSource(15))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
}
val activityProbe = TestProbe()
val avatarProbe = TestProbe()
val vehicleProbe = TestProbe()
val activityProbe: TestProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val vehicleProbe: TestProbe = TestProbe()
zone.Activity = activityProbe.ref
zone.AvatarEvents = avatarProbe.ref
zone.VehicleEvents = vehicleProbe.ref
val atv = Vehicle(GlobalDefinitions.quadassault) //guid=1
val atv: Vehicle = Vehicle(GlobalDefinitions.quadassault) //guid=1
atv.Actor = system.actorOf(Props(classOf[VehicleControl], atv), "atv-control")
atv.Position = Vector3(1, 0, 0)
val atvWeapon = atv.Weapons(1).Equipment.get.asInstanceOf[Tool] //guid=4 & 5
val atvWeapon: Tool = atv.Weapons(1).Equipment.get.asInstanceOf[Tool] //guid=4 & 5
val lodestar = Vehicle(GlobalDefinitions.lodestar) //guid=6
val lodestar: Vehicle = Vehicle(GlobalDefinitions.lodestar) //guid=6
lodestar.Position = Vector3(1, 0, 0)
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=7
player1.Spawn()
player1.Position = Vector3(2, 0, 0)
val player1Probe = TestProbe()
val player1Probe: TestProbe = TestProbe()
player1.Actor = player1Probe.ref
val player2 =
val player2: Player =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=8
player2.Spawn()
val player2Probe = TestProbe()
val player2Probe: TestProbe = TestProbe()
player2.Actor = player2Probe.ref
val player3 =
val player3: Player =
Player(Avatar(0, "TestCharacter3", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=9
player3.Spawn()
val player3Probe = TestProbe()
val player3Probe: TestProbe = TestProbe()
player3.Actor = player3Probe.ref
guid.register(atv, 1)
@ -1415,10 +1413,10 @@ class DamageableVehicleJammeringMountedTest extends FreedContextActorTest {
lodestar.CargoHolds(1).mount(atv)
atv.MountedIn = lodestar.GUID
val vehicleSource = SourceEntry(lodestar)
val weapon = Tool(GlobalDefinitions.jammer_grenade)
val projectile = weapon.Projectile
val resolved = DamageInteraction(
val vehicleSource: SourceEntry = SourceEntry(lodestar)
val weapon: Tool = Tool(GlobalDefinitions.jammer_grenade)
val projectile: ProjectileDefinition = weapon.Projectile
val resolved: DamageInteraction = DamageInteraction(
vehicleSource,
ProjectileReason(
DamageResolution.Hit,
@ -1435,7 +1433,7 @@ class DamageableVehicleJammeringMountedTest extends FreedContextActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
expectNoMessage(200 milliseconds)
//we're not testing that the math is correct
@ -1469,37 +1467,37 @@ class DamageableVehicleJammeringMountedTest extends FreedContextActorTest {
}
class DamageableVehicleDestroyTest extends ActorTest {
val activityProbe = TestProbe()
val avatarProbe = TestProbe()
val vehicleProbe = TestProbe()
val activityProbe: TestProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val vehicleProbe: TestProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(10))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
override def Activity = activityProbe.ref
override def AvatarEvents = avatarProbe.ref
override def VehicleEvents = vehicleProbe.ref
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
override def Activity: ActorRef = activityProbe.ref
override def AvatarEvents: ActorRef = avatarProbe.ref
override def VehicleEvents: ActorRef = vehicleProbe.ref
GUID(guid)
}
zone.actor = ActorTestKit().createTestProbe[ZoneActor.Command]().ref
val atv = Vehicle(GlobalDefinitions.quadassault) //guid=1
val atv: Vehicle = Vehicle(GlobalDefinitions.quadassault) //guid=1
atv.Actor = system.actorOf(Props(classOf[VehicleControl], atv), "vehicle-control")
atv.Zone = zone
atv.Position = Vector3(1, 0, 0)
val atvWeapon = atv.Weapons(1).Equipment.get.asInstanceOf[Tool] //guid=4 & 5
val atvWeapon: Tool = atv.Weapons(1).Equipment.get.asInstanceOf[Tool] //guid=4 & 5
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
player1.Spawn()
player1.Zone = zone
player1.Position = Vector3(2, 0, 0)
val player1Probe = TestProbe()
val player1Probe: TestProbe = TestProbe()
player1.Actor = player1Probe.ref
val player2 =
val player2: Player =
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
player2.Spawn()
val player2Probe = TestProbe()
val player2Probe: TestProbe = TestProbe()
player2.Zone = zone
player2.Actor = player2Probe.ref
@ -1511,10 +1509,10 @@ class DamageableVehicleDestroyTest extends ActorTest {
atv.Seats(0).mount(player2)
player2.VehicleSeated = atv.GUID
val weapon = Tool(GlobalDefinitions.suppressor)
val projectile = weapon.Projectile
val vehicleSource = SourceEntry(atv)
val resolved = DamageInteraction(
val weapon: Tool = Tool(GlobalDefinitions.suppressor)
val projectile: ProjectileDefinition = weapon.Projectile
val vehicleSource: SourceEntry = SourceEntry(atv)
val resolved: DamageInteraction = DamageInteraction(
vehicleSource,
ProjectileReason(
DamageResolution.Hit,
@ -1531,7 +1529,7 @@ class DamageableVehicleDestroyTest extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
expectNoMessage(200 milliseconds)
//we're not testing that the math is correct
@ -1558,10 +1556,6 @@ class DamageableVehicleDestroyTest extends ActorTest {
case Player.Die(_) => ()
case _ => assert(false)
}
// msg124(2) match {
// case AvatarServiceMessage("test", AvatarAction.ObjectDelete(PlanetSideGUID(0), PlanetSideGUID(4), _)) => ()
// case _ => assert(false)
// }
assert(atv.Health <= atv.Definition.DamageDestroysAt)
assert(atv.Destroyed)
//

View file

@ -449,8 +449,8 @@ class ExplosiveDeployableJammerExplodeTest extends ActorTest {
assert(!h_mine.Destroyed)
h_mine.Actor ! Vitality.Damage(applyDamageToH)
val eventMsgs = eventsProbe.receiveN(4, 200 milliseconds)
val p1Msgs = player1Probe.receiveN(1, 200 milliseconds)
val p1Msgs = player1Probe.receiveN(1, 5000 milliseconds)
val eventMsgs = eventsProbe.receiveN(3, 5000 milliseconds)
eventMsgs.head match {
case Zone.HotSpot.Conflict(target, attacker, _)
if (target.Definition eq h_mine.Definition) && (attacker eq pSource) => ()
@ -472,13 +472,6 @@ class ExplosiveDeployableJammerExplodeTest extends ActorTest {
) => ;
case _ => assert(false, "")
}
eventMsgs(3) match {
case AvatarServiceMessage(
"test",
AvatarAction.Destroy(PlanetSideGUID(2), PlanetSideGUID(3), Service.defaultPlayerGUID, Vector3.Zero)
) => ()
case _ => assert(false, "")
}
p1Msgs.head match {
case Vitality.Damage(_) => ()
case _ => assert(false, "")

View file

@ -1,13 +1,12 @@
// Copyright (c) 2020 PSForever
package objects
import akka.actor.{ActorRef => ClassicActorRef}
import akka.actor.typed.ActorRef
import akka.actor.{ActorSystem, Props}
import akka.actor.typed.scaladsl.adapter._
import akka.testkit.TestProbe
import base.ActorTest
import net.psforever.actors.session.AvatarActor
import net.psforever.actors.zone.ZoneActor
import net.psforever.objects.avatar.{Avatar, Certification, PlayerControl}
import net.psforever.objects.ballistics._
import net.psforever.objects.guid.NumberPoolHub
@ -15,6 +14,7 @@ import net.psforever.objects.guid.source.MaxNumberSource
import net.psforever.objects.vital.{SpawningActivity, Vitality}
import net.psforever.objects.zones.{Zone, ZoneMap}
import net.psforever.objects._
import net.psforever.objects.definition.ProjectileDefinition
import net.psforever.objects.serverobject.CommonMessages
import net.psforever.objects.serverobject.environment.interaction.common.Watery.OxygenStateTarget
import net.psforever.objects.serverobject.environment.{DeepSquare, EnvironmentAttribute, Pool}
@ -22,6 +22,7 @@ import net.psforever.objects.sourcing.{PlayerSource, SourceEntry}
import net.psforever.objects.vital.base.DamageResolution
import net.psforever.objects.vital.interaction.DamageInteraction
import net.psforever.objects.vital.projectile.ProjectileReason
import net.psforever.objects.vital.resolution.ResolutionCalculations.Output
import net.psforever.packet.game._
import net.psforever.types._
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
@ -29,17 +30,17 @@ import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import scala.concurrent.duration._
class PlayerControlHealTest extends ActorTest {
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val player2 =
val player2: Player =
Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
val avatarProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
override def LivePlayers = List(player1, player2)
override def AvatarEvents = avatarProbe.ref
override def LivePlayers: List[Player] = List(player1, player2)
override def AvatarEvents: ClassicActorRef = avatarProbe.ref
}
player1.Zone = zone
@ -52,7 +53,7 @@ class PlayerControlHealTest extends ActorTest {
guid.register(player2.avatar.locker, 6)
player2.Actor = system.actorOf(Props(classOf[PlayerControl], player2, null), "player2-control")
val tool = Tool(GlobalDefinitions.medicalapplicator) //guid=3 & 4
val tool: Tool = Tool(GlobalDefinitions.medicalapplicator) //guid=3 & 4
guid.register(player1, 1)
guid.register(player2, 2)
guid.register(tool, 3)
@ -114,15 +115,15 @@ class PlayerControlHealTest extends ActorTest {
}
}
class PlayerControlHealSelfTest extends ActorTest {
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
override def LivePlayers = List(player1)
override def AvatarEvents = avatarProbe.ref
override def LivePlayers: List[Player] = List(player1)
override def AvatarEvents: ClassicActorRef = avatarProbe.ref
}
player1.Zone = zone
@ -131,7 +132,7 @@ class PlayerControlHealSelfTest extends ActorTest {
guid.register(player1.avatar.locker, 5)
player1.Actor = system.actorOf(Props(classOf[PlayerControl], player1, null), "player1-control")
val tool = Tool(GlobalDefinitions.medicalapplicator) //guid=3 & 4
val tool: Tool = Tool(GlobalDefinitions.medicalapplicator) //guid=3 & 4
guid.register(player1, 1)
guid.register(tool, 3)
guid.register(tool.AmmoSlot.Box, 4)
@ -189,18 +190,18 @@ class PlayerControlHealSelfTest extends ActorTest {
}
class PlayerControlRepairTest extends ActorTest {
val avatar = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
val avatar: Avatar = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
.copy(certifications = Set(Certification.Engineering))
val player1 = Player(avatar) //guid=1
val player2 =
val player1: Player = Player(avatar) //guid=1
val player2: Player =
Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
val avatarProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
override def LivePlayers = List(player1, player2)
override def AvatarEvents = avatarProbe.ref
override def LivePlayers: List[Player] = List(player1, player2)
override def AvatarEvents: ClassicActorRef = avatarProbe.ref
}
player1.Zone = zone
@ -213,7 +214,7 @@ class PlayerControlRepairTest extends ActorTest {
guid.register(player2.avatar.locker, 6)
player2.Actor = system.actorOf(Props(classOf[PlayerControl], player2, null), "player2-control")
val tool = Tool(GlobalDefinitions.bank) //guid=3 & 4
val tool: Tool = Tool(GlobalDefinitions.bank) //guid=3 & 4
guid.register(player1, 1)
guid.register(player2, 2)
guid.register(tool, 3)
@ -286,16 +287,16 @@ class PlayerControlRepairTest extends ActorTest {
}
class PlayerControlRepairSelfTest extends ActorTest {
val avatar = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
val avatar: Avatar = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
.copy(certifications = Set(Certification.Engineering))
val player1 = Player(avatar) //guid=1
val avatarProbe = TestProbe()
val player1: Player = Player(avatar) //guid=1
val avatarProbe: TestProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
override def LivePlayers = List(player1)
override def AvatarEvents = avatarProbe.ref
override def LivePlayers: List[Player] = List(player1)
override def AvatarEvents: ClassicActorRef = avatarProbe.ref
}
player1.Zone = zone
@ -304,7 +305,7 @@ class PlayerControlRepairSelfTest extends ActorTest {
guid.register(player1.avatar.locker, 5)
player1.Actor = system.actorOf(Props(classOf[PlayerControl], player1, null), "player1-control")
val tool = Tool(GlobalDefinitions.bank) //guid=3 & 4
val tool: Tool = Tool(GlobalDefinitions.bank) //guid=3 & 4
guid.register(player1, 1)
guid.register(tool, 3)
guid.register(tool.AmmoSlot.Box, 4)
@ -362,19 +363,19 @@ class PlayerControlRepairSelfTest extends ActorTest {
}
class PlayerControlDamageTest extends ActorTest {
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val player2 =
val player2: Player =
Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
val avatarProbe = TestProbe()
val activityProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val activityProbe: TestProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
override def LivePlayers = List(player1, player2)
override def AvatarEvents = avatarProbe.ref
override def Activity = activityProbe.ref
override def LivePlayers: List[Player] = List(player1, player2)
override def AvatarEvents: ClassicActorRef = avatarProbe.ref
override def Activity: ClassicActorRef = activityProbe.ref
}
player1.Zone = zone
@ -388,10 +389,10 @@ class PlayerControlDamageTest extends ActorTest {
val (probe, avatarActor) = PlayerControlTest.DummyAvatar(system)
player2.Actor = system.actorOf(Props(classOf[PlayerControl], player2, avatarActor), name = "player2-control")
val tool = Tool(GlobalDefinitions.suppressor) //guid 3 & 4
val projectile = tool.Projectile
val player1Source = PlayerSource(player1)
val resolved = DamageInteraction(
val tool: Tool = Tool(GlobalDefinitions.suppressor) //guid 3 & 4
val projectile: ProjectileDefinition = tool.Projectile
val player1Source: PlayerSource = PlayerSource(player1)
val resolved: DamageInteraction = DamageInteraction(
SourceEntry(player2),
ProjectileReason(
DamageResolution.Hit,
@ -408,7 +409,7 @@ class PlayerControlDamageTest extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
guid.register(player1, 1)
guid.register(player2, 2)
guid.register(tool, 3)
@ -467,19 +468,19 @@ class PlayerControlDamageTest extends ActorTest {
}
class PlayerControlDeathStandingTest extends ActorTest {
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val player2 =
val player2: Player =
Player(Avatar(1, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=2
val avatarProbe = TestProbe()
val activityProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val activityProbe: TestProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15))
val zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools() = {}
val zone: Zone = new Zone("test", new ZoneMap("test"), 0) {
override def SetupNumberPools(): Unit = {}
GUID(guid)
override def LivePlayers = List(player1, player2)
override def AvatarEvents = avatarProbe.ref
override def Activity = activityProbe.ref
override def LivePlayers: List[Player] = List(player1, player2)
override def AvatarEvents: ClassicActorRef = avatarProbe.ref
override def Activity: ClassicActorRef = activityProbe.ref
}
player1.Zone = zone
@ -493,10 +494,10 @@ class PlayerControlDeathStandingTest extends ActorTest {
val (probe, avatarActor) = PlayerControlTest.DummyAvatar(system)
player2.Actor = system.actorOf(Props(classOf[PlayerControl], player2, avatarActor), name = "player2-control")
val tool = Tool(GlobalDefinitions.suppressor) //guid 3 & 4
val projectile = tool.Projectile
val player1Source = PlayerSource(player1)
val resolved = DamageInteraction(
val tool: Tool = Tool(GlobalDefinitions.suppressor) //guid 3 & 4
val projectile: ProjectileDefinition = tool.Projectile
val player1Source: PlayerSource = PlayerSource(player1)
val resolved: DamageInteraction = DamageInteraction(
SourceEntry(player2),
ProjectileReason(
DamageResolution.Hit,
@ -513,7 +514,7 @@ class PlayerControlDeathStandingTest extends ActorTest {
),
Vector3(1, 0, 0)
)
val applyDamageTo = resolved.calculate()
val applyDamageTo: Output = resolved.calculate()
guid.register(player1, 1)
guid.register(player2, 2)
guid.register(tool, 3)
@ -774,22 +775,22 @@ class PlayerControlDeathStandingTest extends ActorTest {
//}
class PlayerControlInteractWithWaterTest extends ActorTest {
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15))
val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0))
val zone = new Zone(
val pool: Pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0))
val zone: Zone = new Zone(
id = "test",
new ZoneMap(name = "test-map") {
environment = List(pool)
},
zoneNumber = 0
) {
override def SetupNumberPools() = {}
override def SetupNumberPools(): Unit = {}
GUID(guid)
override def LivePlayers = List(player1)
override def AvatarEvents = avatarProbe.ref
override def LivePlayers: List[Player] = List(player1)
override def AvatarEvents: ClassicActorRef = avatarProbe.ref
}
zone.blockMap.addTo(player1)
zone.blockMap.addTo(pool)
@ -828,22 +829,22 @@ class PlayerControlInteractWithWaterTest extends ActorTest {
}
class PlayerControlStopInteractWithWaterTest extends ActorTest {
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15))
val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0))
val zone = new Zone(
val pool: Pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0))
val zone: Zone = new Zone(
id = "test",
new ZoneMap(name = "test-map") {
environment = List(pool)
},
zoneNumber = 0
) {
override def SetupNumberPools() = {}
override def SetupNumberPools(): Unit = {}
GUID(guid)
override def LivePlayers = List(player1)
override def AvatarEvents = avatarProbe.ref
override def LivePlayers: List[Player] = List(player1)
override def AvatarEvents: ClassicActorRef = avatarProbe.ref
}
zone.blockMap.addTo(player1)
zone.blockMap.addTo(pool)
@ -893,23 +894,23 @@ class PlayerControlStopInteractWithWaterTest extends ActorTest {
}
class PlayerControlInteractWithLavaTest extends ActorTest {
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15))
val pool = Pool(EnvironmentAttribute.Lava, DeepSquare(-1, 10, 10, 0, 0))
val zone = new Zone(
val pool: Pool = Pool(EnvironmentAttribute.Lava, DeepSquare(-1, 10, 10, 0, 0))
val zone: Zone = new Zone(
id = "test-map",
new ZoneMap(name = "test-map") {
environment = List(pool)
},
zoneNumber = 0
) {
override def SetupNumberPools() = {}
override def SetupNumberPools(): Unit = {}
GUID(guid)
override def LivePlayers = List(player1)
override def AvatarEvents = avatarProbe.ref
override def Activity = TestProbe().ref
override def LivePlayers: List[Player] = List(player1)
override def AvatarEvents: ClassicActorRef = avatarProbe.ref
override def Activity: ClassicActorRef = TestProbe().ref
}
zone.blockMap.addTo(player1)
zone.blockMap.addTo(pool)
@ -955,23 +956,23 @@ class PlayerControlInteractWithLavaTest extends ActorTest {
}
class PlayerControlInteractWithDeathTest extends ActorTest {
val player1 =
val player1: Player =
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=1
val avatarProbe = TestProbe()
val avatarProbe: TestProbe = TestProbe()
val guid = new NumberPoolHub(new MaxNumberSource(15))
val pool = Pool(EnvironmentAttribute.Death, DeepSquare(10, 10, 10, 0, 0))
val zone = new Zone(
val pool: Pool = Pool(EnvironmentAttribute.Death, DeepSquare(10, 10, 10, 0, 0))
val zone: Zone = new Zone(
id = "test-map",
new ZoneMap(name = "test-map") {
environment = List(pool)
},
zoneNumber = 0
) {
override def SetupNumberPools() = {}
override def SetupNumberPools(): Unit = {}
GUID(guid)
override def LivePlayers = List(player1)
override def AvatarEvents = avatarProbe.ref
override def Activity = TestProbe().ref
override def LivePlayers: List[Player] = List(player1)
override def Activity: ClassicActorRef = TestProbe().ref
override def AvatarEvents: ClassicActorRef = avatarProbe.ref
}
guid.register(player1, 1)
guid.register(player1.avatar.locker, 5)
@ -988,8 +989,9 @@ class PlayerControlInteractWithDeathTest extends ActorTest {
"PlayerControl" should {
"kill the player if that player steps into a pool of death" in {
assert(player1.Health == 100) //alive
probe.expectNoMessage(6.seconds)
probe.expectNoMessage(5.seconds)
player1.zoneInteractions() //trigger
probe.receiveOne(3.seconds)
assert(player1.Health == 0) //ded
}
}