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() startHeartbeat()
case SessionActor.PokeClient => case SessionActor.PokeClient =>
middlewareActor ! MiddlewareActor.Send(KeepAliveMessage()) pokeClient()
case SessionActor.SetMode(newMode) => case SessionActor.SetMode(newMode) =>
if (mode != newMode) { changeMode(newMode)
logic.switchFrom(data.session)
mode = newMode
logic = mode.setup(data)
}
logic.switchTo(data.session)
case packet => case packet =>
parse(sender())(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 = { private def parse(sender: ActorRef): Receive = {
/* really common messages (very frequently, every life) */ /* really common messages (very frequently, every life) */
case packet: PlanetSideGamePacket => case packet: PlanetSideGamePacket =>

View file

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

View file

@ -449,8 +449,8 @@ class ExplosiveDeployableJammerExplodeTest extends ActorTest {
assert(!h_mine.Destroyed) assert(!h_mine.Destroyed)
h_mine.Actor ! Vitality.Damage(applyDamageToH) h_mine.Actor ! Vitality.Damage(applyDamageToH)
val eventMsgs = eventsProbe.receiveN(4, 200 milliseconds) val p1Msgs = player1Probe.receiveN(1, 5000 milliseconds)
val p1Msgs = player1Probe.receiveN(1, 200 milliseconds) val eventMsgs = eventsProbe.receiveN(3, 5000 milliseconds)
eventMsgs.head match { eventMsgs.head match {
case Zone.HotSpot.Conflict(target, attacker, _) case Zone.HotSpot.Conflict(target, attacker, _)
if (target.Definition eq h_mine.Definition) && (attacker eq pSource) => () if (target.Definition eq h_mine.Definition) && (attacker eq pSource) => ()
@ -472,13 +472,6 @@ class ExplosiveDeployableJammerExplodeTest extends ActorTest {
) => ; ) => ;
case _ => assert(false, "") 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 { p1Msgs.head match {
case Vitality.Damage(_) => () case Vitality.Damage(_) => ()
case _ => assert(false, "") case _ => assert(false, "")

View file

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