def shootProjectile(owner, target, projectile, trail=None, boom=None, srcoff=Vector3(0, 1.5, 0), dstoff=Vector3(0, 1.2, 0), motor=None): if hasattr(target, 'matrix'): targetMatrix = target.matrix else: targetMatrix = target if not boom and dstoff: dstoff.y = 1.8 if not dstoff: dstoff = Vector3(0, 0, 0) owner.addModel(projectile) projectile.position = Vector3(owner.position) + srcoff if not motor: motor = BigWorld.Homer() motor.speed = projectileSpeed motor.turnRate = 10 if dstoff.lengthSquared == 0: motor.target = targetMatrix else: motor.target = MatrixProduct() motor.target.a = targetMatrix motor.target.b = Matrix() motor.target.b.setTranslate(dstoff) if motor.tripTime <= 0.0: sourcePosition = Vector3(owner.position) + srcoff targetPosition = Vector3(Matrix(targetMatrix).applyToOrigin()) + dstoff speed = motor.speed t = calculateTripTime(sourcePosition, targetPosition, speed) if t == 0: owner.delModel(projectile) return 0 motor.tripTime = t projectile.addMotor(motor) if trail: trail(projectile, None, motor.tripTime) motor.proximity = 1.0 if boom: motor.proximityCallback = boom else: motor.proximityCallback = partial(owner.delModel, projectile) return motor.tripTime