removed usages of client side only methods from wireless network logic (screw the Vec3 class, seriously), fixes #107

This commit is contained in:
Florian Nücke 2014-01-30 15:34:48 +01:00
parent 1f333cd7e7
commit 11b9d50f08

View File

@ -3,6 +3,7 @@ package li.cil.oc.util
import li.cil.oc.Settings import li.cil.oc.Settings
import li.cil.oc.server.component.WirelessNetworkCard import li.cil.oc.server.component.WirelessNetworkCard
import net.minecraft.block.Block import net.minecraft.block.Block
import net.minecraft.util.Vec3
import net.minecraftforge.event.ForgeSubscribe import net.minecraftforge.event.ForgeSubscribe
import net.minecraftforge.event.world.WorldEvent import net.minecraftforge.event.world.WorldEvent
import scala.collection.mutable import scala.collection.mutable
@ -61,7 +62,9 @@ object WirelessNetwork {
filter(_ != card). filter(_ != card).
map(zipWithDistance(card)). map(zipWithDistance(card)).
filter(_._2 <= range * range). filter(_._2 <= range * range).
map { case (c, distance) => (c, Math.sqrt(distance)) }. map {
case (c, distance) => (c, Math.sqrt(distance))
}.
filter(isUnobstructed(card)) filter(isUnobstructed(card))
case _ => Iterable.empty[(WirelessNetworkCard, Double)] // Should not be possible. case _ => Iterable.empty[(WirelessNetworkCard, Double)] // Should not be possible.
} }
@ -96,7 +99,7 @@ object WirelessNetwork {
val target = pool.getVecFromPool(card.owner.xCoord, card.owner.yCoord, card.owner.zCoord) val target = pool.getVecFromPool(card.owner.xCoord, card.owner.yCoord, card.owner.zCoord)
// Vector from reference card (sender) to this one (receiver). // Vector from reference card (sender) to this one (receiver).
val delta = origin.subtract(target) val delta = subtract(target, origin)
val v = delta.normalize() val v = delta.normalize()
// Get the vectors that are orthogonal to the direction vector. // Get the vectors that are orthogonal to the direction vector.
@ -107,8 +110,8 @@ object WirelessNetwork {
else { else {
pool.getVecFromPool(0, 1, 0) pool.getVecFromPool(0, 1, 0)
} }
val side = v.crossProduct(up) val side = crossProduct(v, up)
val top = v.crossProduct(side) val top = crossProduct(v, side)
// Accumulated obstructions and number of samples. // Accumulated obstructions and number of samples.
//val delta = v.lengthVector //val delta = v.lengthVector
@ -141,4 +144,8 @@ object WirelessNetwork {
} }
else true else true
} }
private def subtract(v1: Vec3, v2: Vec3) = v1.myVec3LocalPool.getVecFromPool(v1.xCoord - v2.xCoord, v1.yCoord - v2.yCoord, v1.zCoord - v2.zCoord)
private def crossProduct(v1: Vec3, v2: Vec3) = v1.myVec3LocalPool.getVecFromPool(v1.yCoord * v2.zCoord - v1.zCoord * v2.yCoord, v1.zCoord * v2.xCoord - v1.xCoord * v2.zCoord, v1.xCoord * v2.yCoord - v1.yCoord * v2.xCoord)
} }