Skip to content

Instantly share code, notes, and snippets.

@hardvain
Last active December 13, 2019 10:17
Show Gist options
  • Save hardvain/9d35f6cbf52cf212cf9f76c3e5fbbafe to your computer and use it in GitHub Desktop.
Save hardvain/9d35f6cbf52cf212cf9f76c3e5fbbafe to your computer and use it in GitHub Desktop.
Boxs
package in.boxs
sealed trait Position
case object Center extends Position
case object Corner extends Position
sealed trait Axis
case object XAxis extends Axis
case object YAxis extends Axis
case object ZAxis extends Axis
trait BObject {
val box: Box
val isHangable: Boolean
val xPadding: Int
val yPadding: Int
val zPadding: Int
val allowedPositions: List[Position]
def boundingBox(axis: Axis): Option[Box]
def viewPort(axis: Axis): Option[Box]
}
case class Box(origin: (Int, Int, Int), dimension: (Int, Int, Int))
case class Television() extends BObject {
override val box: Box = Box((0, 0, 0), (5,5,5))
override val isHangable: Boolean = true
override val allowedPositions: List[Position] = List(Center)
override val xPadding: Int = 10
override val yPadding: Int = 10
override val zPadding: Int = 10
override def boundingBox(axis: Axis): Option[Box] = {
axis match {
case XAxis =>
val originX = this.box.origin._1 - xPadding
val originY = this.box.origin._2
val originZ = this.box.origin._3 - zPadding
val dimensionX = originX + this.box.dimension._1 + (2 * xPadding)
val dimensionY = originY + this.box.dimension._2 + yPadding
val dimensionZ = originZ + this.box.dimension._3 + (2 * zPadding)
Some(Box((originX, originY, originZ), (dimensionX, dimensionY, dimensionZ)))
case YAxis =>
val originX = this.box.origin._1
val originY = this.box.origin._2 - yPadding
val originZ = this.box.origin._3 - zPadding
val dimensionX = originX + this.box.dimension._1 + xPadding
val dimensionY = originY + this.box.dimension._2 + (2 * yPadding)
val dimensionZ = originZ + this.box.dimension._3 + (2 * zPadding)
Some(Box((originX, originY, originZ), (dimensionX, dimensionY, dimensionZ)))
case _ => None
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment