Update handlers for agent based events.

This commit is contained in:
Florian Nücke 2015-02-03 19:05:51 +01:00
parent 664bfcfeca
commit fb0a9a33dd
7 changed files with 51 additions and 54 deletions

View File

@ -356,7 +356,8 @@ class TextBuffer(val host: EnvironmentHost) extends prefab.ManagedEnvironment wi
data.color(row)(col) = (packedForeground | packedBackground).toShort
}
}
// TODO Better for bandwidth to send packed shorts here. Would need a special case for handling on client, though...
// Better for bandwidth to send packed shorts here. Would need a special case for handling on client,
// though, so let's be wasteful for once...
proxy.onBufferRawSetBackground(col, row, color)
}
@ -369,7 +370,8 @@ class TextBuffer(val host: EnvironmentHost) extends prefab.ManagedEnvironment wi
data.color(row)(col) = (packedForeground | packedBackground).toShort
}
}
// TODO Better for bandwidth to send packed shorts here. Would need a special case for handling on client, though...
// Better for bandwidth to send packed shorts here. Would need a special case for handling on client,
// though, so let's be wasteful for once...
proxy.onBufferRawSetForeground(col, row, color)
}

View File

@ -1,15 +1,20 @@
package li.cil.oc.common.event
import cpw.mods.fml.common.eventhandler.SubscribeEvent
import li.cil.oc.api
import li.cil.oc.api.event.RobotPlaceInAirEvent
import li.cil.oc.api.network.Component
import li.cil.oc.server.component.UpgradeAngel
import scala.collection.convert.WrapAsScala._
object AngelUpgradeHandler {
@SubscribeEvent
def onPlaceInAir(e: RobotPlaceInAirEvent) {
// TODO Generalize Agent interface for access to their components.
// val startComponents = 1 + e.robot.containerCount + e.robot.inventorySize
// e.setAllowed(((1 to e.robot.containerCount) ++ (startComponents until startComponents + e.robot.componentCount)).
// exists(slot => api.Items.get(e.robot.getStackInSlot(slot)) == api.Items.get("angelUpgrade")))
val machineNode = e.agent.machine.node
machineNode.reachableNodes.exists {
case component: Component if component.canBeSeenFrom(machineNode) =>
component.host.isInstanceOf[UpgradeAngel]
case _ => false
}
}
}

View File

