BasicTutorial7Source

From PyWiki

Revision as of 20:05, 15 January 2009 by Kurvenschubser (Talk | contribs)
(diff) ← Older revision | Current revision (diff) | Newer revision → (diff)
Jump to: navigation, search
import SampleFramework as sf
import ogre.renderer.OGRE as ogre
import ogre.io.OIS as OIS
import ogre.gui.CEGUI as CEGUI
 
def convertButton(oisID):
	if oisID == OIS.MB_Left:
		return CEGUI.LeftButton
	elif oisID == OIS.MB_Right:
		return CEGUI.RightButton
	elif oisID == OIS.MB_Middle:
		return CEGUI.MiddleButton
	else:
		return CEGUI.LeftButton
 
class TutorialListener(sf.FrameListener, OIS.MouseListener, OIS.KeyListener):
 
	def __init__(self, renderWindow, camera):
		sf.FrameListener.__init__(self, renderWindow, camera, True, True)
		OIS.MouseListener.__init__(self)
		OIS.KeyListener.__init__(self)
		self.cont = True
		self.Mouse.setEventCallback(self)
		self.Keyboard.setEventCallback(self)
		windowManager = CEGUI.WindowManager.getSingleton()
		quitButton = windowManager.getWindow("CEGUIDemo/QuitButton")
		quitButton.subscribeEvent(CEGUI.PushButton.EventClicked, self, "quit") 
 
	def frameStarted(self, evt):
		self.Keyboard.capture()
		self.Mouse.capture()
		return self.cont and not self.Keyboard.isKeyDown(OIS.KC_ESCAPE)
 
	def quit(self, evt):
		self.cont = False
		return True
 
	# MouseListener
	def mouseMoved(self, evt):
		CEGUI.System.getSingleton().injectMouseMove(evt.get_state().X.rel, evt.get_state().Y.rel)
		return True
 
	def mousePressed(self, evt, id):
		CEGUI.System.getSingleton().injectMouseButtonDown(convertButton(id))
		return True
 
	def mouseReleased(self, evt, id):
		CEGUI.System.getSingleton().injectMouseButtonUp(convertButton(id))
		return True
 
	# KeyListener
	def keyPressed(self, evt):
		ceguiSystem = CEGUI.System.getSingleton()
		ceguiSystem.injectKeyDown(evt.key)
		ceguiSystem.injectChar(evt.text)
		return True
 
	def keyReleased(self, evt):
		CEGUI.System.getSingleton().injectKeyUp(evt.key)
		return True
 
class TutorialApplication(sf.Application):
 
	def __del__(self):
		if self.system:
			del self.system
		if self.renderer:
			del self.renderer
 
	def _createScene(self):
		self.renderer = CEGUI.OgreCEGUIRenderer(self.renderWindow, ogre.RENDER_QUEUE_OVERLAY, False, 3000, self.sceneManager)
		self.system = CEGUI.System(self.renderer)
		CEGUI.SchemeManager.getSingleton().loadScheme("TaharezLookSkin.scheme")
		self.system.setDefaultMouseCursor("TaharezLook", "MouseArrow")
		self.system.setDefaultFont("BlueHighway-12")
		windowManager = CEGUI.WindowManager.getSingleton()
 
		sheet = windowManager.createWindow("DefaultGUISheet", "CEGUIDemo/Sheet")
 
		quitButton = windowManager.createWindow("TaharezLook/Button", "CEGUIDemo/QuitButton")
		quitButton.setText("Quit")
		quitButton.setSize(CEGUI.UVector2(CEGUI.UDim(0.15, 0), CEGUI.UDim(0.05, 0)))
 
		sheet.addChildWindow(quitButton)
		self.system.setGUISheet(sheet)
 
		self.sceneManager.setAmbientLight((1.0, 1.0, 1.0))
		self.sceneManager.setSkyDome(True, "Examples/CloudySky", 5, 8)
		ogreHead = self.sceneManager.createEntity("Head", "ogrehead.mesh")
		headNode = self.sceneManager.getRootSceneNode().createChildSceneNode((0.0, 0.0, -300.0))
		headNode.attachObject(ogreHead)
		texture = ogre.TextureManager.getSingleton().createManual( "RttTex", "General", ogre.TextureType.TEX_TYPE_2D, 512, 512, 0, ogre.PixelFormat.PF_R8G8B8, ogre.TU_RENDERTARGET ).getBuffer().getRenderTarget()
 
		rttCamera = self.sceneManager.createCamera("RttCam")
		rttCamera.setPosition(100.0, -100.0, -400.0)
		rttCamera.lookAt(0.0, 0.0, -300.0)
 
		viewport = texture.addViewport(rttCamera)
		viewport.setOverlaysEnabled(False)
		viewport.setClearEveryFrame(True)
		viewport.setBackgroundColour(ogre.ColourValue().Black)
 
		ceguiTexture = self.renderer.createTexture("RttTex")
 
		imageSet = CEGUI.ImagesetManager.getSingleton().createImageset("RttImageset", ceguiTexture)
		imageSet.defineImage("RttImage", CEGUI.Rect(0.0, 0.0, ceguiTexture.getWidth(), ceguiTexture.getHeight()), CEGUI.Vector2(0.0, 0.0))
 
		staticImg = windowManager.createWindow("TaharezLook/StaticImage", "RTTWindow")
		staticImg.setSize(CEGUI.UVector2(CEGUI.UDim(0.5, 0), CEGUI.UDim(0.4, 0)))
		staticImg.setPosition(CEGUI.UVector2(CEGUI.UDim(0.5, 0), CEGUI.UDim(0, 0)))
 
		staticImg.setProperty("Image", CEGUI.PropertyHelper.imageToString(imageSet.getImage("RttImage")))
		sheet.addChildWindow(staticImg)
 
 
	def _createFrameListener(self):
		self.frameListener = TutorialListener(self.renderWindow, self.camera)
		self.frameListener.showDebugOverlay(True)
		self.root.addFrameListener(self.frameListener)
 
if __name__ == '__main__':
	try:
		ta = TutorialApplication()
		ta.go()
	except ogre.OgreException, e:
		print e