From 8e65772cae9397238d55aeb0d35e99c0fb09a95b Mon Sep 17 00:00:00 2001 From: bdew Date: Wed, 25 Mar 2015 10:46:18 +0200 Subject: [PATCH] More work on sensor system --- .../lib/sensors/GenericSensorParameter.scala | 12 ------- .../bdew/lib/sensors/GenericSensorType.scala | 16 ++++----- src/net/bdew/lib/sensors/SensorSystem.scala | 20 +++++------ .../lib/sensors/SimpleGenericSensor.scala | 33 ++++++++++++++++++- .../lib/sensors/SlotSensorParameter.scala | 8 +++-- .../sensors/widgets/WidgetSensorParam.scala | 8 ++--- .../sensors/widgets/WidgetSensorType.scala | 4 +-- 7 files changed, 60 insertions(+), 41 deletions(-) diff --git a/src/net/bdew/lib/sensors/GenericSensorParameter.scala b/src/net/bdew/lib/sensors/GenericSensorParameter.scala index 061c58b..e413737 100644 --- a/src/net/bdew/lib/sensors/GenericSensorParameter.scala +++ b/src/net/bdew/lib/sensors/GenericSensorParameter.scala @@ -9,23 +9,11 @@ package net.bdew.lib.sensors -import cpw.mods.fml.relauncher.{Side, SideOnly} import net.bdew.lib.Misc -import net.bdew.lib.gui._ abstract class GenericSensorParameter(system: SensorSystem[_, _]) { val uid: String def localizedName = Misc.toLocal(system.localizationPrefix + ".param." + uid) - @SideOnly(Side.CLIENT) - def drawParam(rect: Rect, target: DrawTarget): Unit = { - target.drawTexture(rect, texture, textureColor) - } - - @SideOnly(Side.CLIENT) - def texture: Texture - - @SideOnly(Side.CLIENT) - def textureColor = Color.white } diff --git a/src/net/bdew/lib/sensors/GenericSensorType.scala b/src/net/bdew/lib/sensors/GenericSensorType.scala index f582ed8..bd7a624 100644 --- a/src/net/bdew/lib/sensors/GenericSensorType.scala +++ b/src/net/bdew/lib/sensors/GenericSensorType.scala @@ -11,7 +11,7 @@ package net.bdew.lib.sensors import cpw.mods.fml.relauncher.{Side, SideOnly} import net.bdew.lib.Misc -import net.bdew.lib.gui.{Color, DrawTarget, Rect, Texture} +import net.bdew.lib.gui.{DrawTarget, Rect} import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound @@ -23,20 +23,18 @@ abstract class GenericSensorType[-T, +R](system: SensorSystem[T, R]) { def localizedName = Misc.toLocal(system.localizationPrefix + "." + uid) def defaultParameter: GenericSensorParameter - def paramClicked(current: GenericSensorParameter, item: ItemStack, button: Int, mod: Int): GenericSensorParameter + + def paramClicked(current: GenericSensorParameter, item: ItemStack, button: Int, mod: Int, obj: T): GenericSensorParameter + def saveParameter(p: GenericSensorParameter, tag: NBTTagCompound) def loadParameter(tag: NBTTagCompound): GenericSensorParameter + def isValidParameter(p: GenericSensorParameter): Boolean def getResult(param: GenericSensorParameter, obj: T): R @SideOnly(Side.CLIENT) - def drawSensor(rect: Rect, target: DrawTarget): Unit = { - target.drawTexture(rect, texture, textureColor) - } + def drawSensor(rect: Rect, target: DrawTarget, obj: T): Unit @SideOnly(Side.CLIENT) - def texture: Texture - - @SideOnly(Side.CLIENT) - def textureColor = Color.white + def drawParameter(rect: Rect, target: DrawTarget, obj: T, param: GenericSensorParameter): Unit } diff --git a/src/net/bdew/lib/sensors/SensorSystem.scala b/src/net/bdew/lib/sensors/SensorSystem.scala index 937646b..944978b 100644 --- a/src/net/bdew/lib/sensors/SensorSystem.scala +++ b/src/net/bdew/lib/sensors/SensorSystem.scala @@ -13,7 +13,6 @@ import cpw.mods.fml.relauncher.{Side, SideOnly} import net.bdew.lib.gui._ import net.bdew.lib.{BdLib, Misc} import net.minecraft.item.ItemStack -import net.minecraft.nbt.NBTTagCompound abstract class SensorSystem[T, R](defaultResult: R) { val map = collection.mutable.Map.empty[String, GenericSensorType[T, R]] @@ -39,24 +38,25 @@ abstract class SensorSystem[T, R](defaultResult: R) { abstract class SensorType extends GenericSensorType(this) - abstract class SimpleSensor extends SimpleGenericSensor(this) - abstract class SensorParameter extends GenericSensorParameter(this) - object DisabledParameter extends SensorParameter { + abstract class SimpleSensor extends SimpleGenericSensor(this) + + abstract class SimpleParameter extends SimpleGenericParameter(this) + + object DisabledParameter extends SimpleParameter { override val uid = "disabled" @SideOnly(Side.CLIENT) override def texture = disabledTexture } - object DisabledSensor extends SensorType { + object DisabledSensor extends SimpleSensor { + override def parameters = Vector(DisabledParameter) override def uid = "disabled" - override def defaultParameter = DisabledParameter - override def loadParameter(tag: NBTTagCompound) = DisabledParameter - override def saveParameter(p: GenericSensorParameter, tag: NBTTagCompound) = {} - override def getResult(param: GenericSensorParameter, obj: T) = defaultResult - override def paramClicked(current: GenericSensorParameter, item: ItemStack, button: Int, mod: Int) = DisabledParameter + + override def paramClicked(current: GenericSensorParameter, item: ItemStack, button: Int, mod: Int, obj: T): GenericSensorParameter = DisabledParameter + override def getResult(param: GenericSensorParameter, obj: T): R = defaultResult @SideOnly(Side.CLIENT) override def texture = disabledTexture diff --git a/src/net/bdew/lib/sensors/SimpleGenericSensor.scala b/src/net/bdew/lib/sensors/SimpleGenericSensor.scala index 90c693b..d9e2aa1 100644 --- a/src/net/bdew/lib/sensors/SimpleGenericSensor.scala +++ b/src/net/bdew/lib/sensors/SimpleGenericSensor.scala @@ -9,10 +9,20 @@ package net.bdew.lib.sensors +import cpw.mods.fml.relauncher.{Side, SideOnly} import net.bdew.lib.Misc +import net.bdew.lib.gui._ import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound +abstract class SimpleGenericParameter(system: SensorSystem[_, _]) extends GenericSensorParameter(system) { + @SideOnly(Side.CLIENT) + def texture: Texture + + @SideOnly(Side.CLIENT) + def textureColor = Color.white +} + abstract class SimpleGenericSensor[-T, +R](system: SensorSystem[T, R]) extends GenericSensorType[T, R](system) { def parameters: IndexedSeq[GenericSensorParameter] @@ -20,7 +30,7 @@ abstract class SimpleGenericSensor[-T, +R](system: SensorSystem[T, R]) extends G lazy val parameterMap = (parameters map (x => x.uid -> x)).toMap - override def paramClicked(current: GenericSensorParameter, item: ItemStack, button: Int, mod: Int) = + override def paramClicked(current: GenericSensorParameter, item: ItemStack, button: Int, mod: Int, obj: T) = if (item == null && button == 0 && mod == 0) Misc.nextInSeq(parameters, current) else if (item == null && button == 1 && mod == 0) @@ -30,5 +40,26 @@ 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) + + @SideOnly(Side.CLIENT) + def texture: Texture + + @SideOnly(Side.CLIENT) + def textureColor = Color.white + + @SideOnly(Side.CLIENT) + override def drawSensor(rect: Rect, target: DrawTarget, obj: T): Unit = { + target.drawTexture(rect, texture, textureColor) + } + + @SideOnly(Side.CLIENT) + override def drawParameter(rect: Rect, target: DrawTarget, obj: T, param: GenericSensorParameter): Unit = { + param match { + case x: SimpleGenericParameter => target.drawTexture(rect, x.texture, x.textureColor) + case _ => target.drawTexture(rect, system.DisabledParameter.texture, system.DisabledParameter.textureColor) + } + + } } diff --git a/src/net/bdew/lib/sensors/SlotSensorParameter.scala b/src/net/bdew/lib/sensors/SlotSensorParameter.scala index 204eb47..264ad3c 100644 --- a/src/net/bdew/lib/sensors/SlotSensorParameter.scala +++ b/src/net/bdew/lib/sensors/SlotSensorParameter.scala @@ -13,10 +13,12 @@ import net.bdew.lib.gui.SlotClickable import net.minecraft.entity.player.EntityPlayer import net.minecraft.inventory.{IInventory, Slot} -class SlotSensorParameter[T, R](inv: IInventory, index: Int, x: Int, y: Int, ds: DataSlotSensor[T, R]) extends Slot(inv, index, x, y) with SlotClickable { +class SlotSensorParameter[T, R](inv: IInventory, index: Int, x: Int, y: Int, ds: DataSlotSensor[T, R], obj: => Option[T]) extends Slot(inv, index, x, y) with SlotClickable { override def onClick(button: Int, mods: Int, player: EntityPlayer) = { - val newParam = ds.sensor.paramClicked(ds.param, player.inventory.getItemStack, button, mods) - ds := ds.value.copy(param = newParam) + obj foreach { x => + val newParam = ds.sensor.paramClicked(ds.param, player.inventory.getItemStack, button, mods, x) + ds := ds.value.copy(param = newParam) + } player.inventory.getItemStack } } diff --git a/src/net/bdew/lib/sensors/widgets/WidgetSensorParam.scala b/src/net/bdew/lib/sensors/widgets/WidgetSensorParam.scala index 122ddb4..59c0180 100644 --- a/src/net/bdew/lib/sensors/widgets/WidgetSensorParam.scala +++ b/src/net/bdew/lib/sensors/widgets/WidgetSensorParam.scala @@ -11,12 +11,12 @@ package net.bdew.lib.sensors.widgets import net.bdew.lib.gui._ import net.bdew.lib.gui.widgets.Widget -import net.bdew.lib.sensors.GenericSensorParameter +import net.bdew.lib.sensors.SensorPair import scala.collection.mutable -class WidgetSensorParam(val p: Point, param: => GenericSensorParameter) extends Widget { +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 += param.localizedName - override def draw(mouse: Point) = param.drawParam(rect, parent) + 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)) } diff --git a/src/net/bdew/lib/sensors/widgets/WidgetSensorType.scala b/src/net/bdew/lib/sensors/widgets/WidgetSensorType.scala index 6c5d85b..a6908e2 100644 --- a/src/net/bdew/lib/sensors/widgets/WidgetSensorType.scala +++ b/src/net/bdew/lib/sensors/widgets/WidgetSensorType.scala @@ -15,10 +15,10 @@ import net.bdew.lib.sensors.GenericSensorType import scala.collection.mutable -class WidgetSensorType[T, R](val p: Point, sensor: => GenericSensorType[T, R]) extends Widget { +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 draw(mouse: Point) = sensor.drawSensor(rect, parent) + override def draw(mouse: Point) = obj foreach (x => sensor.drawSensor(rect, parent, x)) }