2017-11-06 10:24:36 -05:00
|
|
|
// Copyright (c) 2017 PSForever
|
|
|
|
|
package objects
|
|
|
|
|
|
2020-05-30 12:28:10 -04:00
|
|
|
import akka.actor.{ActorSystem, Props}
|
2018-07-14 21:25:44 -04:00
|
|
|
import base.ActorTest
|
2020-08-01 12:25:03 +02:00
|
|
|
import net.psforever.objects.avatar.Avatar
|
|
|
|
|
import net.psforever.objects.{Default, GlobalDefinitions, Player}
|
2017-11-06 10:24:36 -05:00
|
|
|
import net.psforever.objects.serverobject.doors.{Door, DoorControl}
|
2018-03-24 00:28:02 -04:00
|
|
|
import net.psforever.objects.serverobject.structures.{Building, StructureType}
|
2018-01-26 15:32:08 -05:00
|
|
|
import net.psforever.objects.zones.Zone
|
2020-01-06 08:45:55 -05:00
|
|
|
import net.psforever.packet.game.UseItemMessage
|
|
|
|
|
import net.psforever.types._
|
2017-11-06 10:24:36 -05:00
|
|
|
import org.specs2.mutable.Specification
|
|
|
|
|
|
|
|
|
|
import scala.concurrent.duration.Duration
|
|
|
|
|
|
|
|
|
|
class DoorTest extends Specification {
|
2020-08-01 12:25:03 +02:00
|
|
|
val player = Player(Avatar(0, "test", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute))
|
2018-01-26 15:32:08 -05:00
|
|
|
|
2017-11-06 10:24:36 -05:00
|
|
|
"Door" should {
|
|
|
|
|
"construct" in {
|
|
|
|
|
Door(GlobalDefinitions.door)
|
|
|
|
|
ok
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"starts as closed (false)" in {
|
|
|
|
|
val door = Door(GlobalDefinitions.door)
|
2020-10-03 00:13:41 -04:00
|
|
|
door.Open.isEmpty mustEqual true
|
2018-01-24 10:07:42 -05:00
|
|
|
door.isOpen mustEqual false
|
2017-11-06 10:24:36 -05:00
|
|
|
}
|
|
|
|
|
|
2018-01-24 10:07:42 -05:00
|
|
|
"be opened and closed (1; manual)" in {
|
2017-11-06 10:24:36 -05:00
|
|
|
val door = Door(GlobalDefinitions.door)
|
2018-01-24 10:07:42 -05:00
|
|
|
door.isOpen mustEqual false
|
2020-10-03 00:13:41 -04:00
|
|
|
door.Open.isEmpty mustEqual true
|
2018-01-24 10:07:42 -05:00
|
|
|
|
|
|
|
|
door.Open = Some(player)
|
|
|
|
|
door.isOpen mustEqual true
|
2020-10-03 00:13:41 -04:00
|
|
|
door.Open.contains(player) mustEqual true
|
2018-01-24 10:07:42 -05:00
|
|
|
|
|
|
|
|
door.Open = None
|
|
|
|
|
door.isOpen mustEqual false
|
2020-10-03 00:13:41 -04:00
|
|
|
door.Open.isEmpty mustEqual true
|
2017-11-06 10:24:36 -05:00
|
|
|
}
|
|
|
|
|
|
2018-01-24 10:07:42 -05:00
|
|
|
"be opened and closed (2; toggle)" in {
|
2020-07-14 05:54:05 +02:00
|
|
|
val msg = UseItemMessage(
|
|
|
|
|
PlanetSideGUID(6585),
|
|
|
|
|
PlanetSideGUID(0),
|
|
|
|
|
PlanetSideGUID(372),
|
|
|
|
|
4294967295L,
|
|
|
|
|
false,
|
|
|
|
|
Vector3(5.0f, 0.0f, 0.0f),
|
|
|
|
|
Vector3(0.0f, 0.0f, 0.0f),
|
|
|
|
|
11,
|
|
|
|
|
25,
|
|
|
|
|
0,
|
|
|
|
|
364
|
|
|
|
|
)
|
2017-11-06 10:24:36 -05:00
|
|
|
val door = Door(GlobalDefinitions.door)
|
2020-10-03 00:13:41 -04:00
|
|
|
door.Open.isEmpty mustEqual true
|
2017-11-06 10:24:36 -05:00
|
|
|
door.Use(player, msg)
|
2020-10-03 00:13:41 -04:00
|
|
|
door.Open.contains(player) mustEqual true
|
2017-11-06 10:24:36 -05:00
|
|
|
door.Use(player, msg)
|
2020-10-03 00:13:41 -04:00
|
|
|
door.Open.isEmpty mustEqual true
|
2018-01-24 10:07:42 -05:00
|
|
|
}
|
2017-11-06 10:24:36 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-07-14 21:25:44 -04:00
|
|
|
class DoorControl1Test extends ActorTest {
|
2017-11-06 10:24:36 -05:00
|
|
|
"DoorControl" should {
|
|
|
|
|
"construct" in {
|
|
|
|
|
val door = Door(GlobalDefinitions.door)
|
|
|
|
|
door.Actor = system.actorOf(Props(classOf[DoorControl], door), "door")
|
2020-05-30 12:28:10 -04:00
|
|
|
assert(door.Actor != Default.Actor)
|
2017-11-06 10:24:36 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-07-14 21:25:44 -04:00
|
|
|
class DoorControl2Test extends ActorTest {
|
2017-11-06 10:24:36 -05:00
|
|
|
"DoorControl" should {
|
|
|
|
|
"open on use" in {
|
2018-01-26 15:32:08 -05:00
|
|
|
val (player, door) = DoorControlTest.SetUpAgents(PlanetSideEmpire.TR)
|
2020-07-14 05:54:05 +02:00
|
|
|
val msg = UseItemMessage(
|
|
|
|
|
PlanetSideGUID(1),
|
|
|
|
|
PlanetSideGUID(0),
|
|
|
|
|
PlanetSideGUID(2),
|
|
|
|
|
0L,
|
|
|
|
|
false,
|
|
|
|
|
Vector3(0f, 0f, 0f),
|
|
|
|
|
Vector3(0f, 0f, 0f),
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0L
|
|
|
|
|
) //faked
|
2018-01-24 10:07:42 -05:00
|
|
|
assert(door.Open.isEmpty)
|
2017-11-06 10:24:36 -05:00
|
|
|
|
|
|
|
|
door.Actor ! Door.Use(player, msg)
|
|
|
|
|
val reply = receiveOne(Duration.create(500, "ms"))
|
|
|
|
|
assert(reply.isInstanceOf[Door.DoorMessage])
|
|
|
|
|
val reply2 = reply.asInstanceOf[Door.DoorMessage]
|
|
|
|
|
assert(reply2.player == player)
|
|
|
|
|
assert(reply2.msg == msg)
|
|
|
|
|
assert(reply2.response == Door.OpenEvent())
|
2018-01-24 10:07:42 -05:00
|
|
|
assert(door.Open.isDefined)
|
2017-11-06 10:24:36 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-07-14 21:25:44 -04:00
|
|
|
class DoorControl3Test extends ActorTest {
|
2017-11-06 10:24:36 -05:00
|
|
|
"DoorControl" should {
|
|
|
|
|
"do nothing if given garbage" in {
|
2018-01-26 15:32:08 -05:00
|
|
|
val (_, door) = DoorControlTest.SetUpAgents(PlanetSideEmpire.TR)
|
2018-01-24 10:07:42 -05:00
|
|
|
assert(door.Open.isEmpty)
|
2017-11-06 10:24:36 -05:00
|
|
|
|
|
|
|
|
door.Actor ! "trash"
|
2020-10-03 00:13:41 -04:00
|
|
|
expectNoMessage(Duration.create(500, "ms"))
|
2018-01-24 10:07:42 -05:00
|
|
|
assert(door.Open.isEmpty)
|
2017-11-06 10:24:36 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-01-26 15:32:08 -05:00
|
|
|
|
|
|
|
|
object DoorControlTest {
|
2020-07-14 05:54:05 +02:00
|
|
|
def SetUpAgents(faction: PlanetSideEmpire.Value)(implicit system: ActorSystem): (Player, Door) = {
|
2018-01-26 15:32:08 -05:00
|
|
|
val door = Door(GlobalDefinitions.door)
|
|
|
|
|
door.Actor = system.actorOf(Props(classOf[DoorControl], door), "door")
|
2020-07-14 05:54:05 +02:00
|
|
|
door.Owner = new Building(
|
|
|
|
|
"Building",
|
|
|
|
|
building_guid = 0,
|
|
|
|
|
map_id = 0,
|
|
|
|
|
Zone.Nowhere,
|
|
|
|
|
StructureType.Building,
|
|
|
|
|
GlobalDefinitions.building
|
|
|
|
|
)
|
2018-01-26 15:32:08 -05:00
|
|
|
door.Owner.Faction = faction
|
2020-08-01 12:25:03 +02:00
|
|
|
(Player(Avatar(0, "test", faction, CharacterGender.Male, 0, CharacterVoice.Mute)), door)
|
2018-01-26 15:32:08 -05:00
|
|
|
}
|
|
|
|
|
}
|