Jedimace1
18-11-2008 16:57:57
I am having a few problems trying to make my own Hikari app in Python-Ogre. I got it to the point where it renders, but it won't show my mouse. The flash movie is displaying fine, but my mouse isn't. I followed the demos to try to do what they did, but it doesn't work. Any ideas on how to show the mouse? Code:
Application.py:
Test.py:
Also, as you can see there is some commented NxOgre code. When I use that code, I get a error that makes no sense. Here is the error:
Thanks for any help.
-Jedimace1
Application.py:
import ogre.renderer.OGRE as ogre
import ogre.io.OIS as OIS
#import ogre.physics.NxOgre as nxogre
import ogre.gui.CEGUI as CEGUI
import ogre.gui.hikari as Hikari
import SampleFramework as sf
import os
class AppFrameListener(ogre.FrameListener, OIS.MouseListener, OIS.KeyListener):
def __init__(self, app, keyboard, mouse, joystick, hikariMgr):
OIS.KeyListener.__init__(self)
OIS.MouseListener.__init__(self)
ogre.FrameListener.__init__(self)
self.keyboard = keyboard
self.mouse = mouse
self.joystick = joystick
self.app = app
self.hikariMgr = hikariMgr
self.mouse.setEventCallback(self)
self.MenuMode = True
self.keyboard.setEventCallback(self)
def frameStarted(self, event):
self.keyboard.capture()
self.joystick.capture()
self.mouse.capture()
return1 = self.app.updateInput()
self.hikariMgr.update()
return not self.keyboard.isKeyDown(OIS.KC_ESCAPE) and return1
def mouseMoved(self,arg):
state= arg.get_state()
return self.app.hikariMgr.injectMouseMove(state.X.abs, state.Y.abs) or self.app.hikariMgr.injectMouseWheel(state.Z.rel)
def mousePressed(self, arg, id):
return self.app.hikariMgr.injectMouseDown(id)
def mouseReleased(self, arg, id):
return self.app.hikariMgr.injectMouseUp(id)
def keyPressed( self, arg):
if self.app.hikariMgr.isAnyFocused():
return True
return False
def _inputSystemParameters (self ):
if os.name == 'nt':
print "NT"
return [("w32_mouse","DISCL_FOREGROUND"), ("w32_mouse", "DISCL_NONEXCLUSIVE")]
else:
return [("x11_mouse_grab","false"), ("x11_mouse_hide", "false")] ## untested
class Application(object):
def go(self, title):
self.createRoot()
self.defineResources()
self.setupRenderSystem()
self.createRenderWindow(title)
self.initializeResourceGroups()
self.setupPreScene()
self.setupScene()
self.setupInputSystem()
self.setupGUI()
self.createFrameListener()
self.startRenderLoop()
self.cleanUp()
def createRoot(self):
self.root = ogre.Root()
def defineResources(self):
cf = ogre.ConfigFile()
cf.load("resources.cfg")
seci = cf.getSectionIterator()
while seci.hasMoreElements():
secName = seci.peekNextKey()
settings = seci.getNext()
for item in settings:
typeName = item.key
archName = item.value
ogre.ResourceGroupManager.getSingleton().addResourceLocation(archName, typeName, secName)
def setupRenderSystem(self):
if not self.root.restoreConfig() and not self.root.showConfigDialog():
raise Exception("User canceled the config dialog! -> Application.setupRenderSystem()")
def createRenderWindow(self, title):
self.root.initialise(True, title)
def initializeResourceGroups(self):
ogre.TextureManager.getSingleton().setDefaultNumMipmaps(5)
ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups()
def setupPreScene(self):
#self.world = nxogre.World("time-controller: ogre")
self.hikariMgr = Hikari.HikariManager(".\\")
self.sceneMgr = self.root.createSceneManager(ogre.ST_GENERIC, "Default SceneManager")
self.camera = self.sceneMgr.createCamera("Camera")
self.camera.setPosition(ogre.Vector3(0, 0, 500))
self.camera.lookAt(ogre.Vector3(0, 0, -300))
self.camera.NearClipDistance = 5
self.viewport = self.root.getAutoCreatedWindow().addViewport(self.camera)
self.sceneMgr.setShadowTechnique(ogre.SHADOWTYPE_TEXTURE_ADDITIVE)
def setupScene(self):
return True
def setupInputSystem(self):
windowHandle = 0
renderWindow = self.root.getAutoCreatedWindow()
windowHandle = renderWindow.getCustomAttributeInt("WINDOW")
paramList = [("WINDOW", str(windowHandle))]
self.inputManager = OIS.createPythonInputSystem(paramList)
try:
self.keyboard = self.inputManager.createInputObjectKeyboard(OIS.OISKeyboard, False)
self.mouse = self.inputManager.createInputObjectMouse(OIS.OISMouse, False)
self.joystick = self.inputManager.createInputObjectJoyStick(OIS.OISJoyStick, False)
except Exception, e:
raise e
def setupGUI(self):
self.renderer = CEGUI.OgreCEGUIRenderer(self.root.getAutoCreatedWindow(), ogre.RENDER_QUEUE_OVERLAY, False, 3000, self.root.getSceneManager("Default SceneManager"))
self.system = CEGUI.System(self.renderer)
def createFrameListener(self):
self.appFrameListener = AppFrameListener(self, self.keyboard, self.mouse, self.joystick, self.hikariMgr)
self.root.addFrameListener(self.appFrameListener)
def startRenderLoop(self):
self.root.startRendering()
def updateInput(self):
return True
def cleanUp(self):
self.inputManager.destroyInputObjectKeyboard(self.keyboard)
self.inputManager.destroyInputObjectMouse(self.mouse)
self.inputManager.destroyInputObjectJoyStick(self.joystick)
OIS.InputManager.destroyInputSystem(self.inputManager)
self.inputManager = None
del self.renderer
del self.system
del self.viewport
del self.camera
del self.sceneMgr
del self.hikariMgr
del self.appFrameListener
del self.exitListener
del self.root
Test.py:
import ogre.renderer.OGRE as ogre
import ogre.gui.hikari as Hikari
import Application as app
class App(app.Application):
def setupScene(self):
sceneMgr = self.sceneMgr
sceneMgr.ambientLight = (1.0, 1.0, 1.0)
ent1 = sceneMgr.createEntity ('Robot', 'ninja.mesh')
node1 = sceneMgr.getRootSceneNode().createChildSceneNode ('RobotNode')
node1.attachObject (ent1)
control = self.hikariMgr.createFlashOverlay("myControl", self.viewport, 350, 400, Hikari.Position(Hikari.Center))
control.load("controls.swf")
control.setTransparent(True, True)
control.bind("opacityChange", self, "onOpacityChange")
control.bind("colorChange", self, "onColorChange")
def onOpacityChange(self, caller, args):
opacityPercent = args[0].getNumber()
caller.setOpacity(opacityPercent / 100)
return Hikari.FlashValue()
def onColorChange(self, caller, args):
color = args[0].getNumberAsColor()
self.viewport.setBackgroundColour(color)
return Hikari.FlashValue()
if __name__ == '__main__':
try:
import psyco
psyco.full()
except ImportError:
pass
try:
ta = App()
ta.go("Test Window")
except ogre.OgreException, e:
print e
Also, as you can see there is some commented NxOgre code. When I use that code, I get a error that makes no sense. Here is the error:
Traceback (most recent call last):
File "C:\Projects\EmberStudiosPython\Test.py", line 3, in <module>
import Application as app
File "C:\Projects\EmberStudiosPython\Application.py", line 3, in <module>
import ogre.physics.NxOgre as nxogre
File "C:\Python25\lib\site-packages\ogre\physics\NxOgre\__init__.py", line 4, in <module>
from _nxogre_ import *
TypeError: No to_python (by-value) converter found for C++ type: enum NxForceMode
Thanks for any help.
-Jedimace1