better check for whether power redistribution is needed and reduced number of network packets generated for synchronizing average buffer fill (used for display, brightness of overlay on distributor)

This commit is contained in:
Florian Nücke 2013-11-04 01:44:15 +01:00
parent 521613f3f8
commit f4641d59e8

View File

@ -16,6 +16,8 @@ class PowerDistributor extends Rotatable with Environment {
var average = 0.0 var average = 0.0
private var lastSentAverage = 0.0
// ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- //
override def updateEntity() { override def updateEntity() {
@ -77,16 +79,17 @@ class PowerDistributor extends Rotatable with Environment {
private def computeAverage() = { private def computeAverage() = {
// Computer average fill ratio of all buffers. // Computer average fill ratio of all buffers.
val (sumBuffer, sumBufferSize) = connectors.foldRight((0.0, 0.0))((c, acc) => { val (minRelativeBuffer, maxRelativeBuffer, sumBuffer, sumBufferSize) =
c.dirty = false // clear dirty flag for all connectors connectors.foldRight((1.0, 0.0, 0.0, 0.0))((c, acc) => {
(acc._1 + c.buffer, acc._2 + c.bufferSize) c.dirty = false // clear dirty flag for all connectors
}) (acc._1 min (c.buffer / c.bufferSize), acc._2 max (c.buffer / c.bufferSize),
val newAverage = if (sumBufferSize > 0) sumBuffer / sumBufferSize else 0 acc._3 + c.buffer, acc._4 + c.bufferSize)
if ((average - newAverage).abs > 10e-4) { })
average = newAverage average = if (sumBufferSize > 0) sumBuffer / sumBufferSize else 0
if ((lastSentAverage - average).abs > 0.05) {
lastSentAverage = average
ServerPacketSender.sendPowerState(this) ServerPacketSender.sendPowerState(this)
true
} }
else false maxRelativeBuffer - minRelativeBuffer > 10e-4
} }
} }