PSF-BotServer/common/src/test/scala/game/WeatherMessageTest.scala
Fate-JH 9275150c4b Packet: WeatherMessage (#112)
* imported WeatherMessage packet and tests

* trusting the debug information, converting from Long to Float (Vector3)

* field identification for storms

* copyright corrections
2017-03-10 21:33:14 -05:00

104 lines
4 KiB
Scala

// Copyright (c) 2017 PSForever
package game
import org.specs2.mutable._
import net.psforever.packet._
import net.psforever.packet.game.{WeatherMessage, CloudInfo, StormInfo}
import net.psforever.types.Vector3
import scodec.bits._
class WeatherMessageTest extends Specification {
val string = hex"9501000000004A0807C0D65B8FBF2427663F178608BE0B000000006CE13E0C390E3F64445CB7BF3E0C2FF23DA46264A3193FBA522E3F597D9A96093F95B99E3D0800096FE53E6CD6523F39198EAF683F9BA0363D01009C35503F9E5F3E3F3C304E46F23EF9668E3E6B56C8277F3FB084F33EB6C10291423FB17F663F00008C077F3E3135D03E320A"
"decode" in {
PacketCoding.DecodePacket(string).require match {
case WeatherMessage(clouds, storms) =>
clouds.size mustEqual 1
clouds.head.id mustEqual 0
clouds.head.unk1.x mustEqual -2.109881f
clouds.head.unk1.y mustEqual -1.1199901f
clouds.head.unk2.x mustEqual 0.89903474f
clouds.head.unk2.y mustEqual -0.13332401f
storms.size mustEqual 11
//0
storms.head.loc.x mustEqual 0.4402771f
storms.head.loc.y mustEqual 0.55555797f
storms.head.intensity mustEqual 100
storms.head.radius mustEqual 68
//1
storms(1).loc.x mustEqual 0.3744458f
storms(1).loc.y mustEqual 0.1182538f
storms(1).intensity mustEqual 164
storms(1).radius mustEqual 98
//2
storms(2).loc.x mustEqual 0.6001494f
storms(2).loc.y mustEqual 0.6809498f
storms(2).intensity mustEqual 89
storms(2).radius mustEqual 125
//3
storms(3).loc.x mustEqual 0.53745425f
storms(3).loc.y mustEqual 0.07750241f
storms(3).intensity mustEqual 8
storms(3).radius mustEqual 0
//4
storms(4).loc.x mustEqual 0.44811276f
storms(4).loc.y mustEqual 0.8235843f
storms(4).intensity mustEqual 57
storms(4).radius mustEqual 25
//5
storms(5).loc.x mustEqual 0.90892875f
storms(5).loc.y mustEqual 0.04458676f
storms(5).intensity mustEqual 1
storms(5).radius mustEqual 0
//6
storms(6).loc.x mustEqual 0.813318f
storms(6).loc.y mustEqual 0.7436465f
storms(6).intensity mustEqual 60
storms(6).radius mustEqual 48
//7
storms(7).loc.x mustEqual 0.47319263f
storms(7).loc.y mustEqual 0.27812937f
storms(7).intensity mustEqual 107
storms(7).radius mustEqual 86
//8
storms(8).loc.x mustEqual 0.99670076f
storms(8).loc.y mustEqual 0.4756217f
storms(8).intensity mustEqual 182
storms(8).radius mustEqual 193
//9
storms(9).loc.x mustEqual 0.76002514f
storms(9).loc.y mustEqual 0.9003859f
storms(9).intensity mustEqual 0
storms(9).radius mustEqual 0
//10
storms(10).loc.x mustEqual 0.24905223f
storms(10).loc.y mustEqual 0.40665582f
storms(10).intensity mustEqual 50
storms(10).radius mustEqual 10
case _ =>
ko
}
}
"encode" in {
val msg = WeatherMessage(
CloudInfo(0, Vector3(-2.109881f, -1.1199901f, 0.0f), Vector3(0.89903474f, -0.13332401f, 0.0f)) ::
Nil,
StormInfo(Vector3(0.4402771f, 0.55555797f, 0.0f), 100, 68) ::
StormInfo(Vector3(0.3744458f, 0.1182538f, 0.0f), 164, 98) ::
StormInfo(Vector3(0.6001494f, 0.6809498f, 0.0f), 89, 125) ::
StormInfo(Vector3(0.53745425f, 0.07750241f, 0.0f), 8, 0) ::
StormInfo(Vector3(0.44811276f, 0.8235843f, 0.0f), 57, 25) ::
StormInfo(Vector3(0.90892875f, 0.04458676f, 0.0f),1 ,0) ::
StormInfo(Vector3(0.813318f, 0.7436465f, 0.0f), 60, 48) ::
StormInfo(Vector3(0.47319263f, 0.27812937f, 0.0f), 107, 86) ::
StormInfo(Vector3(0.99670076f, 0.4756217f, 0.0f), 182, 193) ::
StormInfo(Vector3(0.76002514f, 0.9003859f, 0.0f), 0, 0) ::
StormInfo(Vector3(0.24905223f, 0.40665582f, 0.0f), 50, 10) ::
Nil
)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string
}
}