From dc567bd1be7216a6ce8068c6995dfbb0b86f9b92 Mon Sep 17 00:00:00 2001 From: bdew Date: Wed, 25 Mar 2015 16:34:46 +0200 Subject: [PATCH] More work on sensors --- src/net/bdew/lib/sensors/DataSlotSensor.scala | 5 +++++ src/net/bdew/lib/sensors/GenericSensorParameter.scala | 1 - src/net/bdew/lib/sensors/GenericSensorType.scala | 5 ++++- src/net/bdew/lib/sensors/SimpleGenericSensor.scala | 4 ++-- src/net/bdew/lib/sensors/widgets/WidgetSensorParam.scala | 8 ++++++-- src/net/bdew/lib/sensors/widgets/WidgetSensorType.scala | 5 ++++- 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/net/bdew/lib/sensors/DataSlotSensor.scala b/src/net/bdew/lib/sensors/DataSlotSensor.scala index 9ece371..241ee09 100644 --- a/src/net/bdew/lib/sensors/DataSlotSensor.scala +++ b/src/net/bdew/lib/sensors/DataSlotSensor.scala @@ -31,4 +31,9 @@ case class DataSlotSensor[T, R](registry: SensorSystem[T, R], name: String, pare .map(x => SensorPair(x, x.loadParameter(t.getCompoundTag(name)))) .getOrElse(SensorPair(default, default.defaultParameter)) } + + def ensureValid(obj: T): Unit = { + if (!value.sensor.isValidParameter(value.param, obj)) + update(value.copy(param = value.sensor.defaultParameter)) + } } diff --git a/src/net/bdew/lib/sensors/GenericSensorParameter.scala b/src/net/bdew/lib/sensors/GenericSensorParameter.scala index e413737..0959434 100644 --- a/src/net/bdew/lib/sensors/GenericSensorParameter.scala +++ b/src/net/bdew/lib/sensors/GenericSensorParameter.scala @@ -15,5 +15,4 @@ abstract class GenericSensorParameter(system: SensorSystem[_, _]) { val uid: String def localizedName = Misc.toLocal(system.localizationPrefix + ".param." + uid) - } diff --git a/src/net/bdew/lib/sensors/GenericSensorType.scala b/src/net/bdew/lib/sensors/GenericSensorType.scala index bd7a624..f8eb646 100644 --- a/src/net/bdew/lib/sensors/GenericSensorType.scala +++ b/src/net/bdew/lib/sensors/GenericSensorType.scala @@ -20,6 +20,9 @@ abstract class GenericSensorType[-T, +R](system: SensorSystem[T, R]) { system.register(this) + def getTooltip(obj: T): List[String] = List(localizedName) + def getParamTooltip(obj: T, param: GenericSensorParameter): List[String] = List(param.localizedName) + def localizedName = Misc.toLocal(system.localizationPrefix + "." + uid) def defaultParameter: GenericSensorParameter @@ -28,7 +31,7 @@ abstract class GenericSensorType[-T, +R](system: SensorSystem[T, R]) { def saveParameter(p: GenericSensorParameter, tag: NBTTagCompound) def loadParameter(tag: NBTTagCompound): GenericSensorParameter - def isValidParameter(p: GenericSensorParameter): Boolean + def isValidParameter(p: GenericSensorParameter, obj: T): Boolean def getResult(param: GenericSensorParameter, obj: T): R diff --git a/src/net/bdew/lib/sensors/SimpleGenericSensor.scala b/src/net/bdew/lib/sensors/SimpleGenericSensor.scala index d9e2aa1..8b835fa 100644 --- a/src/net/bdew/lib/sensors/SimpleGenericSensor.scala +++ b/src/net/bdew/lib/sensors/SimpleGenericSensor.scala @@ -24,7 +24,7 @@ abstract class SimpleGenericParameter(system: SensorSystem[_, _]) extends Generi } abstract class SimpleGenericSensor[-T, +R](system: SensorSystem[T, R]) extends GenericSensorType[T, R](system) { - def parameters: IndexedSeq[GenericSensorParameter] + def parameters: IndexedSeq[SimpleGenericParameter] override lazy val defaultParameter = parameters.headOption.getOrElse(system.DisabledParameter) @@ -40,7 +40,7 @@ abstract class SimpleGenericSensor[-T, +R](system: SensorSystem[T, R]) extends G override def saveParameter(p: GenericSensorParameter, tag: NBTTagCompound) = tag.setString("param", p.uid) override def loadParameter(tag: NBTTagCompound) = parameterMap.getOrElse(tag.getString("param"), system.DisabledParameter) - override def isValidParameter(p: GenericSensorParameter) = parameters.contains(p) + override def isValidParameter(p: GenericSensorParameter, obj: T) = parameters.contains(p) @SideOnly(Side.CLIENT) def texture: Texture diff --git a/src/net/bdew/lib/sensors/widgets/WidgetSensorParam.scala b/src/net/bdew/lib/sensors/widgets/WidgetSensorParam.scala index 59c0180..8cc4d57 100644 --- a/src/net/bdew/lib/sensors/widgets/WidgetSensorParam.scala +++ b/src/net/bdew/lib/sensors/widgets/WidgetSensorParam.scala @@ -17,6 +17,10 @@ import scala.collection.mutable class WidgetSensorParam[T](val p: Point, config: => SensorPair[T, _], obj: => Option[T]) extends Widget { override val rect = new Rect(p, 16, 16) - override def handleTooltip(p: Point, tip: mutable.MutableList[String]) = tip += config.param.localizedName - override def draw(mouse: Point) = obj foreach (x => config.sensor.drawParameter(rect, parent, x, config.param)) + + override def handleTooltip(p: Point, tip: mutable.MutableList[String]) = + for (x <- obj; s <- config.sensor.getParamTooltip(x, config.param)) tip += s + + override def draw(mouse: Point) = + obj foreach (x => config.sensor.drawParameter(rect, parent, x, config.param)) } diff --git a/src/net/bdew/lib/sensors/widgets/WidgetSensorType.scala b/src/net/bdew/lib/sensors/widgets/WidgetSensorType.scala index a6908e2..a29f538 100644 --- a/src/net/bdew/lib/sensors/widgets/WidgetSensorType.scala +++ b/src/net/bdew/lib/sensors/widgets/WidgetSensorType.scala @@ -17,7 +17,10 @@ import scala.collection.mutable class WidgetSensorType[T](val p: Point, sensor: => GenericSensorType[T, _], obj: => Option[T]) extends Widget { override val rect = new Rect(p, 16, 16) - override def handleTooltip(p: Point, tip: mutable.MutableList[String]) = tip += sensor.localizedName + + override def handleTooltip(p: Point, tip: mutable.MutableList[String]) = + for (x <- obj; s <- sensor.getTooltip(x)) tip += s + override def draw(mouse: Point) = obj foreach (x => sensor.drawSensor(rect, parent, x)) }