mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-13 15:34:42 +00:00
Add Vector3 class
* Add Vector3 class * Add Vector3 test
This commit is contained in:
parent
d2b6a8c451
commit
9d76d08948
3 changed files with 50 additions and 0 deletions
|
|
@ -1,10 +1,14 @@
|
||||||
// Copyright (c) 2016 PSForever.net to present
|
// Copyright (c) 2016 PSForever.net to present
|
||||||
package net.psforever.newcodecs
|
package net.psforever.newcodecs
|
||||||
|
|
||||||
|
import scodec.Attempt
|
||||||
|
import scodec.Attempt.{Failure, Successful}
|
||||||
import scodec.Codec
|
import scodec.Codec
|
||||||
|
|
||||||
package object newcodecs {
|
package object newcodecs {
|
||||||
|
|
||||||
def q_double(min: Double, max: Double, bits: Int): Codec[Double] = new QuantizedDoubleCodec(min, max, bits)
|
def q_double(min: Double, max: Double, bits: Int): Codec[Double] = new QuantizedDoubleCodec(min, max, bits)
|
||||||
|
|
||||||
|
def q_float(min : Double, max : Double, bits : Int): Codec[Float] = q_double(min, max, bits).narrow(v => Attempt.successful(v.toFloat), _.toDouble)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
24
common/src/main/scala/net/psforever/types/Vector3.scala
Normal file
24
common/src/main/scala/net/psforever/types/Vector3.scala
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
// Copyright (c) 2016 PSForever.net to present
|
||||||
|
package net.psforever.types
|
||||||
|
|
||||||
|
import net.psforever.newcodecs._
|
||||||
|
import scodec.Codec
|
||||||
|
import scodec.codecs._
|
||||||
|
|
||||||
|
final case class Vector3(x : Float,
|
||||||
|
y : Float,
|
||||||
|
z : Float)
|
||||||
|
|
||||||
|
object Vector3 {
|
||||||
|
implicit val codec_pos : Codec[Vector3] = (
|
||||||
|
("x" | newcodecs.q_float(0.0, 8192.0, 20)) ::
|
||||||
|
("y" | newcodecs.q_float(0.0, 8192.0, 20)) ::
|
||||||
|
("z" | newcodecs.q_float(0.0, 1024.0, 16))
|
||||||
|
).as[Vector3]
|
||||||
|
|
||||||
|
implicit val codec_vel : Codec[Vector3] = (
|
||||||
|
("x" | newcodecs.q_float(-256.0, 256.0, 14)) ::
|
||||||
|
("y" | newcodecs.q_float(-256.0, 256.0, 14)) ::
|
||||||
|
("z" | newcodecs.q_float(-256.0, 256.0, 14))
|
||||||
|
).as[Vector3]
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
// Copyright (c) 2016 PSForever.net to present
|
// Copyright (c) 2016 PSForever.net to present
|
||||||
import org.specs2.mutable._
|
import org.specs2.mutable._
|
||||||
import net.psforever.newcodecs._
|
import net.psforever.newcodecs._
|
||||||
|
import net.psforever.types._
|
||||||
import scodec.bits._
|
import scodec.bits._
|
||||||
|
|
||||||
class CodecTest extends Specification {
|
class CodecTest extends Specification {
|
||||||
|
|
@ -31,4 +32,25 @@ class CodecTest extends Specification {
|
||||||
newcodecs.q_double(-256.0, 256.0, 14).encode(257.0).require.bytes mustEqual string_6
|
newcodecs.q_double(-256.0, 256.0, 14).encode(257.0).require.bytes mustEqual string_6
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"Vector3" should {
|
||||||
|
val string_pos = hex"6E2D762222B616"
|
||||||
|
val string_vel = hex"857D4E0FFFC0"
|
||||||
|
|
||||||
|
"decode position" in {
|
||||||
|
Vector3.codec_pos.decode(string_pos.bits).require.value mustEqual Vector3(3674.859375f, 1092.7656f, 90.84375f)
|
||||||
|
}
|
||||||
|
|
||||||
|
"encode position" in {
|
||||||
|
Vector3.codec_pos.encode(Vector3(3674.859375f, 1092.7656f, 90.84375f)).require.bytes mustEqual string_pos
|
||||||
|
}
|
||||||
|
|
||||||
|
"decode velocity" in {
|
||||||
|
Vector3.codec_vel.decode(string_vel.bits).require.value mustEqual Vector3(-3.84375f, 2.59375f, 255.96875f)
|
||||||
|
}
|
||||||
|
|
||||||
|
"encode velocity" in {
|
||||||
|
Vector3.codec_vel.encode(Vector3(-3.84375f, 2.59375f, 255.96875f)).require.bytes mustEqual string_vel
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue