mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-09 07:15:11 -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 keyboard: Keyboard = null
|
||||
var powersupply: PowerSupply = null
|
||||
var powerdistributer: PowerDistributer = null
|
||||
var powerdistributer: PowerDistributor = null
|
||||
def init() {
|
||||
// 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
|
||||
@ -21,6 +21,6 @@ object Blocks {
|
||||
screen = new Screen(blockSimple)
|
||||
keyboard = new Keyboard(blockSpecial)
|
||||
powersupply = new PowerSupply(blockSimple)
|
||||
powerdistributer = new PowerDistributer(blockSimple)
|
||||
powerdistributer = new PowerDistributor(blockSimple)
|
||||
}
|
||||
}
|
@ -1,30 +1,34 @@
|
||||
package li.cil.oc.api.network
|
||||
|
||||
/**
|
||||
* Created with IntelliJ IDEA.
|
||||
* User: lordjoda
|
||||
* Date: 04.10.13
|
||||
* Time: 17:29
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
trait PoweredNode extends Node{
|
||||
var main:Node = null
|
||||
var demand = 2;
|
||||
|
||||
trait PoweredNode extends Node {
|
||||
var main: Node = null
|
||||
var demand = 2
|
||||
|
||||
override def receive(message: Message): Option[Array[Any]] = {
|
||||
val ret = super.receive(message)
|
||||
message.name match {
|
||||
case "power.connect" => {
|
||||
println("connect")
|
||||
if(main != message.source){
|
||||
println("setting main")
|
||||
if (main != message.source) {
|
||||
if (main != null)
|
||||
network.foreach(_.sendToAddress(this, main.address.get, "power.disconnect"))
|
||||
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.
|
||||
}
|
||||
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 net.minecraft.world.World
|
||||
|
||||
/**
|
||||
* Created with IntelliJ IDEA.
|
||||
* User: lordjoda
|
||||
* Date: 03.10.13
|
||||
* 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"
|
||||
|
||||
class PowerDistributor (val parent: Delegator) extends Delegate {
|
||||
GameRegistry.registerTileEntity(classOf[tileentity.PowerDistributor], "oc.powerdistributor" )
|
||||
val unlocalizedName = "PowerDistributor"
|
||||
|
||||
override def breakBlock(world: World, x: Int, y: Int, z: Int, blockId: Int, metadata: Int) = {
|
||||
//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 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