mirror of
https://github.com/GTNewHorizons/bdlib.git
synced 2026-11-13 16:54:11 +00:00
More work on sensor system
This commit is contained in:
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
|
||||
}
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user