2017-03-06 19:30:45 -05:00
|
|
|
// Copyright (c) 2017 PSForever
|
2017-03-04 10:06:10 -05:00
|
|
|
package game
|
|
|
|
|
|
|
|
|
|
import org.specs2.mutable._
|
|
|
|
|
import net.psforever.packet._
|
|
|
|
|
import net.psforever.packet.game._
|
|
|
|
|
import net.psforever.types._
|
|
|
|
|
import scodec.bits._
|
|
|
|
|
|
|
|
|
|
class PlayerStateMessageTest extends Specification {
|
|
|
|
|
val string_short = hex"08 A006 DFD17 B5AEB 380B 0F80002990"
|
2020-07-14 05:54:05 +02:00
|
|
|
val string_mod =
|
|
|
|
|
hex"08 A006 DFD17 B5AEB 380B 0F80002985" //slightly modified from above to demonstrate active booleans
|
2017-03-04 10:06:10 -05:00
|
|
|
val string_vel = hex"08 A006 4DD47 CDB1B 0C0B A8C1A5000403008014A4"
|
|
|
|
|
|
|
|
|
|
"decode (short)" in {
|
|
|
|
|
PacketCoding.DecodePacket(string_short).require match {
|
2020-07-14 05:54:05 +02:00
|
|
|
case PlayerStateMessage(
|
|
|
|
|
guid,
|
|
|
|
|
pos,
|
|
|
|
|
vel,
|
|
|
|
|
facingYaw,
|
|
|
|
|
facingPitch,
|
|
|
|
|
facingUpper,
|
|
|
|
|
unk1,
|
|
|
|
|
crouching,
|
|
|
|
|
jumping,
|
|
|
|
|
jthrust,
|
|
|
|
|
cloaked
|
|
|
|
|
) =>
|
2017-03-04 10:06:10 -05:00
|
|
|
guid mustEqual PlanetSideGUID(1696)
|
|
|
|
|
pos.x mustEqual 4003.7422f
|
|
|
|
|
pos.y mustEqual 5981.414f
|
|
|
|
|
pos.z mustEqual 44.875f
|
|
|
|
|
vel.isDefined mustEqual false
|
2017-07-04 21:44:24 -04:00
|
|
|
facingYaw mustEqual 2.8125f
|
|
|
|
|
facingPitch mustEqual 0f
|
|
|
|
|
facingUpper mustEqual 0f
|
2017-03-04 10:06:10 -05:00
|
|
|
unk1 mustEqual 83
|
|
|
|
|
crouching mustEqual false
|
|
|
|
|
jumping mustEqual false
|
2017-03-19 18:32:26 -04:00
|
|
|
jthrust mustEqual false
|
|
|
|
|
cloaked mustEqual false
|
2017-03-04 10:06:10 -05:00
|
|
|
case _ =>
|
|
|
|
|
ko
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"decode (mod)" in {
|
|
|
|
|
PacketCoding.DecodePacket(string_mod).require match {
|
2020-07-14 05:54:05 +02:00
|
|
|
case PlayerStateMessage(
|
|
|
|
|
guid,
|
|
|
|
|
pos,
|
|
|
|
|
vel,
|
|
|
|
|
facingYaw,
|
|
|
|
|
facingPitch,
|
|
|
|
|
facingUpper,
|
|
|
|
|
unk1,
|
|
|
|
|
crouching,
|
|
|
|
|
jumping,
|
|
|
|
|
jthrust,
|
|
|
|
|
cloaked
|
|
|
|
|
) =>
|
2017-03-04 10:06:10 -05:00
|
|
|
guid mustEqual PlanetSideGUID(1696)
|
|
|
|
|
pos.x mustEqual 4003.7422f
|
|
|
|
|
pos.y mustEqual 5981.414f
|
|
|
|
|
pos.z mustEqual 44.875f
|
|
|
|
|
vel.isDefined mustEqual false
|
2017-07-04 21:44:24 -04:00
|
|
|
facingYaw mustEqual 2.8125f
|
|
|
|
|
facingPitch mustEqual 0f
|
|
|
|
|
facingUpper mustEqual 0f
|
2017-03-04 10:06:10 -05:00
|
|
|
unk1 mustEqual 83
|
|
|
|
|
crouching mustEqual false
|
|
|
|
|
jumping mustEqual true
|
2017-03-19 18:32:26 -04:00
|
|
|
jthrust mustEqual false
|
|
|
|
|
cloaked mustEqual true
|
2017-03-04 10:06:10 -05:00
|
|
|
case _ =>
|
|
|
|
|
ko
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"decode (vel)" in {
|
|
|
|
|
PacketCoding.DecodePacket(string_vel).require match {
|
2020-07-14 05:54:05 +02:00
|
|
|
case PlayerStateMessage(
|
|
|
|
|
guid,
|
|
|
|
|
pos,
|
|
|
|
|
vel,
|
|
|
|
|
facingYaw,
|
|
|
|
|
facingPitch,
|
|
|
|
|
facingUpper,
|
|
|
|
|
unk1,
|
|
|
|
|
crouching,
|
|
|
|
|
jumping,
|
|
|
|
|
jthrust,
|
|
|
|
|
cloaked
|
|
|
|
|
) =>
|
2017-03-04 10:06:10 -05:00
|
|
|
guid mustEqual PlanetSideGUID(1696)
|
|
|
|
|
pos.x mustEqual 4008.6016f
|
|
|
|
|
pos.y mustEqual 5987.6016f
|
|
|
|
|
pos.z mustEqual 44.1875f
|
|
|
|
|
vel.isDefined mustEqual true
|
|
|
|
|
vel.get.x mustEqual 2.53125f
|
|
|
|
|
vel.get.y mustEqual 6.5625f
|
|
|
|
|
vel.get.z mustEqual 0.0f
|
2017-07-04 21:44:24 -04:00
|
|
|
facingYaw mustEqual 22.5f
|
2019-11-29 11:14:25 -05:00
|
|
|
facingPitch mustEqual -11.25f
|
2017-07-04 21:44:24 -04:00
|
|
|
facingUpper mustEqual 0f
|
2017-03-04 10:06:10 -05:00
|
|
|
unk1 mustEqual 165
|
|
|
|
|
crouching mustEqual false
|
|
|
|
|
jumping mustEqual false
|
2017-03-19 18:32:26 -04:00
|
|
|
jthrust mustEqual false
|
|
|
|
|
cloaked mustEqual false
|
2017-03-04 10:06:10 -05:00
|
|
|
case _ =>
|
|
|
|
|
ko
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"encode (short)" in {
|
|
|
|
|
val msg = PlayerStateMessage(
|
|
|
|
|
PlanetSideGUID(1696),
|
|
|
|
|
Vector3(4003.7422f, 5981.414f, 44.875f),
|
|
|
|
|
None,
|
2020-07-14 05:54:05 +02:00
|
|
|
2.8125f,
|
|
|
|
|
0f,
|
|
|
|
|
0f,
|
|
|
|
|
83,
|
|
|
|
|
false,
|
|
|
|
|
false,
|
|
|
|
|
false,
|
|
|
|
|
false
|
|
|
|
|
)
|
2017-03-04 10:06:10 -05:00
|
|
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
|
|
|
|
pkt mustEqual string_short
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"encode (mod)" in {
|
|
|
|
|
val msg = PlayerStateMessage(
|
|
|
|
|
PlanetSideGUID(1696),
|
|
|
|
|
Vector3(4003.7422f, 5981.414f, 44.875f),
|
|
|
|
|
None,
|
2020-07-14 05:54:05 +02:00
|
|
|
2.8125f,
|
|
|
|
|
0f,
|
|
|
|
|
0f,
|
|
|
|
|
83,
|
|
|
|
|
false,
|
|
|
|
|
true,
|
|
|
|
|
false,
|
|
|
|
|
true
|
|
|
|
|
)
|
2017-03-04 10:06:10 -05:00
|
|
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
|
|
|
|
pkt mustEqual string_mod
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"encode (vel)" in {
|
|
|
|
|
val msg = PlayerStateMessage(
|
|
|
|
|
PlanetSideGUID(1696),
|
|
|
|
|
Vector3(4008.6016f, 5987.6016f, 44.1875f),
|
|
|
|
|
Some(Vector3(2.53125f, 6.5625f, 0f)),
|
2020-07-14 05:54:05 +02:00
|
|
|
22.5f,
|
|
|
|
|
-11.25f,
|
|
|
|
|
0f,
|
|
|
|
|
165,
|
|
|
|
|
false,
|
|
|
|
|
false,
|
|
|
|
|
false,
|
|
|
|
|
false
|
|
|
|
|
)
|
2017-03-04 10:06:10 -05:00
|
|
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
|
|
|
|
pkt mustEqual string_vel
|
|
|
|
|
}
|
|
|
|
|
}
|