blob: 73c974f0a29c15ca8443a8564b61aad28080d47f [file] [log] [blame] [raw]
package li.cil.oc.api.power
import li.cil.oc.api.network.{Message, Node}
import net.minecraft.nbt.NBTTagCompound
import scala.collection.mutable
trait Provider {
//
// var isActive = false
// var updateNodes = false
// var energyDemand = 0.0
// var storedEnergy = 0.0
// var MAXENERGY: Double = 2000.0
//
// var energyStorageList = mutable.Set[EnergyStorage]()
//
// override def receive(message: Message): Array[AnyRef] = Option(super.receive(message)).orElse {
// if (message.source != this) {
// message.name match {
// case "system.connect" => {
// message.source match {
// case distributor: Provider =>
// //if other powerDistributor connected and is active set inactive
// if (distributor.isActive) {
// isActive = false
// println("demand now (disabled) " + 0)
// }
// case _ =>
// }
// }
// case "power.find" => {
// message.source match {
// case distributor: Provider =>
// if (isActive) {
// message.cancel()
// return Array(this)
// }
// case _ =>
// }
// }
// case "system.disconnect" => {
// message.source match {
// case distributor: Provider =>
// println("distri disc recieved")
// if (distributor.isActive) {
// searchMain()
// }
// case _ =>
// }
// }
// case _ => // Ignore.
// }
// }
// None
// }.orNull
//
// override protected def onConnect() {
// //check if other distributors already are in the network
// searchMain()
// super.onConnect()
// }
//
// override abstract def readFromNBT(nbt: NBTTagCompound) = {
// super.load(nbt)
// storedEnergy = nbt.getDouble("storedEnergy")
// }
//
// override abstract def writeToNBT(nbt: NBTTagCompound) = {
// super.save(nbt)
// nbt.setDouble("storedEnergy", storedEnergy)
// }
//
// /**
// * Connect a reciever to the provider
// * @param receiver
// * @param amount
// */
// def connectNode(receiver: Receiver, amount: Double) {
// if (!energyStorageList.exists(_.node == receiver)) {
// energyStorageList += new EnergyStorage(receiver, amount)
// energyDemand += amount
// updateNodes = true
// }
//
// if (isActive)
// println("demand now (connect)" + energyDemand)
// }
//
// /**
// * Updates the demand of the node to the given value
// * @param receiver
// * @param demand
// */
// def updateDemand(receiver: Receiver, demand: Double) {
// energyStorageList.filter(n => n.node == receiver).foreach(n => {
// energyDemand -= n.amount
// energyDemand += demand
// n.amount = demand
// })
// if (isActive)
// println("demand now (update)" + energyDemand)
// }
//
// def disconnectNode(receiver: Receiver) {
// energyStorageList.clone().foreach(e => {
// if (e == null || receiver == null) {
// println("something null")
//
// }
// else if (e.node == receiver) {
// energyStorageList -= e
// energyDemand -= e.amount
// if (isActive) {
// receiver.isReceivingPower = false
// updateNodes = true
// }
// }
//
// })
// if (isActive)
// println("demand now (disc) " + energyDemand)
// }
//
// private var hasEnergy = false
// override def update() {
// super.update()
// //check if is main
// if (isActive) {
// //if enough energy is available to supply all receivers
// if (storedEnergy > energyDemand) {
// storedEnergy -= energyDemand
// if (!hasEnergy)
// updateNodes = true
// hasEnergy = true
// println("energy level now " + storedEnergy)
// }
// else {
// if (hasEnergy)
// updateNodes = true
// hasEnergy = false
// }
// //if nodes must be updated send message to them
// if (updateNodes) {
// if (hasEnergy)
// energyStorageList.foreach(storage => storage.node.isReceivingPower = true)
// else
// energyStorageList.foreach(storage => storage.node.isReceivingPower = false)
// updateNodes = false
// }
// }
// }
//
// def getDemand = {
// MAXENERGY - storedEnergy max 0.0
// }
//
// def addEnergy(amount: Double) {
// storedEnergy += amount
// }
//
// def searchMain() {
// network.foreach(_.sendToReachable(this, "power.find") match {
// case Array(powerDistributor: Provider) => {
// println("found other distri")
// isActive = false
// }
// case _ => {
// println("no other")
// isActive = true
// updateNodes = true
// println("demand now (new main) " + energyDemand)
// }
// })
// }
//
// class EnergyStorage(var node: Receiver, var amount: Double)
//
}