Last active
December 13, 2019 10:17
-
-
Save hardvain/9d35f6cbf52cf212cf9f76c3e5fbbafe to your computer and use it in GitHub Desktop.
Boxs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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