Пример #1
0
 def __calculateClosestPoint(self, start, dir):
     dir.normalise()
     end = start + dir.scale(10000.0)
     testResTerrain = BigWorld.wg_collideSegment(BigWorld.player().spaceID, start, end, 128, 8)
     terrainSuitsForCheck = testResTerrain and testResTerrain[1].dot(Math.Vector3(0.0, 1.0, 0.0)) <= math.cos(ShotPointCalculatorPlanar.TERRAIN_MIN_ANGLE)
     testResNonTerrain = BigWorld.wg_collideSegment(BigWorld.player().spaceID, start, end, 136)
     testResDynamic = collideDynamic(start, end, (BigWorld.player().playerVehicleID,), False)
     closestPoint = None
     closestDist = 1000000
     isPointConvenient = True
     if testResTerrain:
         closestPoint = testResTerrain[0]
         closestDist = (testResTerrain[0] - start).length
     if terrainSuitsForCheck:
         isPointConvenient = closestDist >= ShotPointCalculatorPlanar.MIN_DIST
     if testResNonTerrain is not None:
         dist = (testResNonTerrain[0] - start).length
         if dist < closestDist:
             closestPoint = testResNonTerrain[0]
             closestDist = dist
             isPointConvenient = closestDist >= ShotPointCalculatorPlanar.MIN_DIST
     if closestPoint is None and testResDynamic is None:
         return (AimingSystems.shootInSkyPoint(start, dir), True)
     else:
         if testResDynamic is not None:
             dynDist = testResDynamic[0]
             if dynDist <= closestDist:
                 dir = end - start
                 dir.normalise()
                 closestPoint = start + dir * dynDist
                 isPointConvenient = True
         return (closestPoint, isPointConvenient)
 def __calculateClosestPoint(self, start, direction):
     direction.normalise()
     distance = self.__vehicleDesc.shot.maxDistance if self.__vehicleDesc is not None else 10000.0
     end = start + direction.scale(distance)
     testResStatic = BigWorld.wg_collideSegment(BigWorld.player().spaceID,
                                                start, end, 128)
     testResDynamic = collideDynamic(start, end,
                                     (BigWorld.player().playerVehicleID, ),
                                     False)
     closestPoint = None
     closestDist = 1000000
     isPointConvenient = True
     if testResStatic:
         closestPoint = testResStatic.closestPoint
         closestDist = (closestPoint - start).length
         shouldCheck = True
         if testResStatic.isTerrain():
             shouldCheck = testResStatic.normal.dot(
                 Math.Vector3(0.0, 1.0, 0.0)) <= math.cos(
                     ShotPointCalculatorPlanar.TERRAIN_MIN_ANGLE)
         if shouldCheck:
             isPointConvenient = closestDist >= self.__minDist
     if closestPoint is None and testResDynamic is None:
         return (AimingSystems.shootInSkyPoint(start, direction), True)
     else:
         if testResDynamic is not None:
             dynDist = testResDynamic[0]
             if dynDist <= closestDist:
                 direction = end - start
                 direction.normalise()
                 closestPoint = start + direction * dynDist
                 isPointConvenient = True
         return (closestPoint, isPointConvenient)
Пример #3
0
def SniperAimingSystem_getDesiredShotPoint(self, *args):
    start = self.matrix.translation
    dir = self.matrix.applyVector(Math.Vector3(0, 0, 1))

    end = start + dir.scale(10000.0)
    point = collideDynamicAndStatic(start, end, (BigWorld.player().playerVehicleID,), skipGun=False)
    if point is not None:
        result = point[0]
        self._shootDistance = (result - start).length
    else:
        if self._shootDistance > 0.0:
            result = start + dir.scale(self._shootDistance)
        else:
            result = AimingSystems.shootInSkyPoint(start, dir)

    return result
Пример #4
0
def SniperAimingSystem_getDesiredShotPoint(self):
    start = self.matrix.translation
    dir = self.matrix.applyVector(Math.Vector3(0, 0, 1))

    end = start + dir.scale(10000.0)
    point = collideDynamicAndStatic(start, end, (BigWorld.player().playerVehicleID,), skipGun=False)
    if point is not None:
        result = point[0]
        self._shootDistance = (result - start).length
    else:
        if self._shootDistance > 0.0:
            result = start + dir.scale(self._shootDistance)
        else:
            result = AimingSystems.shootInSkyPoint(start, dir)

    return result