Ejemplo n.º 1
0
    def calculateIntercept(self, pos1, pos2):
        pos1 = Vector3()
        pos2 = Vector3()
        v1 = pos1.getIntermediateWithXValue(pos2, self.minX)
        v2 = pos1.getIntermediateWithXValue(pos2, self.maxX)
        v3 = pos1.getIntermediateWithYValue(pos2, self.minY)
        v4 = pos1.getIntermediateWithYValue(pos2, self.maxY)
        v5 = pos1.getIntermediateWithZValue(pos2, self.minZ)
        v6 = pos1.getIntermediateWithZValue(pos2, self.maxY)

        if v1 != None and not self.isVectorYZ(v1):
            v1 = None

        if v2 != None and not self.isVectorYZ(v2):
            v2 = None

        if v3 != None and not self.isVectorXZ(v3):
            v3 = None

        if v4 != None and not self.isVectorXZ(v4):
            v4 = None

        if v5 != None and not self.isVectorXY(v5):
            v5 = None

        if v6 != None and not self.isVectorXY(v6):
            v6 = None

        vector = None
        distance = sys.maxint

        for v in [v1, v2, v3, v4, v5, v6]:
            d = pos1.distanceSquared(v)
            if v != None and d < distance:
                vector = v
                distance = d

        if vector == None:
            return None

        f = -1

        if vector == v1:
            f = Facing.WEST
        elif vector == v2:
            f = Facing.EAST
        elif vector == v3:
            f = Facing.DOWN
        elif vector == v4:
            f = Facing.UP
        elif vector == v5:
            f = Facing.NORTH
        elif vector == v6:
            f = Facing.SOUTH

        return RayTraceResult(self, f, vector)
Ejemplo n.º 2
0
    def isVectorInside(self, vector):
        vector = Vector3()
        if vector.x <= self.minX or vector.x >= self.maxX:
            return False
        if vector.y <= self.minY or vector.y >= self.maxY:
            return False

        return vector.z > self.minZ and vector.z < self.maxZ
Ejemplo n.º 3
0
 def isVectorInXY(self, vector):
     vector = Vector3()
     return vector.x >= self.minX and vector.x <= self.maxX and vector.y >= self.minY and vector.y <= self.maxY
Ejemplo n.º 4
0
 def isVectorInXZ(self, vector):
     vector = Vector3()
     return vector.x >= self.minX and vector.x <= self.maxX and vector.z >= self.minZ and vector.z <= self.maxZ
Ejemplo n.º 5
0
 def isVectorInXZ(self, vector):
     vector = Vector3()
     return vector.y >= self.minY and vector.y <= self.maxY and vector.z >= self.minZ and vector.z <= self.maxZ