Advertisement
Guest User

CircleDeflection

a guest
Mar 29th, 2014
455
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.92 KB | None | 0 0
  1. '''
  2. (c) Dellux 2013
  3. '''
  4. import BigWorld
  5. import GUI
  6. import Keys
  7. import weakref
  8. import math
  9. import Math
  10. import CommandMapping
  11. import AvatarInputHandler.control_modes as AvatarInputHandler
  12. from Avatar import PlayerAvatar
  13. from gui.Scaleform.Battle import Battle
  14. from gui.Scaleform.Battle import _TimeInterval
  15. from gui.Scaleform.Flash import Flash
  16. from gui import DEPTH_OF_Aim
  17.  
  18. class CircleDeflection(Flash):
  19.     UPDATE_INTERVAL = 0.03
  20.    
  21.     def __init__(self, parentUI):
  22.         Flash.__init__(self, 'CircleDeflection.swf')
  23.         self._CircleDeflection__timeInterval = None
  24.         self._CircleDeflection__isVisible = None
  25.         self.component.wg_inputKeyMode = 1
  26.         self.component.position.z = DEPTH_OF_Aim
  27.         self.movie.backgroundAlpha = 0
  28.         self.component.focus = False
  29.         self.component.moveFocus = False
  30.         self.component.heightMode = 'PIXEL'
  31.         self.component.widthMode = 'PIXEL'
  32.         self.flashSize = GUI.screenResolution()
  33.  
  34.    
  35.     def start(self):
  36.         global isCDVisible, isTracerVisible
  37.         self.active(True)
  38.         self.setup()
  39.         self._CircleDeflection__timeInterval = _TimeInterval(self.UPDATE_INTERVAL, 'update', weakref.proxy(self))
  40.         self._CircleDeflection__timeInterval.start()
  41.         isCDVisible = True
  42.         isTracerVisible = False
  43.         self.update()
  44.         self.setVisible(True)
  45.  
  46.    
  47.     def destroy(self):
  48.         self.active(False)
  49.         self.setVisible(False)
  50.         self._CircleDeflection__timeInterval.stop()
  51.  
  52.    
  53.     def setVisible(self, isVisible):
  54.         self._CircleDeflection__isVisible = isVisible
  55.         self.component.visible = self._CircleDeflection__isVisible
  56.  
  57.    
  58.     def setup(self):
  59.         self.target = None
  60.         self.speed = 0
  61.         self.diameter = 0
  62.         self.sectorDiameter = 0
  63.  
  64.    
  65.     def update(self):
  66.         if self._CircleDeflection__isVisible != isCDVisible:
  67.             self.setVisible(isCDVisible)
  68.        
  69.         vehicle = BigWorld.entity(BigWorld.player().playerVehicleID)
  70.         if vehicle is not None:
  71.             if not vehicle.isAlive():
  72.                 self.destroy()
  73.            
  74.        
  75.         if BigWorld.player().inputHandler.aim != None:
  76.             aimMode = BigWorld.player().inputHandler.aim.mode
  77.         else:
  78.             aimMode = None
  79.         if aimMode == 'strategic':
  80.             if BigWorld.target() != None:
  81.                 self.target = BigWorld.target()
  82.            
  83.             if self.target != None:
  84.                 if self.target.isDestroyed == False:
  85.                     self.speed = math.fabs(self.target.getSpeed())
  86.                 else:
  87.                     self.target = None
  88.            
  89.             height = BigWorld.camera().position.y - AvatarInputHandler.control_modes.getFocalPoint()[1]
  90.             if height != 0:
  91.                 zoom = 100 / height
  92.             else:
  93.                 zoom = 1
  94.             (x, y, z) = BigWorld.player().gunRotator.markerInfo[0]
  95.             v = BigWorld.player().getOwnVehiclePosition() - Math.Vector3(x, y, z)
  96.             dist = v.length
  97.             vTypeDesc = BigWorld.player().vehicleTypeDescriptor
  98.             shellSpeed = vTypeDesc.shot['speed']
  99.             shellGravity = vTypeDesc.shot['gravity']
  100.             maxDist = shellSpeed * shellSpeed / shellGravity
  101.             if dist <= maxDist:
  102.                 loc = math.asin(dist * shellGravity / shellSpeed * shellSpeed) * 0.5
  103.             else:
  104.                 loc = 0.785398
  105.             shellTime = (math.sin(loc) * shellSpeed / shellGravity) * 2
  106.             self.diameter = shellTime * self.speed * 8.5 * zoom * 2
  107.             if isTracerVisible:
  108.                 self.sectorDiameter = 1105.0 * zoom
  109.             else:
  110.                 self.sectorDiameter = 0
  111.         else:
  112.             self.diameter = 0
  113.             self.sectorDiameter = 0
  114.         self.flashCall('updateDiameter', [
  115.             self.diameter,
  116.             self.sectorDiameter])
  117.  
  118.    
  119.     def flashCall(self, funcName, args = None):
  120.         self.call('CircleDeflection.' + funcName, args)
  121.  
  122.  
  123. saved_afterCreate = Battle.afterCreate
  124.  
  125. def new_afterCreate(self):
  126.     saved_afterCreate(self)
  127.     self.__CircleDeflection = CircleDeflection(weakref.proxy(self))
  128.     self.__CircleDeflection.start()
  129.  
  130. Battle.afterCreate = new_afterCreate
  131. saved_beforeDelete = Battle.beforeDelete
  132.  
  133. def new_beforeDelete(self):
  134.     saved_beforeDelete(self)
  135.     self.__CircleDeflection.destroy()
  136.  
  137. Battle.beforeDelete = new_beforeDelete
  138. saved_handleKey = PlayerAvatar.handleKey
  139.  
  140. def new_handleKey(self, isDown, key, mods):
  141.     global isCDVisible, isTracerVisible
  142.     cmdMap = CommandMapping.g_instance
  143.     if cmdMap.isFired(CommandMapping.CMD_TOGGLE_GUI, key) and isDown:
  144.         isCDVisible = not isCDVisible
  145.    
  146.     if key == Keys.KEY_0 and isDown:
  147.         isTracerVisible = not isTracerVisible
  148.    
  149.     return saved_handleKey(self, isDown, key, mods)
  150.  
  151. PlayerAvatar.handleKey = new_handleKey
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement