NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

baseCameraController.py (7049B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\camera\baseCameraController.py
      2 from carbon.client.script.environment.audioService import GetAudioService
      3 from carbon.common.script.sys import service
      4 import trinity
      5 import carbonui.const as uiconst
      6 from eve.client.script.ui.camera.cameraUtil import GetCameraSensitivityMultiplier
      7 from eve.client.script.ui.util.uix import GetBallparkRecord
      8 from eve.client.script.parklife import states
      9 from eve.common.script.sys.eveCfg import InSpace
     10 import geo2
     11 import uthread
     12 from carbonui.uicore import uicore
     13 from eveservices.menu import GetMenuService
     14 
     15 class BaseCameraController(object):
     16     enablePickTransparent = False
     17     cameraID = None
     18 
     19     def __init__(self, *args):
     20         self.mouseDownPos = None
     21         self.isMovingSceneCursor = None
     22 
     23     def Activate(self):
     24         pass
     25 
     26     def Deactivate(self):
     27         pass
     28 
     29     def OnMouseEnter(self, *args):
     30         pass
     31 
     32     def OnMouseExit(self, *args):
     33         pass
     34 
     35     def OnMouseDown(self, *args):
     36         _, pickobject = self.GetPick()
     37         self.mouseDownPos = (uicore.uilib.x, uicore.uilib.y)
     38         self.CheckInSceneCursorPicked(pickobject)
     39         return pickobject
     40 
     41     def OnMouseUp(self, button, *args):
     42         isLeftBtn = button == 0
     43         if isLeftBtn and not uicore.uilib.rightbtn:
     44             self.cameraStillSpinning = False
     45             if not self.IsMouseDragged():
     46                 self.TryClickSceneObject()
     47         self.CheckReleaseSceneCursor()
     48         isRightBtn = button == 1
     49         if isRightBtn:
     50             uthread.new(sm.GetService('target').CancelTargetOrder)
     51         self.mouseDownPos = None
     52 
     53     def IsMouseDragged(self):
     54         mt = self.GetMouseTravel()
     55         return mt is not None and mt >= 5
     56 
     57     def OnMouseMove(self, *args):
     58         pass
     59 
     60     def OnDblClick(self, *args):
     61         pass
     62 
     63     def OnMouseWheel(self, *args):
     64         pass
     65 
     66     def GetCamera(self):
     67         return sm.GetService('sceneManager').GetRegisteredCamera(self.cameraID)
     68 
     69     @property
     70     def camera(self):
     71         return self.GetCamera()
     72 
     73     def GetPick(self, x = None, y = None, scene = None):
     74         if not trinity.app.IsActive():
     75             return (None, None)
     76         if scene is None:
     77             scene = self._GetScene()
     78         if scene:
     79             x = x or uicore.uilib.x
     80             y = y or uicore.uilib.y
     81             x, y = uicore.ScaleDpi(x), uicore.ScaleDpi(y)
     82             camera = self.GetCamera()
     83             pickTransparent = trinity.Tr2PickType.PICK_TYPE_TRANSPARENT if self.enablePickTransparent else 0
     84             filter = trinity.Tr2PickType.PICK_TYPE_PICKING | trinity.Tr2PickType.PICK_TYPE_OPAQUE | pickTransparent
     85             pickResult = scene.PickObjectAndAreaID(x, y, camera.projectionMatrix, camera.viewMatrix, self.GetViewport(), filter)
     86             if pickResult is not None:
     87                 pickObj, areaID = pickResult
     88                 areaName = self.GetAreaName(areaID)
     89                 return (areaName, pickObj)
     90         return (None, None)
     91 
     92     def _GetScene(self):
     93         sceneMgr = sm.GetService('sceneManager')
     94         if sceneMgr.IsLoadingScene('default'):
     95             return None
     96         else:
     97             return sceneMgr.GetActiveScene()
     98 
     99     def GetAreaName(self, areaID):
    100         return 'scene'
    101 
    102     def GetPickVector(self, x = None, y = None):
    103         if x is None:
    104             x = int(uicore.uilib.x * uicore.desktop.dpiScaling)
    105         if y is None:
    106             y = int(uicore.uilib.y * uicore.desktop.dpiScaling)
    107         camera = self.GetCamera()
    108         viewport = self.GetViewport()
    109         view = camera.viewMatrix.transform
    110         projection = camera.projectionMatrix.transform
    111         direction, startPos = trinity.device.GetPickRayFromViewport(x, y, viewport, view, projection)
    112         return (direction, startPos)
    113 
    114     def GetViewport(self):
    115         return trinity.device.viewport
    116 
    117     def ProjectWorldToScreen(self, vec3):
    118         cam = self.GetCamera()
    119         viewport = self.GetViewport()
    120         viewport = (viewport.x,
    121          viewport.y,
    122          viewport.width,
    123          viewport.height,
    124          viewport.minZ,
    125          viewport.maxZ)
    126         x, y, z, w = geo2.Vec3Project(vec3, viewport, cam.projectionMatrix.transform, cam.viewMatrix.transform, geo2.MatrixIdentity())
    127         return (x, y)
    128 
    129     def TryClickSceneObject(self):
    130         _, pickobject = self.GetPick()
    131         if pickobject and hasattr(pickobject, 'translationCurve') and hasattr(pickobject.translationCurve, 'id'):
    132             slimItem = GetBallparkRecord(pickobject.translationCurve.id)
    133             if slimItem and slimItem.groupID not in const.nonTargetableGroups:
    134                 itemID = pickobject.translationCurve.id
    135                 GetAudioService().SendUIEvent(uiconst.SOUND_ENTRY_SELECT)
    136                 sm.GetService('stateSvc').SetState(itemID, states.selected, 1)
    137                 GetMenuService().TacticalItemClicked(itemID)
    138                 return True
    139         elif uicore.cmd.IsCombatCommandLoaded('CmdToggleLookAtItem'):
    140             uicore.cmd.ExecuteCombatCommand(session.shipid, uiconst.UI_KEYUP)
    141         elif uicore.cmd.IsCombatCommandLoaded('CmdToggleCameraTracking'):
    142             uicore.cmd.ExecuteCombatCommand(session.shipid, uiconst.UI_KEYUP)
    143         return False
    144 
    145     def GetMouseTravel(self):
    146         if self.mouseDownPos:
    147             x, y = uicore.uilib.x, uicore.uilib.y
    148             v = trinity.TriVector(float(x - self.mouseDownPos[0]), float(y - self.mouseDownPos[1]), 0.0)
    149             return int(v.Length())
    150         else:
    151             return None
    152 
    153     def CheckInSceneCursorPicked(self, pickobject):
    154         if not InSpace():
    155             return
    156         if sm.IsServiceRunning('scenario') and sm.GetService('scenario').IsActive():
    157             self.isMovingSceneCursor = sm.GetService('scenario').GetPickAxis()
    158         elif pickobject and sm.IsServiceRunning('posAnchor') and sm.GetService('posAnchor').IsActive() and pickobject.name[:6] == 'cursor':
    159             self.isMovingSceneCursor = pickobject
    160 
    161     def CheckReleaseSceneCursor(self):
    162         if self.isMovingSceneCursor:
    163             self.isMovingSceneCursor = None
    164             if sm.GetService('posAnchor').IsActive():
    165                 sm.GetService('posAnchor').StopMovingCursor()
    166             return True
    167         return False
    168 
    169     def CheckMoveSceneCursor(self):
    170         if not self.isMovingSceneCursor or not uicore.uilib.leftbtn:
    171             return False
    172         if sm.GetService('posAnchor').IsActive():
    173             sm.GetService('posAnchor').MoveCursor(self.isMovingSceneCursor, self.GetMouseDX(), self.GetMouseDY(), self.GetCamera())
    174             return True
    175         if session.role & service.ROLE_CONTENT:
    176             sm.GetService('scenario').MoveCursor(self.isMovingSceneCursor, self.GetMouseDX(), self.GetMouseDY(), self.GetCamera())
    177             return True
    178         return False
    179 
    180     def GetMouseDY(self):
    181         return uicore.uilib.dy * GetCameraSensitivityMultiplier()
    182 
    183     def GetMouseDX(self):
    184         return uicore.uilib.dx * GetCameraSensitivityMultiplier()