@ -55,13 +55,11 @@ object ChunkloaderUpgradeHandler extends LoadingCallback {
@SubscribeEvent
def onMove(e: RobotMoveEvent.Post) {
// TODO Generalize Agent interface for access to their components.
// for (slot <- 0 until e.robot.getSizeInventory) {
// e.robot.getComponentInSlot(slot) match {
// case loader: UpgradeChunkloader => updateLoadedChunk(loader)
// case _ =>
// }
// }
val machineNode = e.agent.machine.node
machineNode.reachableNodes.foreach(_.host match {
case loader: UpgradeChunkloader => updateLoadedChunk(loader)
case _ =>
})
}
def updateLoadedChunk(loader: UpgradeChunkloader) {

View File

@ -6,9 +6,12 @@ import li.cil.oc.Settings
import li.cil.oc.api.event._
import li.cil.oc.api.internal.Agent
import li.cil.oc.api.internal.Robot
import li.cil.oc.api.network.Node
import li.cil.oc.server.component
import org.lwjgl.opengl.GL11
import scala.collection.convert.WrapAsScala._
object ExperienceUpgradeHandler {
@SubscribeEvent
def onRobotAnalyze(e: RobotAnalyzeEvent) {
@ -32,10 +35,13 @@ object ExperienceUpgradeHandler {
@SubscribeEvent
def onRobotAttackEntityPost(e: RobotAttackEntityEvent.Post) {
// TODO Generalize Agent interface for access to their components.
// if (e.robot.getComponentInSlot(e.robot.selectedSlot()) != null && e.target.isDead) {
// addExperience(e.robot, Settings.get.robotActionXp)
// }
e.agent match {
case robot: Robot =>
if (robot.getComponentInSlot(robot.selectedSlot()) != null && e.target.isDead) {
addExperience(robot, Settings.get.robotActionXp)
}
case _ =>
}
}
@SubscribeEvent
@ -74,40 +80,28 @@ object ExperienceUpgradeHandler {
private def getLevel(agent: Agent) = {
var level = 0
// TODO Generalize Agent interface for access to their components.
// for (index <- 0 until agent.getSizeInventory) {
// agent.getComponentInSlot(index) match {
// case upgrade: component.UpgradeExperience =>
// level += upgrade.level
// case _ =>
// }
// }
foreachUpgrade(agent.machine.node, upgrade => level += upgrade.level)
level
}
private def getLevelAndExperience(agent: Agent) = {
var level = 0
var experience = 0.0
// TODO Generalize Agent interface for access to their components.
// for (index <- 0 until agent.getSizeInventory) {
// agent.getComponentInSlot(index) match {
// case upgrade: component.UpgradeExperience =>
// level += upgrade.level
// experience += upgrade.experience
// case _ =>
// }
// }
foreachUpgrade(agent.machine.node, upgrade => {
level += upgrade.level
experience += upgrade.experience
})
(level, experience)
}
private def addExperience(agent: Agent, amount: Double) {
// TODO Generalize Agent interface for access to their components.
// for (index <- 0 until agent.getSizeInventory) {
// agent.getComponentInSlot(index) match {
// case upgrade: component.UpgradeExperience =>
// upgrade.addExperience(amount)
// case _ =>
// }
// }
foreachUpgrade(agent.machine.node, upgrade => upgrade.addExperience(amount))
}
private def foreachUpgrade(node: Node, f: (component.UpgradeExperience) => Unit): Unit = {
node.reachableNodes.foreach(_.host match {
case upgrade: component.UpgradeExperience => f(upgrade)
case _ =>
})
}
}

View File

@ -5,16 +5,15 @@ import li.cil.oc.api
import li.cil.oc.api.event.RobotMoveEvent
import li.cil.oc.server.component.WirelessNetworkCard
import scala.collection.convert.WrapAsScala._
object WirelessNetworkCardHandler {
@SubscribeEvent
def onMove(e: RobotMoveEvent.Post) {
// TODO Generalize Agent interface for access to their components.
// val startComponents = 1 + e.robot.containerCount + e.robot.inventorySize
// for (slot <- (1 to e.robot.containerCount) ++ (startComponents until startComponents + e.robot.componentCount)) {
// e.robot.getComponentInSlot(slot) match {
// case card: WirelessNetworkCard => api.Network.updateWirelessNetwork(card)
// case _ =>
// }
// }
val machineNode = e.agent.machine.node
machineNode.reachableNodes.foreach(_.host match {
case card: WirelessNetworkCard => api.Network.updateWirelessNetwork(card)
case _ =>
})
}
}

View File

@ -189,9 +189,9 @@ class TabletWrapper(var stack: ItemStack, var player: EntityPlayer) extends Comp
override def facing = RotationHelper.fromYaw(player.rotationYaw)
override def toLocal(value: ForgeDirection) = value // TODO do we care?
override def toLocal(value: ForgeDirection) = value // -T-O-D-O- do we care? no we don't
override def toGlobal(value: ForgeDirection) = value // TODO do we care?
override def toGlobal(value: ForgeDirection) = value // -T-O-D-O- do we care? no we don't
def readFromNBT() {
if (stack.hasTagCompound) {

View File

@ -258,7 +258,6 @@ class Player(val robot: tileentity.Robot) extends FakePlayer(robot.world.asInsta
return 0
}
// TODO Is this already handled via the event?
if (MinecraftServer.getServer.isBlockProtected(world, x, y, z, this)) {
return 0
}