More work on sensor system

This commit is contained in:
bdew committed 2015-03-25 10:46:18 +02:00
1 parent 284cdfc970
commit 8e65772cae
7 files changed
+60 -41

No files matched your search

@@ -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
}
@@ -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
}
+10 -10
View File
@@ -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
@@ -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)
}
}
}
@@ -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
}
}
@@ -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))
}
@@ -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))
}