Пример #1
0
class Application(object):
    "This class is the base for an Ogre application."
    debugText = ""

    def __init__(self):
        self.frameListener = None
        self.root = None
        self.camera = None
        self.renderWindow = None
        self.sceneManager = None
        self.world = None
        # StageManager
        self.mStageManager = None
        #self.unittest = isUnitTest()

    def __del__(self):
        "Clear variables, this should not actually be needed."
        del self.camera
        del self.sceneManager
        del self.frameListener
        if self.world:
            del self.world
        del self.root
        del self.renderWindow

    def go(self):
        "Starts the rendering loop."
        if not self._setUp():
            return
        if self._isPsycoEnabled():
            self._activatePsyco()
        self.root.startRendering()
        
    def goOneFrame(self):
        "Starts the rendering loop. Show how to use the renderOneFrame Method"
        if not self._setUp():
            return
        if self._isPsycoEnabled():
            self._activatePsyco()
    
        self.root.getRenderSystem()._initRenderTargets()
        while True:
            ogre.WindowEventUtilities().messagePump()
            if not self.root.renderOneFrame():
                break

    def _setUp(self):
        """This sets up the ogre application, and returns false if the user
        hits "cancel" in the dialog box."""
        
        pluginFile = getPluginPath()  ## option here to switch to manually loading file if it doesn't exist
        '''if self.unittest:
            if os.path.isfile('ogre.cfg'):
                self.root = ogre.Root(pluginFile)
            else:
                self.root = ogre.Root(pluginFile, '../ogre.cfg')
        else:'''
        self.root = ogre.Root(pluginFile)
        self.root.setFrameSmoothingPeriod (5.0)

        self._setUpResources()
        if not self._configure():
            return False
        
        self._chooseSceneManager()
        self._createWorld()
        self._createCamera()
        self._createViewports()

        ogre.TextureManager.getSingleton().setDefaultNumMipmaps (5)

        self._createResourceListener()
        self._loadResources()

        self._createScene()
        self._createFrameListener()
        
        #Stage Manager
        self.mStageManager = StageManager(self.sceneManager)
        
        return True

    def _setUpResources(self):
        """This sets up Ogre's resources, which are required to be in
        resources.cfg."""
        config = ogre.ConfigFile()
        try:
            config.load('resources.cfg') 
        except ogre.OgreFileNotFoundException:
            try:
                config.load('../resources.cfg')
            except:
                raise                
        except:
            raise               
                    
        seci = config.getSectionIterator()
        while seci.hasMoreElements():
            SectionName = seci.peekNextKey()
            Section = seci.getNext()
            for item in Section:
                ogre.ResourceGroupManager.getSingleton().\
                    addResourceLocation(item.value, item.key, SectionName)
                    
    def _createResourceListener(self):
        """This method is here if you want to add a resource listener to check
        the status of resources loading."""
        pass
        
    def _createWorld (self):
        """ this should be overridden when supporting the OgreRefApp framework.  Also note you 
        will have to override __createCamera"""
        pass

    def _loadResources(self):
        """This loads all initial resources.  Redefine this if you do not want
        to load all resources at startup."""
        ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups()

    def _configure(self):
        """This shows the config dialog and creates the renderWindow."""
        #if not self.unittest:   # we show this if not doing a unittest
        carryOn = self.root.showConfigDialog() 
        #else:
        #    carryOn = self.root.restoreConfig()            
        if carryOn:
            windowTitle = "Glass TD!"
            self.renderWindow = self.root.initialise(True, windowTitle)
        return carryOn

    def _chooseSceneManager(self):
        """Chooses a default SceneManager."""
        #typedef uint16 SceneTypeMask;
        #md=ogre.SceneManagerMetaData()
        #md.sceneTypeMask=ogre.ST_GENERIC
        #print dir(self.root)    
        self.sceneManager = self.root.createSceneManager(ogre.ST_GENERIC, "ExampleSMInstance")

    def _createCamera(self):
        """Creates the camera."""        
        self.camera = self.sceneManager.createCamera('PlayerCam')
        self.camera.setPosition(ogre.Vector3(0, 0, 500))
        self.camera.lookAt(ogre.Vector3(0, 0, -300))
        self.camera.NearClipDistance = 5

    def _createViewports(self):
        """Creates the Viewport."""
        ## We want a single sampleframework so this work around is to support OgreRefApp Framework
        ## if using the RefApp camera is based upon World etc etc
        try:    
            self.viewport = self.renderWindow.addViewport(self.camera.getRealCamera())
        except AttributeError:
            self.viewport = self.renderWindow.addViewport(self.camera)
        self.viewport.BackgroundColour = ogre.ColourValue(0, 0, 0)
        
    def _createScene(self):
        """Creates the scene.  Override this with initial scene contents."""
        sceneManager = self.sceneManager 
        sceneManager.ambientLight = ogre.ColourValue (1, 1, 1) 
 
        ent1 = sceneManager.createEntity ("Robot", "robot.mesh") 
        #mAnimationState = ent1.getAnimationState("Walk")
        #mAnimationState.setLoop(True)
        #mAnimationState.setEnabled(True)
        node1 = sceneManager.getRootSceneNode().createChildSceneNode("RobotNode") 
        node1.attachObject(ent1) 
        node1.attachObject(self.camera)
        #self.camera.setPosition(-100, 100, 0)
        #self.camera.lookAt(10000, 0, 0)
        
        

    def _createFrameListener(self):
        """Creates the FrameListener."""
        #,self.frameListener, self.frameListener.Mouse 
        self.frameListener = FrameListener(self)
        self.frameListener.showDebugOverlay(True)
        self.root.addFrameListener(self.frameListener)

    def _isPsycoEnabled(self):
        """Override this function and return True to turn on Psyco"""
        return False

    def _activatePsyco(self):        
        """Import Psyco if available"""
        try:
            import psyco
            psyco.full()
        except ImportError:
            pass
Пример #2
0
 def _createFrameListener(self):
     """Creates the FrameListener."""
     #,self.frameListener, self.frameListener.Mouse 
     self.frameListener = FrameListener(self)
     self.frameListener.showDebugOverlay(True)
     self.root.addFrameListener(self.frameListener)