package wow.doge.mygame.math; import cats.Show import math.{abs, pow, sqrt} case class ImVector3f(x: Float, y: Float, z: Float) object ImVector3f { val ZERO = ImVector3f(0, 0, 0) val UNIT_X = ImVector3f(1, 0, 0) val UNIT_Y = ImVector3f(0, 1, 0) val UNIT_Z = ImVector3f(0, 0, 1) def dst(v1: ImVector3f, v2: ImVector3f) = sqrt( pow((v1.x - v2.x).toDouble, 2) + pow((v1.y - v2.y).toDouble, 2) + pow( (v1.z - v2.z).toDouble, 2 ) ) def manhattanDst(v1: ImVector3f, v2: ImVector3f) = abs(v1.x - v2.x) + abs(v1.y - v2.y) + abs(v1.z - v2.z) implicit val showForImVector3f = new Show[ImVector3f] { def format(f: Float) = f.formatted("%.2f") override def show(t: ImVector3f): String = s"ImVector3f(${format(t.x)},${format(t.y)},${format(t.z)})" } }