def onSize(self, evt): """Invoked when the viewport is resized.""" if self.win != None: wp = WindowProperties() wp.setOrigin(0, 0) wp.setSize(self.ClientSize.GetWidth(), self.ClientSize.GetHeight()) self.win.requestProperties(wp)
def bindToWindow(self, windowHandle): wp = WindowProperties().getDefault() wp.setOrigin(0,0) wp.setSize(P3D_WIN_WIDTH, P3D_WIN_HEIGHT) wp.setParentWindow(windowHandle) base.openDefaultWindow(props=wp) self.wp = wp
def OnResize(self, event): """When the wx-panel is resized, fit the panda3d window into it.""" frame_size = event.GetSize() wp = WindowProperties() wp.setOrigin(0, 0) wp.setSize(frame_size.GetWidth(), frame_size.GetHeight()) self._win.requestProperties(wp)
def bindToWindow(self, windowHandle): wp = WindowProperties().getDefault() wp.setOrigin(self._x, self._y) wp.setSize(self._width, self._height) wp.setParentWindow(windowHandle) base.openDefaultWindow(props=wp) self.wp = wp
def launch_panda_window(panda_widget, size): """ Configure and create Panda window Connect to the gtk widget resize event Load a panda """ props = WindowProperties().getDefault() props.setOrigin(0, 0) props.setSize(*size) props.setParentWindow(panda_widget.window.xid) base.openDefaultWindow(props=props) # == panda_widget.connect("size_allocate", resize_panda_window) # == panda = loader.loadModel("panda") panda.reparentTo(render) panda.setPos(0, 40, -5) pl = render.attachNewNode(PointLight("redPointLight")) pl.node().setColor(Vec4(.9, .8, .8, 1)) render.setLight(pl) pl.node().setAttenuation(Vec3(0, 0, 0.05)) slight = Spotlight('slight') slight.setColor(VBase4(1, 1, 1, 1)) lens = PerspectiveLens() slight.setLens(lens) slnp = render.attachNewNode(slight) slnp.setPos(2, 20, 0) mid = PandaNode('mid') panda.attachNewNode(mid) # slnp.lookAt(mid) render.setLight(slnp)
def resize_panda_window(self, widget, request) : props = WindowProperties().getDefault() props = WindowProperties(self.base.win.getProperties()) props.setOrigin(0, 0) props.setSize(request.width, request.height) props.setParentWindow(widget.window.xid) self.base.win.requestProperties(props)
def launch_panda_window(panda_widget, size) : """ Configure and create Panda window Connect to the gtk widget resize event Load a panda """ props = WindowProperties().getDefault() props.setOrigin(0, 0) props.setSize(*size) props.setParentWindow(panda_widget.window.xid) base.openDefaultWindow(props=props) # == panda_widget.connect("size_allocate", resize_panda_window) # == panda = loader.loadModel("panda") panda.reparentTo(render) panda.setPos(0, 40, -5) pl = render.attachNewNode( PointLight( "redPointLight" ) ) pl.node().setColor( Vec4( .9, .8, .8, 1 ) ) render.setLight(pl) pl.node().setAttenuation( Vec3( 0, 0, 0.05 ) ) slight = Spotlight('slight') slight.setColor(VBase4(1, 1, 1, 1)) lens = PerspectiveLens() slight.setLens(lens) slnp = render.attachNewNode(slight) slnp.setPos(2, 20, 0) mid = PandaNode('mid') panda.attachNewNode(mid) # slnp.lookAt(mid) render.setLight(slnp)
def OnResize( self, event ): """When the wx-panel is resized, fit the panda3d window into it.""" frame_size = event.GetSize() wp = WindowProperties() wp.setOrigin( 0, 0 ) wp.setSize( frame_size.GetWidth(), frame_size.GetHeight() ) self._win.requestProperties( wp )
def resize_panda_window(self, widget, request): props = WindowProperties().getDefault() props = WindowProperties(self.base.win.getProperties()) props.setOrigin(0, 0) props.setSize(request.width, request.height) props.setParentWindow(widget.window.xid) self.base.win.requestProperties(props)
def setupWindow(self, windowType, x, y, width, height, parent): """ Applies the indicated window parameters to the prc settings, for future windows; or applies them directly to the main window if the window has already been opened. This is called by the browser. """ if self.started and base.win: # If we've already got a window, this must be a # resize/reposition request. wp = WindowProperties() if x or y or windowType == 'embedded': wp.setOrigin(x, y) if width or height: wp.setSize(width, height) if windowType == 'embedded': wp.setParentWindow(parent) wp.setFullscreen(False) base.win.requestProperties(wp) self.windowProperties = wp return # If we haven't got a window already, start 'er up. Apply the # requested setting to the prc file, and to the default # WindowProperties structure. self.__clearWindowProperties() if windowType == 'hidden': data = 'window-type none\n' else: data = 'window-type onscreen\n' wp = WindowProperties.getDefault() wp.clearParentWindow() wp.clearOrigin() wp.clearSize() wp.setFullscreen(False) if windowType == 'fullscreen': wp.setFullscreen(True) if windowType == 'embedded': wp.setParentWindow(parent) if x or y or windowType == 'embedded': wp.setOrigin(x, y) if width or height: wp.setSize(width, height) self.windowProperties = wp self.windowPrc = loadPrcFileData("setupWindow", data) WindowProperties.setDefault(wp) self.gotWindow = True # Send this call to the main thread; don't call it directly. messenger.send('AppRunner_startIfReady', taskChain = 'default')
def OnInit(self): #prepare and start the p3d-wx hybrid-engine mainloop self.wxevt_loop = wx.EventLoop() self.wxevt_old_loop = wx.EventLoop.GetActive() wx.EventLoop.SetActive(self.wxevt_loop) base.taskMgr.add(self._mainLoop, "MainLoopTask") #instantiate and assign the wx UI object self.win = P3dWxWindow(size=wx.Size(640, 480)) self.SetTopWindow(self.win) #show the wx window self.win.Show(True) # is essential to let make up wx window before P3D stuff self._mainLoop() #bind wx events self.win.Bind(wx.EVT_SIZE, self.onSize) self.win.Bind(wx.EVT_CLOSE, self.onClose) self.vetoActivate=False self.win.Bind(wx.EVT_ACTIVATE, self.onActivate) #open the p3d window undecorated to use in the wx frame window wp=WindowProperties().getDefault() wp.setUndecorated(True) wp.setOpen(True) wp.setParentWindow(self.win.getP3DSurface()) wp.setOrigin(0,0) wp.setForeground(True) wp.setSize(*self.win.getP3DSurfaceSize()) print ">>>opening p3dsurface" assert base.openDefaultWindow(props=wp) == True # return True
def OnInit(self): #prepare and start the p3d-wx hybrid-engine mainloop self.wxevt_loop = wx.EventLoop() self.wxevt_old_loop = wx.EventLoop.GetActive() wx.EventLoop.SetActive(self.wxevt_loop) base.taskMgr.add(self._mainLoop, "MainLoopTask") #instantiate and assign the wx UI object self.win = P3dWxWindow(size=wx.Size(640, 480)) self.SetTopWindow(self.win) #show the wx window self.win.Show(True) # is essential to let make up wx window before P3D stuff self._mainLoop() #bind wx events self.win.Bind(wx.EVT_SIZE, self.onSize) self.win.Bind(wx.EVT_CLOSE, self.onClose) self.vetoActivate = False self.win.Bind(wx.EVT_ACTIVATE, self.onActivate) #open the p3d window undecorated to use in the wx frame window wp = WindowProperties().getDefault() wp.setUndecorated(True) wp.setOpen(True) wp.setParentWindow(self.win.getP3DSurface()) wp.setOrigin(0, 0) wp.setForeground(True) wp.setSize(*self.win.getP3DSurfaceSize()) print ">>>opening p3dsurface" assert base.openDefaultWindow(props=wp) == True # return True
def setupWindow(self, windowType, x, y, width, height, parent): """ Applies the indicated window parameters to the prc settings, for future windows; or applies them directly to the main window if the window has already been opened. This is called by the browser. """ if self.started and base.win: # If we've already got a window, this must be a # resize/reposition request. wp = WindowProperties() if x or y or windowType == 'embedded': wp.setOrigin(x, y) if width or height: wp.setSize(width, height) if windowType == 'embedded': wp.setParentWindow(parent) wp.setFullscreen(False) base.win.requestProperties(wp) self.windowProperties = wp return # If we haven't got a window already, start 'er up. Apply the # requested setting to the prc file, and to the default # WindowProperties structure. self.__clearWindowProperties() if windowType == 'hidden': data = 'window-type none\n' else: data = 'window-type onscreen\n' wp = WindowProperties.getDefault() wp.clearParentWindow() wp.clearOrigin() wp.clearSize() wp.setFullscreen(False) if windowType == 'fullscreen': wp.setFullscreen(True) if windowType == 'embedded': wp.setParentWindow(parent) if x or y or windowType == 'embedded': wp.setOrigin(x, y) if width or height: wp.setSize(width, height) self.windowProperties = wp self.windowPrc = loadPrcFileData("setupWindow", data) WindowProperties.setDefault(wp) self.gotWindow = True # Send this call to the main thread; don't call it directly. messenger.send('AppRunner_startIfReady', taskChain='default')
def resize_panda_window(widget, request): """ Connected to resize event of the widget Panda is draw on so that the Panda window update its size """ props = WindowProperties().getDefault() props = WindowProperties(base.win.getProperties()) props.setOrigin(0, 0) props.setSize(request.width, request.height) props.setParentWindow(widget.window.xid) base.win.requestProperties(props)
def onSize(self, event): wp = WindowProperties() wp.setOrigin(0, 0) x,y = self.GetClientSize() wp.setSize(x,y) base.camLens.setAspectRatio(1.0*y/x) base.win.requestProperties(wp) event.Skip()
def resize_panda_window(widget, request) : """ Connected to resize event of the widget Panda is draw on so that the Panda window update its size """ props = WindowProperties().getDefault() props = WindowProperties(base.win.getProperties()) props.setOrigin(0, 0) props.setSize(request.width, request.height) props.setParentWindow(widget.window.xid) base.win.requestProperties(props)
def resizeWindow(self, window_id, width, height): """window_id is an index of a window from base.winList.""" window = self.windows[window_id] old_wp = window.getProperties() if old_wp.getXSize() == width and old_wp.getYSize() == height: return wp = WindowProperties() wp.setOrigin(0, 0) wp.setSize(width, height) window.requestProperties(wp)
def initialize(self): self.Update() wp = WindowProperties() wp.setOrigin(0, 0) wp.setSize(self.ClientSize.GetWidth(), self.ClientSize.GetHeight()) assert self.GetHandle() != 0 wp.setParentWindow(self.GetHandle()) # initializing panda window base.windowType = "onscreen" props = WindowProperties.getDefault() props.addProperties(wp) self.win = base.openWindow(props=props, gsg=ViewportManager.gsg) if self.win: self.cam2d = base.makeCamera2d(self.win) self.cam2d.node().setCameraMask(LE_CAM_MASKS[self.name]) if ViewportManager.gsg == None: ViewportManager.gsg = self.win.getGsg() self.cam = base.camList[-1] self.camera = render.attachNewNode(self.name) #self.camera.setName(self.name) #self.camera.reparentTo(render) self.cam.reparentTo(self.camera) self.camNode = self.cam.node() self.camNode.setCameraMask(LE_CAM_MASKS[self.name]) self.bt = base.setupMouse(self.win, True) self.bt.node().setPrefix('_le_%s_' % self.name[:3]) mw = self.bt.getParent() mk = mw.getParent() winCtrl = WindowControls(self.win, mouseWatcher=mw, cam=self.camera, camNode=self.camNode, cam2d=None, mouseKeyboard=mk, grid=self.grid) base.setupWindowControls(winCtrl) self.initialized = True if self.lens != None: self.cam.node().setLens(self.lens) if self.camPos != None: self.camera.setPos(self.camPos) if self.camLookAt != None: self.camera.lookAt(self.camLookAt) self.camLens = self.camNode.getLens() if self.name in ['top', 'front', 'left']: x = self.ClientSize.GetWidth() * 0.1 y = self.ClientSize.GetHeight() * 0.1 self.camLens.setFilmSize(x, y) self.Bind(wx.EVT_SIZE, self.onSize)
def initialize(self): self.Update() wp = WindowProperties() wp.setOrigin(0, 0) wp.setSize(self.ClientSize.GetWidth(), self.ClientSize.GetHeight()) assert self.GetHandle() != 0 wp.setParentWindow(self.GetHandle()) # initializing panda window base.windowType = "onscreen" props = WindowProperties.getDefault() props.addProperties(wp) self.win = base.openWindow(props = props, gsg = ViewportManager.gsg) if self.win: self.cam2d = base.makeCamera2d(self.win) self.cam2d.node().setCameraMask(LE_CAM_MASKS[self.name]) if ViewportManager.gsg == None: ViewportManager.gsg = self.win.getGsg() self.cam = base.camList[-1] self.camera = render.attachNewNode(self.name) #self.camera.setName(self.name) #self.camera.reparentTo(render) self.cam.reparentTo(self.camera) self.camNode = self.cam.node() self.camNode.setCameraMask(LE_CAM_MASKS[self.name]) self.bt = base.setupMouse(self.win, True) self.bt.node().setPrefix('_le_%s_'%self.name[:3]) mw = self.bt.getParent() mk = mw.getParent() winCtrl = WindowControls( self.win, mouseWatcher=mw, cam=self.camera, camNode = self.camNode, cam2d=None, mouseKeyboard =mk, grid = self.grid) base.setupWindowControls(winCtrl) self.initialized = True if self.lens != None: self.cam.node().setLens(self.lens) if self.camPos != None: self.camera.setPos(self.camPos) if self.camLookAt != None: self.camera.lookAt(self.camLookAt) self.camLens = self.camNode.getLens() if self.name in ['top', 'front', 'left']: x = self.ClientSize.GetWidth() * 0.1 y = self.ClientSize.GetHeight() * 0.1 self.camLens.setFilmSize(x, y) self.Bind(wx.EVT_SIZE, self.onSize)
def fullscreen(self): ''' Witch between Fullscreen and window mode ''' self._conf.fullscreen = not self._conf.fullscreen wp = WindowProperties() wp.setFullscreen(self._conf.fullscreen) wp.setOrigin(0, 0) wp.setSize(int(base.pipe.getDisplayWidth()), int(base.pipe.getDisplayHeight())) base.win.requestProperties(wp) self.option()
def makeGameEngine(self): ''' Creates a new game engine based on settings in GameSettings. Information for this came from here http://panda3d.org/phpbb2/viewtopic.php?t=2848''' LOG.debug("[GXMgr] Building game engine") # Temporary # TODO: Fix this props = WindowProperties() props.setFullscreen(False) props.setUndecorated(False) #screenx = int(base.pipe.getDisplayWidth()/2) - (int(self.ScreenWidth)/2) #screeny = int(base.pipe.getDisplayHeight()/2) - (int(self.ScreenHeight)/2) #self.TempScreenSizeRX = int(self.ScreenWidth) #self.TempScreenSizeRY = int(self.ScreenHeight) props.setOrigin(100,100) props.setSize(1024,768) base.win.requestProperties(props) # This was the old way that no longer works - I don't know why ## Create a new FrameBufferProperties object using our settings #fbProps = FrameBufferProperties() #fbProps.addProperties(FrameBufferProperties.getDefault()) #fbProps.setMultisamples(GameSettings().antiAlias) #fbProps.setAlphaBits(GameSettings().alphaBits) #fbProps.setDepthBits(GameSettings().colorDepth) #fbProps.setColorBits(24) # ## Create a WindowProperties object #winProps = WindowProperties( base.win.getProperties() ) #winProps.setFullscreen(GameSettings().fullscreen) #winProps.setUndecorated(GameSettings().fullscreen) #winProps.setSize(GameSettings().xRes,GameSettings().yRes) #winProps.setTitle('PSG - Project Space Game: Alpha') # ## Create the engine #base.graphicsEngine.makeOutput(base.pipe, # GraphicsPipe # 'mainGameOutput', # Name # 0, # Sort # fbProps, # FrameBufferProperties # winProps, # WindowProperties # GraphicsPipe.BFRequireWindow | GraphicsPipe.BFFbPropsOptional, # Flags # base.win.getGsg()) # GraphicsStateGaurdian ##base.openMainWindow(props=winProps, gsg=base.win.getGsg(), keepCamera=1) #base.openMainWindow() #base.graphicsEngine.openWindows() #base.win.requestProperties(winProps) ## The following code should proabably be moved somewhere else #showFPS = GameSettings().showFPS #base.setFrameRateMeter(showFPS)
def addWindow(self, handle=None, width=500, height=500): """Create a new window showing the scene. Add it to the windows list and return it. If handle is not None, it is used as parent window. """ wp = WindowProperties() wp.setOrigin(0, 0) wp.setSize(width, height) if handle is not None: wp.setParentWindow(handle) self.base.openDefaultWindow(props=wp, type="onscreen", requireWindow=True) return self.base.winList[-1]
def __init__(self): print("began") self.taskMgr = taskMgr with open('config.json') as data_file: self.conf = json.load(data_file) self.ServerConnection = ServerConnection()#uncomment when going live self.ServerConnection.connect(self.conf['host'],self.conf['port'])#uncomment when going live props = WindowProperties( ) props.setTitle( 'Log In' ) props.setFixedSize(True) props.setSize(1280,740) props.setOrigin(-2,-2) base.win.requestProperties( props ) self.base = ShowBase self.main_theme = base.loader.loadSfx("assets/sounds/terminator_theme.ogg") self.main_theme.play() self.username = "" self.authConnection = AuthConnectionModel(self)#uncomment when going live self.heartbeatConnection = HeartbeatConnectionModel()#uncomment when going live self.ServerConnection.setupConnectionModel(self.heartbeatConnection)#uncomment when going live self.globalChatConnection = ChatConnectionModel(self) self.ServerConnection.setupConnectionModel(self.globalChatConnection) self.queueConnection = QueueConnectionModel(self) self.ServerConnection.setupConnectionModel(self.authConnection)#uncomment when going live self.friendConnection = FriendConnectionModel(self) self.ServerConnection.setupConnectionModel(self.friendConnection) self.taskMgr.doMethodLater(self.conf['heartbeatRate'], self.doHeartbeat, "heartbeat")#uncomment when going live self.taskMgr.doMethodLater(self.conf['heartbeatRate'], self.doHeartbeat, "heartbeat") self.screen = Login(self)#uncomment when going live #self.screen = Menu(self)#comment this one when you are trying to log into it like normal self.ServerConnection.setupConnectionModel(self.queueConnection) self.taskMgr.doMethodLater(self.conf['heartbeatRate'], self.doHeartbeat, "heartbeat") self.taskMgr.doMethodLater(1, self.doSong, "song") self.screenType = "login" self.screen.run()
def onSize(self, evt): """Invoked when the viewport is resized.""" if self.win != None: wp = WindowProperties() wp.setOrigin(0, 0) newWidth = self.ClientSize.GetWidth() newHeight = self.ClientSize.GetHeight() wp.setSize(newWidth, newHeight) self.win.requestProperties(wp) if hasattr(base, "direct") and base.direct: for dr in base.direct.drList: if dr.camNode == self.camNode: dr.updateFilmSize(newWidth, newHeight) break
def Initialize(self, useMainWin=True): """ The panda3d window must be put into the wx-window after it has been shown, or it will not size correctly. """ assert self.GetHandle() != 0 wp = WindowProperties() wp.setOrigin(0, 0) wp.setSize(self.ClientSize.GetWidth(), self.ClientSize.GetHeight()) wp.setParentWindow(self.GetHandle()) if self._win is None: if useMainWin: base.openDefaultWindow(props=wp, gsg=None) self._win = base.win else: self._win = base.openWindow(props=wp, makeCamera=0) self.Bind(wx.EVT_SIZE, self.OnResize)
def Initialize( self, useMainWin=True ): """ The panda3d window must be put into the wx-window after it has been shown, or it will not size correctly. """ assert self.GetHandle() != 0 wp = WindowProperties() wp.setOrigin( 0, 0 ) wp.setSize( self.ClientSize.GetWidth(), self.ClientSize.GetHeight() ) wp.setParentWindow( self.GetHandle() ) if self._win is None: if useMainWin: base.openDefaultWindow( props=wp, gsg=None ) self._win = base.win else: self._win = base.openWindow( props=wp, makeCamera=0 ) self.Bind( wx.EVT_SIZE, self.OnResize )
def configure(self, widget, event): if self.showbase != None: x_offset, y_offset = self.translate_coordinates(widget, 0, 0) x, y = self.gtk_window.window.get_position() wp = WindowProperties().getDefault() wp.setOrigin(x + x_offset, y + y_offset) wp.setSize(self.get_allocation().width, self.get_allocation().height) wp.setUndecorated(True) # apply window property changes to the window self.showbase.win.requestProperties(wp) # for debugging purposes turn show the frame rate # to decide about the interval for calling self.step # with a gobject timeout self.showbase.setFrameRateMeter(True)
def initialize(self): self.Update() wp = WindowProperties() wp.setOrigin(0, 0) wp.setSize(self.ClientSize.GetWidth(), self.ClientSize.GetHeight()) assert self.GetHandle() != 0 wp.setParentWindow(self.GetHandle()) Window.__init__(self, extraProps=wp) self.initialized = True if self.lens != None: self.camera.node().setLens(self.lens) if self.camPos != None: self.camera.setPos(self.camPos) if self.camLookAt != None: self.camera.lookAt(self.camLookAt) self.Bind(wx.EVT_SIZE, self.onSize) self.accept("wheel_down", self.zoomOut) self.accept("wheel_up", self.zoomIn) self.accept("page_down", self.zoomOut) self.accept("page_down-repeat", self.zoomOut) self.accept("page_up", self.zoomIn) self.accept("page_up-repeat", self.zoomIn)
def __init__(self, World): #just comment out the two lines below #self.appRunner = None#added this to overide the login self.playerList = [] self.World = World self.WhichScreen = ""; self.lastSelectedFriend = None # variable to save game selected DD or RR self.selectedGame = None #self.taskMgr = World.taskMgr#added this to overide the login props = WindowProperties() props.setTitle( 'Main Menu' ) props.setFixedSize(True) props.setSize(1400,740) props.setOrigin(-2,-2) base.win.requestProperties( props ) self.selectedCar = 0 self.screenBtns = [] self.globalChat = [] self.privateChat = {} self.chatOffset = 0 self.car = None self.onReturnMatch = self.createMatchMaking self.createSocialization() self.World.queueConnection.setHandler(self.handleQueueNotification) self.World.globalChatConnection.setHandler(self.handleChatNotification) self.World.friendConnection.setHandlers(self.handleFriendNotification,self.handleFriendListNotification) #self.World.privateChatConnection.setHandler(self.handlePrivateChatNotification) self.navi() self.accept('enter', self.sendMessage)
def __init__(self, gtkParentWidget): self.pose = {} self.enter = 1 # 0..1 flies in the cubes self.currentMessage = self.cornerMessage = None self.videoFrame = None self.animSeed = 0 self.cubeNodes = {} # color: NodePath self.currentLighting = 'train' self.gtkParentWidget = gtkParentWidget self.base = base # from DirectStart props = WindowProperties().getDefault() props.setOrigin(0, 0) props.setSize(1,1) props.setParentWindow(self.gtkParentWidget.window.xid) self.base.openDefaultWindow(props=props) self.gtkParentWidget.connect("size_allocate", self.resize_panda_window) self.originalNodes = self.base.render.getChildren() self.init()
def __init__(self, gtkParentWidget): self.pose = {} self.enter = 1 # 0..1 flies in the cubes self.currentMessage = self.cornerMessage = None self.videoFrame = None self.animSeed = 0 self.cubeNodes = {} # color: NodePath self.currentLighting = 'train' self.gtkParentWidget = gtkParentWidget self.base = base # from DirectStart props = WindowProperties().getDefault() props.setOrigin(0, 0) props.setSize(1, 1) props.setParentWindow(self.gtkParentWidget.window.xid) self.base.openDefaultWindow(props=props) self.gtkParentWidget.connect("size_allocate", self.resize_panda_window) self.originalNodes = self.base.render.getChildren() self.init()
def centerWindow(): curProps = base.win.getProperties() wp = WindowProperties() wp.setOrigin((base.pipe.getDisplayWidth() - curProps.getXSize()) / 2, (base.pipe.getDisplayHeight() - curProps.getYSize()) / 2) base.win.requestProperties(wp)
def __init__(self): ShowBase.__init__(self) ########## Window configuration ######### wp = WindowProperties() wp.setSize(1024, 860) wp.setTitle("") wp.setOrigin(-2, -2) self.win.requestProperties(wp) self.win.movePointer(0, wp.getXSize() / 2, wp.getYSize() / 2) print wp.getXSize() / 2, wp.getYSize() / 2 ########## Gameplay settings ######### self.gameMode = {"display": PLAY, "play": TERRAIN} self.level = 1.5 self.mode_initialized = False ######### Camera ######### self.disableMouse() self.mainCamera = Camera(self.camera) self.mainCamera.camObject.setHpr(0, 0, 0) self.loadLevel() ######### Events ######### self.taskMgr.add(self.gameLoop, "gameLoop", priority=35) self.keys = {"w": 0, "s": 0, "a": 0, "d": 0, "space": 0, "escape": 0} self.accept("w", self.setKey, ["w", 1]) self.accept("w-up", self.setKey, ["w", 0]) self.accept("s", self.setKey, ["s", 1]) self.accept("s-up", self.setKey, ["s", 0]) self.accept("a", self.setKey, ["a", 1]) self.accept("a-up", self.setKey, ["a", 0]) self.accept("d", self.setKey, ["d", 1]) self.accept("d-up", self.setKey, ["d", 0]) self.accept("space", self.setKey, ["space", 1]) self.accept("space-up", self.setKey, ["space", 0]) self.accept("escape", self.setKey, ["escape", 1]) self.accept("escape-up", self.setKey, ["escape", 0]) self.accept("wheel_up", self.zoomCamera, [-1]) self.accept("wheel_down", self.zoomCamera, [1]) self.accept("window-event", self.handleWindowEvent) ######### GUI ######### #self.fonts = {"failure" : loader.loadFont('myfont.ttf')} self.guiElements = [] self._GCLK = None self._FT = None
def resizeEvent(self, evt): wp = WindowProperties() wp.setSize(self.width(), self.height()) wp.setOrigin(self.x(),self.y()) base.win.requestProperties(wp)
class Renderer(ShowBase): _x = 0 _y = 0 _width = 400 _height = 300 _windowPropertices = None _drawTask = None def __init__(self, winId): ShowBase.__init__(self) self.bindToWindow(winId) self.setOrbitCameraControl() taskMng = TaskManager.Instance() timerIndex = taskMng.addTask(self.step) task = taskMng.getTask(timerIndex) self._drawTask = task base.disableMouse() # disable default mouse controls # a scene # environ = self.loader.loadModel('environment') # environ.setScale(0.1) # environ.setZ(-5) # environ.reparentTo(self.render) # model for the camera to orbit along model = self.loader.loadModel('data/tank') model.reparentTo(self.render) model.setRenderModeWireframe() # dummy node for camera, we will rotate the dummy node fro camera rotation self.parentnode = self.render.attachNewNode('camparent') self.parentnode.reparentTo(model) # inherit transforms self.parentnode.setEffect(CompassEffect.make(self.render)) # NOT inherit rotation # the camera base.camera.reparentTo(self.parentnode) base.camera.lookAt(self.parentnode) base.camera.setY(-10) # camera distance from model # self.model = self.loader.loadModel('tank') # self.model.reparentTo(self.render) # self.model.setRenderModeWireframe() # self.camera.lookAt(self.model) # self.camera.setY(-10) # self.accept("escape", sys.exit) # self.taskMgr.add(self.spinCameraTask, "SpinCameraTask") # Define a procedure to move the camera. def spinCameraTask(self, task): angleDegrees = task.time * 30.0 angleRadians = angleDegrees * (math.pi / 180.0) self.camera.setPos(10 * math.sin(angleRadians), -10.0 * math.cos(angleRadians), 0) self.camera.setHpr(angleDegrees, 0, 0) return task.cont def step(self): self.taskMgr.step() def bindToWindow(self, windowHandle): self._windowPropertices = WindowProperties().getDefault() self._windowPropertices.setOrigin(self._x, self._y) self._windowPropertices.setSize(self._width, self._height) self._windowPropertices.setParentWindow(windowHandle) base.openDefaultWindow(props=self._windowPropertices) def setWindowOrigin(self, x, y): self._x = x self._y = y self._windowPropertices.setOrigin(self._x, self._y) base.openDefaultWindow(props=self._windowPropertices) def setWindowSize(self, width, height): self._width = width self._height = height self._windowPropertices.setSize(self._width, self._height) base.openDefaultWindow(props=self._windowPropertices) def getWindowOrigin(self): return {"x": self._x, "y": self._y} def getWindowSize(self): return {"width": self._width, "height": self._height} def setOrbitCameraControl(self): pass oc = OrbitCamera(self, base) def startDraw(self): self._drawTask.start(0) def stopDraw(self): self._drawTask.stop()