diff --git a/src/main/scala/scim/components/Output.scala b/src/main/scala/scim/components/Output.scala index de99b9e..9eec644 100644 --- a/src/main/scala/scim/components/Output.scala +++ b/src/main/scala/scim/components/Output.scala @@ -1,6 +1,7 @@ package scim.components import scim.datastruct.{Cell, Group, SensorResult, SharedMemory, Time, Truth} +import scim.lib.consoleUtil.Color._ class Output(sharedMemory: SharedMemory, printOutput: Boolean = true) extends Runnable { def run(): Unit = { @@ -14,20 +15,19 @@ class Output(sharedMemory: SharedMemory, printOutput: Boolean = true) extends Ru } def outputData(time: Time, sensors: Map[Cell, Map[Group, Vector[SensorResult]]], groundTruths: Map[Cell, Map[Group, Truth]]): Unit = { - println("\n\nTICK: " + time) + println(RED("\n\nTICK: ") + time) if(!printOutput) return sensors.foreach(cells => { val cell = cells._1 - println("Cell: " + cell) + println(CYAN("Cell: ") + cell) cells._2.foreach(groups => { val group = groups._1 - print("Group: " + group + " ") - groups._2.foreach(res => print(res.get._3.getOrElse("None") + " | ")) - if(groundTruths.contains(cell) && groundTruths(cell).contains(group)) print("\nGround Truth: " + groundTruths(cell)(group).peak().getOrElse("None")) + val lastElement = groups._2.lastOption + print(BLUE(" Group: ") + group + (if(!lastElement.isEmpty) MAGENTA("\n Results: ") else "")) + groups._2.foreach(res => print(res.get._3.getOrElse("None") + (if(res.eq(lastElement.get)) "" else " | "))) + if(groundTruths.contains(cell) && groundTruths(cell).contains(group)) print(GREEN("\n Ground Truth: ") + groundTruths(cell)(group).peak().getOrElse("None")) print("\n") }) }) - //println(sensors) - //println(groundTruths) } } diff --git a/src/main/scala/scim/lib/Library.scala b/src/main/scala/scim/lib/Library.scala index 5d3d4b4..6205425 100644 --- a/src/main/scala/scim/lib/Library.scala +++ b/src/main/scala/scim/lib/Library.scala @@ -69,6 +69,30 @@ package object evalUtil { } } +package object consoleUtil { + private val resetColor = "\u001b[0m" + + sealed case class Color(value: String) { + override def toString: String = value + def apply(text: String): String = { + value + text + resetColor + } + } + + object Color { + object BLACK extends Color("\u001b[30m") + object RED extends Color("\u001b[31m") + object GREEN extends Color("\u001b[32m") + object YELLOW extends Color("\u001b[33m") + object BLUE extends Color("\u001b[34m") + object MAGENTA extends Color("\u001b[35m") + object CYAN extends Color("\u001b[36m") + object WHITE extends Color("\u001b[37m") + object RESET extends Color(resetColor) + val values = Seq(BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET) + } +} + package object debugUtil { sealed case class DebugType(name: String, level: Int) @@ -81,7 +105,7 @@ package object debugUtil { object DEBUG extends DebugType("DEBUG", 4) // Debug messages val values = Seq(ERROR, WARNING, NOTICE, INFO, DEBUG) } - val level: Int = DebugType.DEBUG.level + val level: Int = DebugType.INFO.level def currentMethodName: String = Thread.currentThread.getStackTrace()(2).getMethodName def currentMethodCallerName: String = Thread.currentThread.getStackTrace()(3).getMethodName