initial OrbitalStrikeWaypointMessage packet work and tests

This commit is contained in:
FateJH 2017-01-26 17:49:48 -05:00
parent a1b8589f1a
commit 34e3dcd501
3 changed files with 96 additions and 1 deletions

View file

@ -538,7 +538,7 @@ object GamePacketOpcode extends Enumeration {
case 0xb7 => noDecoder(DisconnectMessage)
// 0xb8
case 0xb8 => noDecoder(ExperienceAddedMessage)
case 0xb9 => noDecoder(OrbitalStrikeWaypointMessage)
case 0xb9 => game.OrbitalStrikeWaypointMessage.decode
case 0xba => game.KeepAliveMessage.decode
case 0xbb => noDecoder(MapObjectStateBlockMessage)
case 0xbc => noDecoder(SnoopMsg)

View file

@ -0,0 +1,54 @@
// Copyright (c) 2016 PSForever.net to present
package net.psforever.packet.game
import net.psforever.newcodecs.newcodecs
import net.psforever.packet.{GamePacketOpcode, Marshallable, PlanetSideGamePacket}
import scodec.Codec
import scodec.codecs._
import shapeless.{::, HNil}
final case class XY(x : Float,
y : Float)
final case class OrbitalStrikeWaypointMessage(unk : PlanetSideGUID,
coords : Option[XY] = None)
extends PlanetSideGamePacket {
type Packet = OrbitalStrikeWaypointMessage
def opcode = GamePacketOpcode.OrbitalStrikeWaypointMessage
def encode = OrbitalStrikeWaypointMessage.encode(this)
}
object OrbitalStrikeWaypointMessage extends Marshallable[OrbitalStrikeWaypointMessage] {
def apply(player_guid : PlanetSideGUID, coords : XY) : OrbitalStrikeWaypointMessage =
new OrbitalStrikeWaypointMessage(player_guid, Option(coords))
private val coords_value : Codec[XY] = (
("x" | newcodecs.q_float(0.0, 8192.0, 20)) ::
("y" | newcodecs.q_float(0.0, 8192.0, 20))
).xmap[XY] (
{
case x :: y :: HNil =>
XY(x, y)
},
{
case XY(x, y) =>
x :: y :: HNil
}
)
implicit val codec : Codec[OrbitalStrikeWaypointMessage] = (
("unk" | PlanetSideGUID.codec) ::
(bool >>:~ { test =>
conditional(test, coords_value).hlist
})
).xmap[OrbitalStrikeWaypointMessage] (
{
case u :: _ :: coords :: HNil =>
OrbitalStrikeWaypointMessage(u, coords)
},
{
case OrbitalStrikeWaypointMessage(u, coords) =>
u :: coords.isDefined :: coords :: HNil
}
)
}