Ñò
ªÝjPc        	   @   s�   d  d k  Z  d  d k Z d  d k Z d  d k Z d  d k l Z l Z l Z d  d k Td e	 f d „  ƒ  YZ
 d e	 f d „  ƒ  YZ d „  Z d S(	   iÿÿÿÿN(   t   Vector3t   Vector2t   Matrix(   t   *t   ModelHitTesterc           B   s€   e  Z d Z d  „  Z e d „  e ƒ Z d d „ Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z e d	 „ Z d
 „  Z RS(   c         C   s   |  i  ƒ  | |  _ d  S(   N(   t   releaseBspModelt   _ModelHitTester__bspModelName(   t   selft   value(    (    s    scripts/common/ModelHitTester.pyt   __setBspModelName   s    
c         C   s   |  i  S(    (   R   (   R   (    (    s    scripts/common/ModelHitTester.pyt   <lambda>   s    c         C   sP   d  |  _ d  |  _ | d  j	 o- | i d ƒ |  _ |  i p t d ‚ qL n d  S(   Nt   collisionModels$   <collisionModel> is missing or wrong(   t   Nonet   _ModelHitTester__bspModelR   t
   readStringt	   Exception(   R   t   dataSection(    (    s    scripts/common/ModelHitTester.pyt   __init__   s    		
c         C   s   |  i  d  j	 S(   N(   R   R   (   R   (    (    s    scripts/common/ModelHitTester.pyt   isBspModelLoaded#   s    c         C   sd   |  i  d  j	 o d  St i ƒ  } | i |  i ƒ p t d |  i ‚ n | |  _  | i ƒ  |  _ d  S(   Ns   wrong collision model '%s'(	   R   R   t   BigWorldt   WGBspCollisionModelt   setModelNamet   bspModelNameR   t   getBoundingBoxt   bbox(   R   t   bspModel(    (    s    scripts/common/ModelHitTester.pyt   loadBspModel(   s    	c         C   s'   |  i  d  j	 o d  |  _  |  ` n d  S(   N(   R   R   R   (   R   (    (    s    scripts/common/ModelHitTester.pyR   6   s    	c         C   s   |  i  i | | ƒ S(   N(   R   t   collideSegmentAny(   R   t   startt   stop(    (    s    scripts/common/ModelHitTester.pyt   localAnyHitTestB   s    c         C   s   |  i  i | | ƒ S(   N(   R   t   collideSegment(   R   R   R   (    (    s    scripts/common/ModelHitTester.pyt   localHitTestK   s    c         C   s˜   t  | ƒ } | i ƒ  |  i i | i | ƒ | i | ƒ ƒ } | d  j o d  Sg  } x< | D]4 \ } } }	 }
 | i | | i | ƒ |	 |
 f ƒ q\ W| S(   N(   R   t   invertR   R   t
   applyPointR   t   appendt   applyVector(   R   R   R   t   worldMatrixt   worldToLocalt   testRest   rest   distt   normalt   hitAngleCost   matKind(    (    s    scripts/common/ModelHitTester.pyt   worldHitTestP   s    
	 c         C   s   |  i  i | | | ƒ S(   N(   R   t   collideSphere(   R   t   centert   radiust   bOutsidePolygonsOnly(    (    s    scripts/common/ModelHitTester.pyt   localSphericHitTestf   s    c         C   s   |  i  i | | ƒ S(   N(   R   t   collidesWithTriangle(   R   t   trianglet   hitDir(    (    s    scripts/common/ModelHitTester.pyt   localCollidesWithTrianglek   s    N(   t   __name__t
   __module__R   R   t    _ModelHitTester__setBspModelNamet   propertyR   R   R   R   R   R   R    R-   t   TrueR2   R6   (    (    (    s    scripts/common/ModelHitTester.pyR   	   s   	
							t   VehicleHitTesterc           B   s5   e  Z d  „  Z e ƒ  d „ Z d „  Z e e ƒ Z RS(   c         C   s(   | | | f |  _  d  |  _ d  |  _ d  S(   N(   t   _VehicleHitTester__argsR   t   _VehicleHitTester__bboxt(   _VehicleHitTester__boundingRadiusSquared(   R   t	   chassisHtt   hullHtt
   hullOffset(    (    s    scripts/common/ModelHitTester.pyR   w   s    	c   	      C   sÝ   |  i  } | d  j o |  i ƒ  |  i  } n | | } | | } t | i | i ƒ } t | i | i ƒ } | | } | i | ƒ } | d j o | i | j S| | i j o | i | j S| i | | | i | j S(   Ng        (	   R?   R   t   _VehicleHitTester__getBboxR   t   xt   zt   dott   lengthSquaredt   length(	   R   R   R   R/   t   radiusSquaredt   aot   bot   abt   e(    (    s    scripts/common/ModelHitTester.pyt   mayHit„   s    	



c         C   sÇ   |  i  d  j o° |  i \ } } } | i } | i } t | d | d | t ƒ } t | d | d | t ƒ } t ƒ  } t | i | ƒ | i | ƒ ƒ } | | t	 i
 | ƒ f |  _  | |  _ n |  i  S(   Ni    i   (   R>   R   R=   R   t   _combineChassisHullCornerst   mint   maxR    t   flatDistSqrTot   matht   sqrtR?   (   R   t   bbox1t   bbox2t   offst   minPtt   maxPtt   p0RI   (    (    s    scripts/common/ModelHitTester.pyt	   __getBbox¡   s    			!(   R7   R8   R   R    RN   RC   R:   R   (    (    (    s    scripts/common/ModelHitTester.pyR<   p   s   		c         C   s?   t  | |  i | i | i ƒ |  i | |  i | i | i ƒ ƒ S(   N(   R    RD   t   yRE   (   t   ct   ht   hullOffst   selector(    (    s    scripts/common/ModelHitTester.pyRO   µ   s    (   RS   t   randomR   t   ResMgrt   MathR    R   R   t   debug_utilst   objectR   R<   RO   (    (    (    s    scripts/common/ModelHitTester.pyt   <module>   s   
gE