mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-02-08 03:11:00 +00:00
131 lines
5 KiB
Scala
131 lines
5 KiB
Scala
// Copyright (c) 2017 PSForever
|
|
package objects
|
|
|
|
import akka.actor.{Actor, ActorSystem, Props}
|
|
import net.psforever.objects.{GlobalDefinitions, Vehicle}
|
|
import net.psforever.objects.serverobject.affinity.FactionAffinity
|
|
import net.psforever.objects.serverobject.doors.Door
|
|
import net.psforever.objects.serverobject.structures.{Building, StructureType}
|
|
import net.psforever.objects.zones.Zone
|
|
import net.psforever.types.PlanetSideEmpire
|
|
import org.specs2.mutable.Specification
|
|
|
|
import scala.concurrent.duration.Duration
|
|
|
|
class FactionAffinityTest extends Specification {
|
|
"FactionAffinity" should {
|
|
"construct (basic)" in {
|
|
val obj = new FactionAffinity { def Faction = PlanetSideEmpire.TR }
|
|
obj.Faction mustEqual PlanetSideEmpire.TR
|
|
}
|
|
|
|
"construct (part of)" in {
|
|
val obj = new Door(GlobalDefinitions.door)
|
|
obj.Faction mustEqual PlanetSideEmpire.NEUTRAL
|
|
}
|
|
|
|
"can not change affinity directly (basic)" in {
|
|
val obj = new FactionAffinity { def Faction = PlanetSideEmpire.TR }
|
|
(obj.Faction = PlanetSideEmpire.NC) mustEqual PlanetSideEmpire.TR
|
|
}
|
|
|
|
"can not change affinity directly (part of)" in {
|
|
val obj = new Door(GlobalDefinitions.door)
|
|
(obj.Faction = PlanetSideEmpire.TR) mustEqual PlanetSideEmpire.NEUTRAL
|
|
}
|
|
|
|
"inherits affinity from owner 1" in {
|
|
val obj = new Door(GlobalDefinitions.door)
|
|
obj.Owner.Faction mustEqual PlanetSideEmpire.NEUTRAL
|
|
(obj.Faction = PlanetSideEmpire.TR) mustEqual PlanetSideEmpire.NEUTRAL
|
|
}
|
|
|
|
"inherits affinity from owner 2" in {
|
|
val obj = new Door(GlobalDefinitions.door)
|
|
val bldg = new Building(1, Zone.Nowhere, StructureType.Building)
|
|
obj.Owner = bldg
|
|
obj.Faction mustEqual PlanetSideEmpire.NEUTRAL
|
|
|
|
bldg.Faction = PlanetSideEmpire.TR
|
|
obj.Faction mustEqual PlanetSideEmpire.TR
|
|
|
|
bldg.Faction = PlanetSideEmpire.NC
|
|
obj.Faction mustEqual PlanetSideEmpire.NC
|
|
}
|
|
}
|
|
}
|
|
|
|
class FactionAffinity1Test extends ActorTest() {
|
|
"FactionAffinity" should {
|
|
"assert affinity on confirm request" in {
|
|
val obj = FactionAffinityTest.SetUpAgent
|
|
obj.Faction = PlanetSideEmpire.VS //object is a type that can be changed directly
|
|
assert(obj.Faction == PlanetSideEmpire.VS)
|
|
|
|
obj.Actor ! FactionAffinity.ConfirmFactionAffinity()
|
|
val reply = receiveOne(Duration.create(100, "ms"))
|
|
assert(reply.isInstanceOf[FactionAffinity.AssertFactionAffinity])
|
|
assert(reply.asInstanceOf[FactionAffinity.AssertFactionAffinity].obj == obj)
|
|
assert(reply.asInstanceOf[FactionAffinity.AssertFactionAffinity].faction == PlanetSideEmpire.VS)
|
|
}
|
|
}
|
|
}
|
|
|
|
class FactionAffinity2Test extends ActorTest() {
|
|
"FactionAffinity" should {
|
|
"assert affinity on assert request" in {
|
|
val obj = FactionAffinityTest.SetUpAgent
|
|
obj.Faction = PlanetSideEmpire.VS //object is a type that can be changed directly
|
|
assert(obj.Faction == PlanetSideEmpire.VS)
|
|
|
|
obj.Actor ! FactionAffinity.AssertFactionAffinity(obj, PlanetSideEmpire.NEUTRAL)
|
|
val reply = receiveOne(Duration.create(100, "ms"))
|
|
assert(reply.isInstanceOf[FactionAffinity.AssertFactionAffinity])
|
|
assert(reply.asInstanceOf[FactionAffinity.AssertFactionAffinity].obj == obj)
|
|
assert(reply.asInstanceOf[FactionAffinity.AssertFactionAffinity].faction == PlanetSideEmpire.VS)
|
|
}
|
|
}
|
|
}
|
|
|
|
class FactionAffinity3Test extends ActorTest() {
|
|
"FactionAffinity" should {
|
|
"convert and assert affinity on convert request" in {
|
|
val obj = FactionAffinityTest.SetUpAgent
|
|
obj.Faction = PlanetSideEmpire.VS //object is a type that can be changed directly
|
|
assert(obj.Faction == PlanetSideEmpire.VS)
|
|
|
|
obj.Actor ! FactionAffinity.ConvertFactionAffinity(PlanetSideEmpire.TR)
|
|
val reply = receiveOne(Duration.create(100, "ms"))
|
|
assert(reply.isInstanceOf[FactionAffinity.AssertFactionAffinity])
|
|
assert(reply.asInstanceOf[FactionAffinity.AssertFactionAffinity].obj == obj)
|
|
assert(reply.asInstanceOf[FactionAffinity.AssertFactionAffinity].faction == PlanetSideEmpire.TR)
|
|
assert(obj.Faction == PlanetSideEmpire.TR)
|
|
}
|
|
}
|
|
}
|
|
|
|
object FactionAffinityTest {
|
|
import net.psforever.objects.serverobject.affinity.FactionAffinityBehavior
|
|
|
|
private class AffinityControl(obj : FactionAffinity) extends Actor
|
|
with FactionAffinityBehavior.Check
|
|
with FactionAffinityBehavior.Convert {
|
|
override def FactionObject = obj
|
|
def receive = checkBehavior.orElse(convertBehavior).orElse { case _ => }
|
|
}
|
|
|
|
def SetUpAgent(implicit system : ActorSystem) = {
|
|
val obj = new Vehicle(GlobalDefinitions.quadstealth)
|
|
obj.Actor = system.actorOf(Props(classOf[FactionAffinityTest.AffinityControl], obj), "test")
|
|
obj
|
|
}
|
|
|
|
def FreeFactionObject : FactionAffinity = new FactionAffinity() {
|
|
private var faction : PlanetSideEmpire.Value = PlanetSideEmpire.NEUTRAL
|
|
def Faction : PlanetSideEmpire.Value = faction
|
|
override def Faction_=(fac : PlanetSideEmpire.Value) : PlanetSideEmpire.Value = {
|
|
faction = fac
|
|
faction
|
|
}
|
|
}
|
|
} |