mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-01-30 07:51:01 +00:00
Replaces class object/serverobject/door/Base.scala. It performs nearly the exact same purpose but now has a list of owned objects called Amenities. Buildings are now a PlanetSideServerObject (PSSO), which allows them to have accept a *Control Actor and possess FactionAffinity. FoundationBuilder: FoundationBuilder : Building :: ServerObjectBuilder : [T <: PlanetSideServerObject] Amenity: Most PSSO's now accept Amenity as their parent in class hierarchy. Flagged PSSO's like Building and Vehicle are, on the other hand, capable of becoming the owner for these Amenity PSSOs, which allows them to inherit the same FactionAffinity. FactionAffinity: A trait that connects objects that are intended to communicate PlanetSideEmpire values. MountableBhevaior: Split between Mount and Dismount behavior. Passes appropriate messages to ensure coherent workflows. Control Actors: FactionAffinityBehavior and MountableBehavior are PartialFunctions that get processed in series. VehicleControl: Distinguished behavior allowed between an operational vehicle and a deactivated one. WSA: Tightened up DismountVehicleMsg handling code, since MountableBehavior has been enhanced. Minor: Shotgun shell stacking goes from 32 to 16. Various PSSO classes now have reliable Definition objects. Tests: We now have 1012 tests, some of them useful.
177 lines
6.6 KiB
Scala
177 lines
6.6 KiB
Scala
// Copyright (c) 2017 PSForever
|
|
package objects
|
|
|
|
import akka.actor.{Actor, Props}
|
|
import net.psforever.objects.guid.NumberPoolHub
|
|
import net.psforever.packet.game.PlanetSideGUID
|
|
import net.psforever.objects.serverobject.ServerObjectBuilder
|
|
import net.psforever.objects.serverobject.structures.{Building, FoundationBuilder}
|
|
import net.psforever.objects.zones.Zone
|
|
import net.psforever.types.Vector3
|
|
|
|
import scala.concurrent.duration.Duration
|
|
|
|
class BuildingBuilderTest extends ActorTest {
|
|
"Building object" should {
|
|
"build" in {
|
|
val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuildingTestActor], 10, Zone.Nowhere), "building")
|
|
actor ! "!"
|
|
|
|
val reply = receiveOne(Duration.create(1000, "ms"))
|
|
assert(reply.isInstanceOf[Building])
|
|
assert(reply.asInstanceOf[Building].Id == 10)
|
|
assert(reply.asInstanceOf[Building].Zone == Zone.Nowhere)
|
|
}
|
|
}
|
|
}
|
|
|
|
class DoorObjectBuilderTest1 extends ActorTest {
|
|
import net.psforever.objects.serverobject.doors.Door
|
|
"Door object" should {
|
|
"build" in {
|
|
val hub = ServerObjectBuilderTest.NumberPoolHub
|
|
val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1, Door.Constructor), hub), "door")
|
|
actor ! "!"
|
|
|
|
val reply = receiveOne(Duration.create(1000, "ms"))
|
|
assert(reply.isInstanceOf[Door])
|
|
assert(reply.asInstanceOf[Door].HasGUID)
|
|
assert(reply.asInstanceOf[Door].GUID == PlanetSideGUID(1))
|
|
assert(reply == hub(1).get)
|
|
}
|
|
}
|
|
}
|
|
|
|
class DoorObjectBuilderTest2 extends ActorTest {
|
|
import net.psforever.objects.serverobject.doors.Door
|
|
"Door object" should {
|
|
"build" in {
|
|
val hub = ServerObjectBuilderTest.NumberPoolHub
|
|
val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1, Door.Constructor(Vector3(1, 2, 3), Vector3(90, 180, 45))), hub), "door")
|
|
actor ! "!"
|
|
|
|
val reply = receiveOne(Duration.create(1000, "ms"))
|
|
assert(reply.isInstanceOf[Door])
|
|
assert(reply.asInstanceOf[Door].Position == Vector3(1, 2, 3))
|
|
assert(reply.asInstanceOf[Door].Orientation == Vector3(90, 180, 45))
|
|
assert(reply.asInstanceOf[Door].Outwards == Vector3(0.70710677f, 0.70710677f, 0f))
|
|
assert(reply.asInstanceOf[Door].HasGUID)
|
|
assert(reply.asInstanceOf[Door].GUID == PlanetSideGUID(1))
|
|
assert(reply == hub(1).get)
|
|
}
|
|
}
|
|
}
|
|
|
|
class IFFLockObjectBuilderTest extends ActorTest {
|
|
import net.psforever.objects.serverobject.locks.IFFLock
|
|
"IFFLock object" should {
|
|
"build" in {
|
|
val hub = ServerObjectBuilderTest.NumberPoolHub
|
|
val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1, IFFLock.Constructor), hub), "lock")
|
|
actor ! "!"
|
|
|
|
val reply = receiveOne(Duration.create(1000, "ms"))
|
|
assert(reply.isInstanceOf[IFFLock])
|
|
assert(reply.asInstanceOf[IFFLock].HasGUID)
|
|
assert(reply.asInstanceOf[IFFLock].GUID == PlanetSideGUID(1))
|
|
assert(reply == hub(1).get)
|
|
}
|
|
}
|
|
}
|
|
|
|
class ImplantTerminalMechObjectBuilderTest extends ActorTest {
|
|
import net.psforever.objects.serverobject.implantmech.ImplantTerminalMech
|
|
"Implant terminal mech object" should {
|
|
"build" in {
|
|
val hub = ServerObjectBuilderTest.NumberPoolHub
|
|
val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1, ImplantTerminalMech.Constructor), hub), "mech")
|
|
actor ! "!"
|
|
|
|
val reply = receiveOne(Duration.create(1000, "ms"))
|
|
assert(reply.isInstanceOf[ImplantTerminalMech])
|
|
assert(reply.asInstanceOf[ImplantTerminalMech].HasGUID)
|
|
assert(reply.asInstanceOf[ImplantTerminalMech].GUID == PlanetSideGUID(1))
|
|
assert(reply == hub(1).get)
|
|
}
|
|
}
|
|
}
|
|
|
|
class TerminalObjectBuilderTest extends ActorTest {
|
|
import net.psforever.objects.GlobalDefinitions.order_terminal
|
|
import net.psforever.objects.serverobject.terminals.Terminal
|
|
"Terminal object" should {
|
|
"build" in {
|
|
val hub = ServerObjectBuilderTest.NumberPoolHub
|
|
val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1, Terminal.Constructor(order_terminal)), hub), "term")
|
|
actor ! "!"
|
|
|
|
val reply = receiveOne(Duration.create(1000, "ms"))
|
|
assert(reply.isInstanceOf[Terminal])
|
|
assert(reply.asInstanceOf[Terminal].HasGUID)
|
|
assert(reply.asInstanceOf[Terminal].GUID == PlanetSideGUID(1))
|
|
assert(reply == hub(1).get)
|
|
}
|
|
}
|
|
}
|
|
|
|
class VehicleSpawnPadObjectBuilderTest extends ActorTest {
|
|
import net.psforever.objects.serverobject.pad.VehicleSpawnPad
|
|
"Vehicle spawn pad object" should {
|
|
"build" in {
|
|
val hub = ServerObjectBuilderTest.NumberPoolHub
|
|
val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1,
|
|
VehicleSpawnPad.Constructor(Vector3(1.1f, 2.2f, 3.3f), Vector3(4.4f, 5.5f, 6.6f))
|
|
), hub), "pad")
|
|
actor ! "!"
|
|
|
|
val reply = receiveOne(Duration.create(1000, "ms"))
|
|
assert(reply.isInstanceOf[VehicleSpawnPad])
|
|
assert(reply.asInstanceOf[VehicleSpawnPad].HasGUID)
|
|
assert(reply.asInstanceOf[VehicleSpawnPad].GUID == PlanetSideGUID(1))
|
|
assert(reply.asInstanceOf[VehicleSpawnPad].Position == Vector3(1.1f, 2.2f, 3.3f))
|
|
assert(reply.asInstanceOf[VehicleSpawnPad].Orientation == Vector3(4.4f, 5.5f, 6.6f))
|
|
assert(reply == hub(1).get)
|
|
}
|
|
}
|
|
}
|
|
|
|
class LockerObjectBuilderTest extends ActorTest {
|
|
import net.psforever.objects.serverobject.mblocker.Locker
|
|
"LockerObjectBuilder" should {
|
|
"build" in {
|
|
val hub = ServerObjectBuilderTest.NumberPoolHub
|
|
val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1,
|
|
Locker.Constructor), hub), "locker")
|
|
actor ! "!"
|
|
|
|
val reply = receiveOne(Duration.create(1000, "ms"))
|
|
assert(reply.isInstanceOf[Locker])
|
|
assert(reply.asInstanceOf[Locker].HasGUID)
|
|
assert(reply.asInstanceOf[Locker].GUID == PlanetSideGUID(1))
|
|
assert(reply == hub(1).get)
|
|
}
|
|
}
|
|
}
|
|
|
|
object ServerObjectBuilderTest {
|
|
import net.psforever.objects.guid.source.LimitedNumberSource
|
|
def NumberPoolHub : NumberPoolHub = {
|
|
val obj = new NumberPoolHub(new LimitedNumberSource(2))
|
|
obj
|
|
}
|
|
|
|
class BuilderTestActor(builder : ServerObjectBuilder[_], hub : NumberPoolHub) extends Actor {
|
|
def receive : Receive = {
|
|
case _ =>
|
|
sender ! builder.Build(context, hub)
|
|
}
|
|
}
|
|
|
|
class BuildingTestActor(building_id : Int, zone : Zone) extends Actor {
|
|
def receive : Receive = {
|
|
case _ =>
|
|
sender ! FoundationBuilder(Building.Structure).Build(building_id, zone)(context)
|
|
}
|
|
}
|
|
}
|