mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-10 15:56:41 -04:00
power calculation on merge splitting and removing nodes
This commit is contained in:
parent
26dbecd80f
commit
35eae71b29
@ -9,7 +9,7 @@ object Blocks {
|
|||||||
var screen: Screen = null
|
var screen: Screen = null
|
||||||
var keyboard: Keyboard = null
|
var keyboard: Keyboard = null
|
||||||
var powersupply: PowerSupply = null
|
var powersupply: PowerSupply = null
|
||||||
var powerdistributer: PowerDistributer = null
|
var powerdistributer: PowerDistributor = null
|
||||||
def init() {
|
def init() {
|
||||||
// IMPORTANT: the multi block must come first, since the sub blocks will
|
// IMPORTANT: the multi block must come first, since the sub blocks will
|
||||||
// try to register with it. Also, the order the sub blocks are created in
|
// try to register with it. Also, the order the sub blocks are created in
|
||||||
@ -21,6 +21,6 @@ object Blocks {
|
|||||||
screen = new Screen(blockSimple)
|
screen = new Screen(blockSimple)
|
||||||
keyboard = new Keyboard(blockSpecial)
|
keyboard = new Keyboard(blockSpecial)
|
||||||
powersupply = new PowerSupply(blockSimple)
|
powersupply = new PowerSupply(blockSimple)
|
||||||
powerdistributer = new PowerDistributer(blockSimple)
|
powerdistributer = new PowerDistributor(blockSimple)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,30 +1,34 @@
|
|||||||
package li.cil.oc.api.network
|
package li.cil.oc.api.network
|
||||||
|
|
||||||
/**
|
|
||||||
* Created with IntelliJ IDEA.
|
trait PoweredNode extends Node {
|
||||||
* User: lordjoda
|
var main: Node = null
|
||||||
* Date: 04.10.13
|
var demand = 2
|
||||||
* Time: 17:29
|
|
||||||
* To change this template use File | Settings | File Templates.
|
|
||||||
*/
|
|
||||||
trait PoweredNode extends Node{
|
|
||||||
var main:Node = null
|
|
||||||
var demand = 2;
|
|
||||||
override def receive(message: Message): Option[Array[Any]] = {
|
override def receive(message: Message): Option[Array[Any]] = {
|
||||||
val ret = super.receive(message)
|
val ret = super.receive(message)
|
||||||
message.name match {
|
message.name match {
|
||||||
case "power.connect" => {
|
case "power.connect" => {
|
||||||
println("connect")
|
if (main != message.source) {
|
||||||
if(main != message.source){
|
if (main != null)
|
||||||
println("setting main")
|
network.foreach(_.sendToAddress(this, main.address.get, "power.disconnect"))
|
||||||
main = message.source
|
main = message.source
|
||||||
network.foreach(_.sendToAddress(this,message.source.address.get,"power.request",demand))
|
network.foreach(_.sendToAddress(this, message.source.address.get, "power.request", demand, 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
case "network.disconnect"=> {if(message.source == main)main = null}
|
case "network.disconnect" => {
|
||||||
|
if (message.source == main) main = null
|
||||||
|
}
|
||||||
case _ => // Ignore.
|
case _ => // Ignore.
|
||||||
}
|
}
|
||||||
return ret
|
ret
|
||||||
|
}
|
||||||
|
|
||||||
|
override protected def onDisconnect() {
|
||||||
|
println("sending disc")
|
||||||
|
network.foreach(_.sendToAddress(this, main.address.get, "power.disconnect"))
|
||||||
|
|
||||||
|
super.onDisconnect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,16 +4,10 @@ import cpw.mods.fml.common.registry.GameRegistry
|
|||||||
import li.cil.oc.common.tileentity
|
import li.cil.oc.common.tileentity
|
||||||
import net.minecraft.world.World
|
import net.minecraft.world.World
|
||||||
|
|
||||||
/**
|
|
||||||
* Created with IntelliJ IDEA.
|
class PowerDistributor (val parent: Delegator) extends Delegate {
|
||||||
* User: lordjoda
|
GameRegistry.registerTileEntity(classOf[tileentity.PowerDistributor], "oc.powerdistributor" )
|
||||||
* Date: 03.10.13
|
val unlocalizedName = "PowerDistributor"
|
||||||
* Time: 19:48
|
|
||||||
* To change this template use File | Settings | File Templates.
|
|
||||||
*/
|
|
||||||
class PowerDistributer (val parent: Delegator) extends Delegate {
|
|
||||||
GameRegistry.registerTileEntity(classOf[tileentity.PowerDistributer], "oc.powerdistributer" )
|
|
||||||
val unlocalizedName = "PowerDistributer"
|
|
||||||
|
|
||||||
override def breakBlock(world: World, x: Int, y: Int, z: Int, blockId: Int, metadata: Int) = {
|
override def breakBlock(world: World, x: Int, y: Int, z: Int, blockId: Int, metadata: Int) = {
|
||||||
//world.getBlockTileEntity(x, y, z).asInstanceOf[tileentity.PowerDistributer]
|
//world.getBlockTileEntity(x, y, z).asInstanceOf[tileentity.PowerDistributer]
|
||||||
@ -25,6 +19,6 @@ class PowerDistributer (val parent: Delegator) extends Delegate {
|
|||||||
|
|
||||||
override def hasTileEntity = true
|
override def hasTileEntity = true
|
||||||
|
|
||||||
override def createTileEntity(world: World, metadata: Int) = Some(new tileentity.PowerDistributer)
|
override def createTileEntity(world: World, metadata: Int) = Some(new tileentity.PowerDistributor)
|
||||||
}
|
}
|
||||||
|
|
@ -1,72 +0,0 @@
|
|||||||
package li.cil.oc.common.tileentity
|
|
||||||
|
|
||||||
import li.cil.oc.api.network.{PoweredNode, Message, Visibility, Node}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created with IntelliJ IDEA.
|
|
||||||
* User: lordjoda
|
|
||||||
* Date: 03.10.13
|
|
||||||
* Time: 19:51
|
|
||||||
* To change this template use File | Settings | File Templates.
|
|
||||||
*/
|
|
||||||
class PowerDistributer extends Rotatable with PoweredNode {
|
|
||||||
|
|
||||||
var powerDemand:Int = 0
|
|
||||||
override def name = "powerdistributer"
|
|
||||||
|
|
||||||
override def visibility = Visibility.Network
|
|
||||||
|
|
||||||
|
|
||||||
override def receive(message: Message): Option[Array[Any]] = {
|
|
||||||
|
|
||||||
message.name match {
|
|
||||||
case "network.disconnect"=> {
|
|
||||||
println("recieved disc")
|
|
||||||
if(message.source == main){
|
|
||||||
main = this
|
|
||||||
network.foreach(_.sendToAddress(this,address.get,"power.request",demand))
|
|
||||||
network.foreach(_.sendToVisible(this, "power.connect"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case _ => // Ignore.
|
|
||||||
}
|
|
||||||
val ret = super.receive(message)
|
|
||||||
message.name match {
|
|
||||||
case "network.connect"=>{
|
|
||||||
if(main==this){
|
|
||||||
network.foreach(_.sendToAddress(this,message.source.address.get,"power.connect"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case "power.find"=>{
|
|
||||||
if(main==this){
|
|
||||||
network.foreach(_.sendToAddress(this,message.source.address.get,"power.connect"))
|
|
||||||
message.cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case "power.request"=>{
|
|
||||||
println("recieved power request")
|
|
||||||
if(main == this){
|
|
||||||
println("this is main")
|
|
||||||
message.data match {
|
|
||||||
case Array(value:Int)=> {
|
|
||||||
powerDemand+=value
|
|
||||||
println("now demanding "+powerDemand)
|
|
||||||
}
|
|
||||||
case _ => // Ignore.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case _ => // Ignore.
|
|
||||||
}
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
override protected def onConnect() {
|
|
||||||
network.foreach(_.sendToVisible(this, "power.find"))
|
|
||||||
if(main==null)
|
|
||||||
{ main = this
|
|
||||||
network.foreach(_.sendToAddress(this,address.get,"power.request",demand))
|
|
||||||
}
|
|
||||||
super.onConnect()
|
|
||||||
}
|
|
||||||
}
|
|
98
li/cil/oc/common/tileentity/PowerDistributor.scala
Normal file
98
li/cil/oc/common/tileentity/PowerDistributor.scala
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
package li.cil.oc.common.tileentity
|
||||||
|
|
||||||
|
import li.cil.oc.api.network.{PoweredNode, Message, Visibility, Node}
|
||||||
|
import scala.collection.mutable.ArrayBuffer
|
||||||
|
|
||||||
|
|
||||||
|
class PowerDistributor extends Rotatable with PoweredNode {
|
||||||
|
|
||||||
|
|
||||||
|
var arrayBuffer = ArrayBuffer[EnergyStorage]()
|
||||||
|
var energyDemand = 0
|
||||||
|
demand = 1
|
||||||
|
|
||||||
|
override def name = "powerdistributor"
|
||||||
|
|
||||||
|
override def visibility = Visibility.Network
|
||||||
|
|
||||||
|
|
||||||
|
override def receive(message: Message): Option[Array[Any]] = {
|
||||||
|
|
||||||
|
message.name match {
|
||||||
|
case "network.disconnect" => {
|
||||||
|
if (message.source == main) {
|
||||||
|
main = this
|
||||||
|
network.foreach(_.sendToAddress(this, address.get, "power.request", 1, -1))
|
||||||
|
network.foreach(_.sendToVisible(this, "power.connect"))
|
||||||
|
}
|
||||||
|
disconnectNode(message.source)
|
||||||
|
|
||||||
|
}
|
||||||
|
case _ => // Ignore.
|
||||||
|
}
|
||||||
|
val ret = super.receive(message)
|
||||||
|
message.name match {
|
||||||
|
case "network.connect" => {
|
||||||
|
if (main == this) {
|
||||||
|
network.foreach(_.sendToAddress(this, message.source.address.get, "power.connect"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "power.find" => {
|
||||||
|
if (main == this) {
|
||||||
|
network.foreach(_.sendToAddress(this, message.source.address.get, "power.connect"))
|
||||||
|
message.cancel()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "power.request" => {
|
||||||
|
if (main == this) {
|
||||||
|
|
||||||
|
message.data match {
|
||||||
|
case Array(value: Int, priority: Int) => {
|
||||||
|
if (arrayBuffer.filter(_.node == message.source).isEmpty) {
|
||||||
|
arrayBuffer += new EnergyStorage(message.source, value, priority)
|
||||||
|
|
||||||
|
energyDemand += value
|
||||||
|
println("demand now " + energyDemand)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case _ => println("unknown format")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "power.disconnect" => {
|
||||||
|
println("received disc asd")
|
||||||
|
disconnectNode(message.source)
|
||||||
|
|
||||||
|
}
|
||||||
|
case _ => // Ignore.
|
||||||
|
}
|
||||||
|
ret
|
||||||
|
}
|
||||||
|
def disconnectNode(node:Node){
|
||||||
|
arrayBuffer.clone().foreach(e => {
|
||||||
|
if (e == null || node == null) {
|
||||||
|
println("something null")
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (e.node == node) {
|
||||||
|
arrayBuffer -= e
|
||||||
|
energyDemand -= e.amount
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
println("demand now after " + energyDemand)
|
||||||
|
}
|
||||||
|
override protected def onConnect() {
|
||||||
|
network.foreach(_.sendToVisible(this, "power.find"))
|
||||||
|
if (main == null) {
|
||||||
|
main = this
|
||||||
|
network.foreach(_.sendToAddress(this, address.get, "power.request", demand, 0))
|
||||||
|
}
|
||||||
|
super.onConnect()
|
||||||
|
}
|
||||||
|
|
||||||
|
class EnergyStorage(var node: Node, var amount: Int, var priority: Int) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user