[Python-ogre-commit] SF.net SVN: python-ogre:[684] trunk/python-ogre
Brought to you by:
andy_miller,
roman_yakovenko
|
From: <and...@us...> - 2008-08-05 03:02:09
|
Revision: 684
http://python-ogre.svn.sourceforge.net/python-ogre/?rev=684&view=rev
Author: andy_miller
Date: 2008-08-05 03:02:16 +0000 (Tue, 05 Aug 2008)
Log Message:
-----------
Further Updates for the PCZ Portal SceneManager Support
Also changed paths in the CEGUI package to ensure the right dll's are loaded first
Modified Paths:
--------------
trunk/python-ogre/code_generators/ogrepcz/generate_code.py
trunk/python-ogre/code_generators/ogrepcz/hand_made_wrappers.py
trunk/python-ogre/code_generators/ogrepcz/python_ogrepcz_sizeof.h
trunk/python-ogre/demos/ogrepcz/Demo_PCZ01.py
trunk/python-ogre/demos/ogrepcz/RoomObject.py
trunk/python-ogre/demos/plugins.cfg
trunk/python-ogre/packages_2.5/ogre/gui/CEGUI/__init__.py
trunk/python-ogre/packages_2.5/ogre/gui/navi/__init__.py
Modified: trunk/python-ogre/code_generators/ogrepcz/generate_code.py
===================================================================
--- trunk/python-ogre/code_generators/ogrepcz/generate_code.py 2008-08-02 02:45:14 UTC (rev 683)
+++ trunk/python-ogre/code_generators/ogrepcz/generate_code.py 2008-08-05 03:02:16 UTC (rev 684)
@@ -63,18 +63,27 @@
excludes=['::Ogre::PCZSceneManagerFactory::initMetaData',
'::Ogre::PCZSceneManagerFactory::createInstance',
- '::Ogre::PCZSceneManagerFactory::destroyInstance'
+ '::Ogre::PCZSceneManagerFactory::destroyInstance',
+ '::Ogre::Portal::setCorners' # hand wrapped..
]
for e in excludes:
main_ns.member_functions(e).exclude()
- print "Excluded Member Function:", e
+ print "Excluded Member Function(s):", e
excludes=['::Ogre::PCZSceneManagerFactory::FACTORY_TYPE_NAME'
]
for e in excludes:
main_ns.variable(e).exclude()
print "Excluded Variable:", e
-
+
+# std_ns = global_ns.namespace('std')
+# for c in std_ns.classes():
+# if 'map' in c.decl_string or 'Ogre' in c.decl_string:
+# print c.name, c.decl_string
+# std_ns.class_('::std::vector<Ogre::Plane, std::allocator<Ogre::Plane> >')
+# # std_ns.class_('::std::map<std::string, std::allocator<std::string> >')
+
+
############################################################
##
## And there are things that manually need to be INCLUDED
@@ -93,8 +102,29 @@
# '::Ogre::PCZone::NODE_LIST_TYPE'
]
for i in includes:
- main_ns.enum(i).include()
-
+ main_ns.enum(i).include()
+ for c in main_ns.classes():
+ if "Singleton" in c.decl_string:
+ print c, c.name, c.decl_string
+ includes = ['::Ogre::Singleton<Ogre::PCZoneFactoryManager>',
+ 'Ogre::Singleton<Ogre::PCZoneFactoryManager>',
+ '::Ogre::Singleton<::Ogre::PCZoneFactoryManager>',
+ 'Singleton<PCZoneFactoryManager>'
+ ]
+ for i in includes:
+ try:
+ main_ns.class_(i).include()
+ print "Forced Include:", i
+ except:
+ pass
+
+ main_ns.class_('RaySceneQuery').include(already_exposed=True)
+ main_ns.class_('DefaultRaySceneQuery').include(already_exposed=True)
+ main_ns.class_('SceneQuery').include(already_exposed=True)
+ main_ns.class_('RaySceneQueryListener').include(already_exposed=True)
+
+
+
############################################################
##
## And things that need manual fixes, but not necessarly hand wrapped
@@ -106,26 +136,24 @@
main_ns = global_ns.namespace( MAIN_NAMESPACE )
else:
main_ns = global_ns
+
+ includes_already = ['::std::vector<Ogre::PlaneBoundedVolume, std::allocator<Ogre::PlaneBoundedVolume> >',
+ '::std::vector<Ogre::Plane, std::allocator<Ogre::Plane> >',
+ '::std::map<std:string'
+ ]
+ includes = ['::Ogre::Singleton<Ogre::PCZoneFactoryManager>'
+ ]
for c in global_ns.classes():
- if c.decl_string.startswith("::std::vector<Ogre::PlaneBoundedVolume, std::allocator<Ogre::PlaneBoundedVolume> >"):
- print "Excluding:", c
- c.include(already_exposed=True)
- try:
- global_ns.namespace("std").class_('vector<Ogre::PlaneBoundedVolume>, std::allocator<Ogre::BoundedVolume> >').exclude()
- print "OK1"
- except:
- print "FAIL1"
- try:
- main_ns.class_("std::vector<Ogre::PlaneBoundedVolume, std::allocator<Ogre::PlaneBoundedVolume> >").exclude()
- print "OK2"
- except:
- print "FAIL2"
- try:
- main_ns.class_("::std::vector<Ogre::PlaneBoundedVolume, std::allocator<Ogre::PlaneBoundedVolume> >").exclude()
- print "OK3"
- except:
- print "FAIL3"
+ for i in includes_already:
+ if c.decl_string.startswith(i):
+ print "Including Special(already Exposed):", c
+ c.include(already_exposed=True)
+ for i in includes:
+ if c.decl_string.startswith(i):
+ print "Including Special:", c
+ c.include()
+
############################################################
##
## And things that need to have their argument and call values fixed.
@@ -216,30 +244,30 @@
# the 'main'function
#
def generate_code():
- messages.disable(
-# Warnings 1020 - 1031 are all about why Py++ generates wrapper for class X
- messages.W1020
- , messages.W1021
- , messages.W1022
- , messages.W1023
- , messages.W1024
- , messages.W1025
- , messages.W1026
- , messages.W1027
- , messages.W1028
- , messages.W1029
- , messages.W1030
- , messages.W1031
- , messages.W1035
- , messages.W1040
- , messages.W1038
- , messages.W1041
- , messages.W1036 # pointer to Python immutable member
- , messages.W1033 # unnamed variables
- , messages.W1018 # expose unnamed classes
- , messages.W1049 # returns reference to local variable
- , messages.W1014 # unsupported '=' operator
- )
+# messages.disable(
+# # Warnings 1020 - 1031 are all about why Py++ generates wrapper for class X
+# messages.W1020
+# , messages.W1021
+# , messages.W1022
+# , messages.W1023
+# , messages.W1024
+# , messages.W1025
+# , messages.W1026
+# , messages.W1027
+# , messages.W1028
+# , messages.W1029
+# , messages.W1030
+# , messages.W1031
+# , messages.W1035
+# , messages.W1040
+# , messages.W1038
+# , messages.W1041
+# , messages.W1036 # pointer to Python immutable member
+# , messages.W1033 # unnamed variables
+# , messages.W1018 # expose unnamed classes
+# , messages.W1049 # returns reference to local variable
+# , messages.W1014 # unsupported '=' operator
+# )
#
# Use GCCXML to create the controlling XML file.
# If the cache file (../cache/*.xml) doesn't exist it gets created, otherwise it just gets loaded
@@ -279,22 +307,25 @@
global_ns = mb.global_ns
global_ns.exclude()
+# #
+# # I'm assuming that any 'std' classes etc we need will have already been exposed by the Ogre library
+# #
+# std_ns = global_ns.namespace('std')
+# std_ns.include(already_exposed=True)
+
# We don't include all of MAIN_NAMESPACE otherwise we get the same full wrapper
# so instead we include classes with names that start with PCZ
main_ns = global_ns.namespace( MAIN_NAMESPACE )
-# main_ns.include()
+# # main_ns.include( already_exposed = True ) ## force the ogre class to be exposed as well...
+
for c in main_ns.classes():
if c.name.startswith ('PCZ') or c.name.startswith ('PCPlane') or c.name.startswith ('Portal'):
c.include()
- print "Including ", c
+ print "Including ", c, c.already_exposed
for c in ['Portal','PCPlane']:
main_ns.class_(c).include()
print "Including ", c
-# for e in c.enums(allow_empty=True):
-# e.include()
-# for v in c.variables(allow_empty=True):
-# v.include()
common_utils.AutoExclude ( mb, MAIN_NAMESPACE )
ManualExclude ( mb )
Modified: trunk/python-ogre/code_generators/ogrepcz/hand_made_wrappers.py
===================================================================
--- trunk/python-ogre/code_generators/ogrepcz/hand_made_wrappers.py 2008-08-02 02:45:14 UTC (rev 683)
+++ trunk/python-ogre/code_generators/ogrepcz/hand_made_wrappers.py 2008-08-05 03:02:16 UTC (rev 684)
@@ -1,6 +1,13 @@
import os
import environment
+
+#
+# these casting calls (in General) shouldn't be needed as by default Python/Boost understands that the objects
+# are 'PCZ' ones and it all works..
+#
+# However adding casting functions to each class to make them into their Ogre parent types just in case
+#
WRAPPER_DEFINITION_General = \
"""
// The following helper functions are a start and possibly need to be extended to include
@@ -21,28 +28,126 @@
PCZSphereSceneQuery : public DefaultSphereSceneQuery
PCZPlaneBoundedVolumeListSceneQuery : public DefaultPlaneBoundedVolumeListSceneQuery
*/
-
-
"""
WRAPPER_REGISTRATION_General = [
- """bp::def( "castAsPCZSceneNode", &General_castAsPCZSceneNode,
+ """def( "castAsPCZSceneNode", &General_castAsPCZSceneNode,
"Python-Ogre Helper Function: Casts a SceneNode as a PCZSceneNode.\\n\\
Input: SceneNode\\n\\
Ouput: PCZSceneNode",\
bp::return_value_policy< bp::reference_existing_object, bp::default_call_policies >());""",
- """bp::def( "castAsPCZSceneManager", &General_castAsPCZSceneManager,
+ """def( "castAsPCZSceneManager", &General_castAsPCZSceneManager,
"Python-Ogre Helper Function: Casts a SceneManager as a PCZSceneManager.\\n\\
Input: SceneManager\\n\\
Ouput: PCZSceneManager",\
bp::return_value_policy< bp::reference_existing_object, bp::default_call_policies >());""",
- """bp::def( "castAsPCZRaySceneQuery", &General_castAsPCZRaySceneQuery,
+ """def( "castAsPCZRaySceneQuery", &General_castAsPCZRaySceneQuery,
"Python-Ogre Helper Function: Casts a RaySceneQuery as a PCZRaySceneQuery.\\n\\
Input: RaySceneQuery\\n\\
Ouput: PCZRaySceneQuery",\
bp::return_value_policy< bp::reference_existing_object, bp::default_call_policies >());""",
]
+
+WRAPPER_DEFINITION_PCZSceneNode = \
+"""
+Ogre::SceneNode * PCZSceneNode_castAsSceneNode( Ogre::PCZSceneNode * me ){
+ return ((Ogre::SceneNode*) me);
+ }
+"""
+WRAPPER_REGISTRATION_PCZSceneNode = [
+ """def( "castAsSceneNode", &PCZSceneNode_castAsSceneNode,
+ "Python-Ogre Helper Function: Casts a PCZSceneNode as a SceneNode.\\n\\
+ Input: None\\n\\
+ Ouput: SceneNode",\
+ bp::return_value_policy< bp::reference_existing_object, bp::default_call_policies >());"""
+ ]
+
+
+
+WRAPPER_DEFINITION_PCZSceneManager = \
+"""
+Ogre::SceneManager * PCZSceneManager_castAsSceneManager( Ogre::PCZSceneManager * me ){
+ return ((Ogre::SceneManager*) me);
+ }
+"""
+WRAPPER_REGISTRATION_PCZSceneManager = [
+ """def( "castAsSceneManager", &PCZSceneManager_castAsSceneManager,
+ "Python-Ogre Helper Function: Casts a PCZSceneManager as a SceneManager.\\n\\
+ Input: None\\n\\
+ Ouput: SceneManager",\
+ bp::return_value_policy< bp::reference_existing_object, bp::default_call_policies >());"""
+ ]
+
+
+WRAPPER_DEFINITION_PCZRaySceneQuery = \
+"""
+Ogre::RaySceneQuery * PCZRaySceneQuery_castAsRaySceneQuery( Ogre::PCZRaySceneQuery * me ){
+ return ( ( Ogre::RaySceneQuery* ) me );
+ }
+Ogre::RaySceneQueryResult& PCZRaySceneQuery_execute( Ogre::PCZRaySceneQuery * me ){
+ return ((Ogre::RaySceneQuery*) me)->execute();
+ }
+
+"""
+WRAPPER_REGISTRATION_PCZRaySceneQuery = [
+ """def( "castAsRaySceneQuery", &PCZRaySceneQuery_castAsRaySceneQuery,
+ "Python-Ogre Helper Function: Casts a PCZRaySceneQuery as a RaySceneQuery.\\n\\
+ Input: None\\n\\
+ Ouput: RaySceneQuery",\
+ bp::return_value_policy< bp::reference_existing_object, bp::default_call_policies >());""",
+ """def( "execute", &PCZRaySceneQuery_execute,
+ "Python-Ogre Helper Function: Executes a query.\\n\\
+ Input: None\\n\\
+ Ouput: RaySceneQueryResult",\
+ bp::return_value_policy< bp::default_call_policies >());"""
+ ]
+
+
+WRAPPER_DEFINITION_PCZAxisAlignedBoxSceneQuery = \
+"""
+Ogre::AxisAlignedBoxSceneQuery * General_castAsAxisAlignedBoxSceneQuery( Ogre::PCZAxisAlignedBoxSceneQuery * me ){
+ return (Ogre::AxisAlignedBoxSceneQuery*) me;
+ }
+"""
+
+WRAPPER_DEFINITION_PCZSphereSceneQuery = \
+"""
+Ogre::SphereSceneQuery * General_castAsSphereSceneQuery( Ogre::PCZSphereSceneQuery * me ){
+ return (Ogre::SphereSceneQuery*) me;
+ }
+"""
+
+WRAPPER_DEFINITION_PCZAxisAlignedBoxSceneQuery = \
+"""
+Ogre::PlaneBoundedVolumeListSceneQuery * General_castAsPlaneBoundedVolumeListSceneQuery( Ogre::PCZPlaneBoundedVolumeListSceneQuery * me ){
+ return (Ogre::PlaneBoundedVolumeListSceneQuery*) me;
+ }
+"""
+
+
+
+
+
+WRAPPER_DEFINITION_Portal = """
+void Portal_setCorners( ::Ogre::Portal & me, boost::python::list listin )
+{
+ Ogre::Vector3 corners[4];
+ size_t maxlen = len ( listin );
+ if (maxlen > 4) maxlen = 4; // can only handle upto 4 'corners'
+ size_t counter = 0;
+ for (counter=0;counter < maxlen; counter ++ )
+ corners[counter] = boost::python::extract<Ogre::Vector3> (listin[counter]);
+ me.setCorners ( corners);
+}
+"""
+WRAPPER_REGISTRATION_Portal = [
+ """def( "setCorners", &::Portal_setCorners,\\
+ "Python-Ogre Helper Function: Sets the corners of a portal.\\n\\
+ Input: List of Vector3's - either 2 or 4 depending on portal type\\n\\
+ Output: None");"""
+ ]
+
#################################################################################################
#################################################################################################
@@ -51,6 +156,20 @@
class_.add_registration_code ( c )
def apply( mb ):
+ rt = mb.class_( 'Portal' )
+ rt.add_declaration_code( WRAPPER_DEFINITION_Portal )
+ apply_reg (rt, WRAPPER_REGISTRATION_Portal )
+
+ rt = mb.class_( 'PCZSceneNode' )
+ rt.add_declaration_code( WRAPPER_DEFINITION_PCZSceneNode )
+ apply_reg (rt, WRAPPER_REGISTRATION_PCZSceneNode )
+ rt = mb.class_( 'PCZSceneManager' )
+ rt.add_declaration_code( WRAPPER_DEFINITION_PCZSceneManager )
+ apply_reg (rt, WRAPPER_REGISTRATION_PCZSceneManager )
+ rt = mb.class_( 'PCZRaySceneQuery' )
+ rt.add_declaration_code( WRAPPER_DEFINITION_PCZRaySceneQuery )
+ apply_reg (rt, WRAPPER_REGISTRATION_PCZRaySceneQuery )
+
mb.add_declaration_code( WRAPPER_DEFINITION_General )
apply_reg (mb, WRAPPER_REGISTRATION_General )
\ No newline at end of file
Modified: trunk/python-ogre/code_generators/ogrepcz/python_ogrepcz_sizeof.h
===================================================================
--- trunk/python-ogre/code_generators/ogrepcz/python_ogrepcz_sizeof.h 2008-08-02 02:45:14 UTC (rev 683)
+++ trunk/python-ogre/code_generators/ogrepcz/python_ogrepcz_sizeof.h 2008-08-05 03:02:16 UTC (rev 684)
@@ -1 +1,5 @@
// sizeof ( variable );
+sizeof( PCZCamera );
+sizeof ( ZoneData );
+sizeof ( Ogre::Singleton<Ogre::PCZoneFactoryManager> );
+
Modified: trunk/python-ogre/demos/ogrepcz/Demo_PCZ01.py
===================================================================
--- trunk/python-ogre/demos/ogrepcz/Demo_PCZ01.py 2008-08-02 02:45:14 UTC (rev 683)
+++ trunk/python-ogre/demos/ogrepcz/Demo_PCZ01.py 2008-08-05 03:02:16 UTC (rev 684)
@@ -27,22 +27,24 @@
import ogre.io.OIS as ois
import ogre.renderer.ogrepcz as pcz
-# import RoomObject
+import RoomObject
Global_buildingNode = None #pcz.PCZSceneNode()
-Global_buildingTranslate = None # ogre.Vector3()
-Global_raySceneQuery = None # ogre.RaySceneQuery()
-Global_targetMO = None #ogre.MovableObject()
-class PCZTestFrameListener ( sf.ExampleFrameListener):
- def __init__(self, renderWindow, camera ):
+class PCZTestFrameListener ( sf.FrameListener):
+ def __init__(self, renderWindow, sceneManager,camera ):
sf.FrameListener.__init__(self, renderWindow, camera)
self.moveSpeed = 15.0
- self.raySceneQueue = sceneManager.createRayQuery(ogre.Ray(camera.getPosition(),
+ self.targetMO =0
+ self.buildingTranslate = ogre.Vector3()
+
+ print "\n\n** :", sceneManager
+ self.raySceneQuery= sceneManager.createRayQuery(ogre.Ray(camera.getPosition(),
ogre.Vector3.NEGATIVE_UNIT_Y))
+
+ print "\n\n** :", sceneManager, "\n", self.raySceneQuery
self.camera = camera
- self.updateRay=ogre.Ray()
self.pczCameraParentNode = pcz.castAsPCZSceneNode(self.camera.getParentSceneNode())
def moveCamera( self ):
@@ -53,84 +55,87 @@
self.camera.getParentSceneNode().pitch(self.rotationY)
self.camera.getParentSceneNode().yaw(self.rotationX, ogre.Node.TS_WORLD)
- Global_buildingNode.translate(Global_buildingTranslate, ogre.Node.TS_LOCAL)
+ Global_buildingNode.translate(self.buildingTranslate, ogre.Node.TS_LOCAL)
def frameRenderingQueued( self, evt ):
- if sf.FrameListener.frameRenderingQueued( evt ) == False:
+ if sf.FrameListener.frameRenderingQueued( self, evt ) == False:
return False
- Global_buildingTranslate = ogre.Vector3(0,0,0)
- if self.keyboard.isKeyDown( ois.KC_LBRACKET ):
- Global_buildingTranslate = ogre.Vector3(0,-10,0)
- if self.keyboard.isKeyDown( ois.KC_RBRACKET ):
- Global_buildingTranslate = ogre.Vector3(0,10,0)
- if self.keyboard.isKeyDown( ois.KC_LSHIFT ) or self.keyboard.isKeyDown( ois.KC_RSHIFT ):
+ self.buildingTranslate = ogre.Vector3(0,0,0)
+ if self.Keyboard.isKeyDown( ois.KC_LBRACKET ):
+ self.buildingTranslate = ogre.Vector3(0,-10,0)
+ if self.Keyboard.isKeyDown( ois.KC_RBRACKET ):
+ self.buildingTranslate = ogre.Vector3(0,10,0)
+ if self.Keyboard.isKeyDown( ois.KC_LSHIFT ) or self.Keyboard.isKeyDown( ois.KC_RSHIFT ):
self.moveSpeed = 150
- else
+ else:
self.moveSpeed = 15
# test the ray scene query by showing bounding box of whatever the camera is pointing directly at
# (takes furthest hit)
- self.updateRay.setOrigin(self.camera.getParentSceneNode().getPosition())
- self.updateRay.setDirection(self.camera.getParentSceneNode().getOrientation()*ogre.Vector3.NEGATIVE_UNIT_Z)
- Global_raySceneQuery.setRay(updateRay)
+ updateRay = ogre.Ray()
+ updateRay.setOrigin(self.camera.getParentSceneNode().getPosition())
+ updateRay.setDirection(self.camera.getParentSceneNode().getOrientation()*ogre.Vector3.NEGATIVE_UNIT_Z)
+ self.raySceneQuery.setRay(updateRay)
zone = self.pczCameraParentNode.getHomeZone()
- pcz.castAsPCZRaySceneQuery(Global_raySceneQuery).setStartZone(zone)
- pcz.castAsPCZRaySceneQuery(Global_raySceneQuery).setExcludeNode(self.camera.getParentSceneNode())
- for queryResult in Global_raySceneQuery.execute():
- ri = qryResult.rbegin()
- mo = ri.movable
- if Global_targetMO != mo:
- if Global_targetMO != 0:
- Global_targetMO.getParentSceneNode().showBoundingBox(False)
- Global_targetMO = mo
- Global_targetMO.getParentSceneNode().showBoundingBox(True)
+ pcz.castAsPCZRaySceneQuery(self.raySceneQuery).setStartZone(zone)
+ pcz.castAsPCZRaySceneQuery(self.raySceneQuery).setExcludeNode(self.camera.getParentSceneNode())
+ rq = self.raySceneQuery.castAsRaySceneQuery()
+# print "RAYQUERY", rq
+ for queryResult in self.raySceneQuery.execute(): #
+ mo = queryResult.movable
+ if self.targetMO != mo:
+ if self.targetMO != 0:
+ self.targetMO.getParentSceneNode().showBoundingBox(False)
+ self.targetMO = mo
+ self.targetMO.getParentSceneNode().showBoundingBox(True)
return True
-class TerrainListener(sf.FrameListener):
- def __init__(self, renderWindow, camera, sceneManager):
- sf.FrameListener.__init__(self, renderWindow, camera)
- self.sceneManager = sceneManager
- self.moveSpeed = 50.0
-
- self.raySceneQuery = sceneManager.createRayQuery(ogre.Ray(camera.getPosition(),
- ogre.Vector3.NEGATIVE_UNIT_Y))
- self.camera = camera
- #self.camera.setPosition (self.camera.getPosition() + ogre.Vector3(0.0, 10.0, 0.0))
+# class TerrainListener(sf.FrameListener):
+# def __init__(self, renderWindow, camera, sceneManager):
+# sf.FrameListener.__init__(self, renderWindow, camera)
+# self.sceneManager = sceneManager
+# self.moveSpeed = 50.0
+#
+# self.raySceneQuery = sceneManager.createRayQuery(ogre.Ray(camera.getPosition(),
+# ogre.Vector3.NEGATIVE_UNIT_Y))
+# self.camera = camera
+# #self.camera.setPosition (self.camera.getPosition() + ogre.Vector3(0.0, 10.0, 0.0))
+#
+# def frameStarted(self, frameEvent):
+# # clamp to terrain
+# updateRay = ogre.Ray()
+# updateRay.setOrigin (self.camera.getPosition() + ogre.Vector3(0.0, 10.0, 0.0))
+# updateRay.setDirection (ogre.Vector3.NEGATIVE_UNIT_Y)
+# self.raySceneQuery.Ray = updateRay
+# for queryResult in self.raySceneQuery.execute():
+# if queryResult.worldFragment is not None:
+# pos = self.camera.getPosition()
+# self.camera.setPosition (pos.x, pos.y - queryResult.distance + 15.0, pos.z)
+# break
+#
+# return sf.FrameListener.frameStarted(self, frameEvent)
- def frameStarted(self, frameEvent):
- # clamp to terrain
- updateRay = ogre.Ray()
- updateRay.setOrigin (self.camera.getPosition() + ogre.Vector3(0.0, 10.0, 0.0))
- updateRay.setDirection (ogre.Vector3.NEGATIVE_UNIT_Y)
- self.raySceneQuery.Ray = updateRay
- for queryResult in self.raySceneQuery.execute():
- if queryResult.worldFragment is not None:
- pos = self.camera.getPosition()
- self.camera.setPosition (pos.x, pos.y - queryResult.distance + 15.0, pos.z)
- break
- return sf.FrameListener.frameStarted(self, frameEvent)
-
-
class PCZTestApplication (sf.Application):
def __del__(self):
- del Global_raySceneQuery
+ del self.raySceneQuery
def _chooseSceneManager ( self ):
# Create the SceneManager, in this case a generic one
self.sceneManager = self.root.createSceneManager("PCZSceneManager", "PCZSceneManager")
+ print "\n****:", self.sceneManager
# initialize the scene manager using terrain as default zone
zoneTypeName = "ZoneType_Default"
self.pczSM = pcz.castAsPCZSceneManager( self.sceneManager ) # store this for future reference
self.pczSM.init(zoneTypeName)
#self.sceneManager.showBoundingBoxes(True)
-# def _createFrameListener( self ):
-# self.frameListener= PCZTestFrameListener(self.renderWindow, self.camera)
-# self.root.addFrameListener(self.frameListener)
+ def _createFrameListener( self ):
+ self.frameListener= PCZTestFrameListener(self.renderWindow, self.sceneManager,self.camera)
+ self.root.addFrameListener(self.frameListener)
def _createCamera(self):
# Create the camera
@@ -210,7 +215,7 @@
# Create a skybox
self.sceneManager.setSkyBox(True, "Examples/CloudyNoonSkyBox", 500 )
# put the skybox node in the default zone
-# self.pczSM.setSkyZone(None)
+ self.pczSM.setSkyZone(None)
# Create a light
l = self.sceneManager.createLight("MainLight")
@@ -293,31 +298,31 @@
# set far clip plane to one terrain zone width (we have a LOT of terrain here, so we need to do far clipping!)
self.camera.setFarClipDistance(1500)
-# # create test buildinig
-# RoomObject roomObj
-# Global_buildingNode = roomObj.createTestBuilding(self.sceneManager, String("1"))
-# Global_buildingNode.setPosition(500, 165, 570)
-# #ogre.Radian r = Radian(3.1416/7.0)
-# #Global_buildingNode.rotate(ogre.Vector3.UNIT_Y, r)
-#
+ # create test buildinig
+ roomObj = RoomObject.RoomObject()
+ Global_buildingNode = roomObj.createTestBuilding(self.sceneManager, "1")
+ Global_buildingNode.setPosition(500, 165, 570)
+ #ogre.Radian r = Radian(3.1416/7.0)
+ #Global_buildingNode.rotate(ogre.Vector3.UNIT_Y, r)
+
# # create another test buildinig
-# RoomObject roomObj2
+# roomObj2 = RoomObject.RoomObject()
# Global_buildingNode = roomObj2.createTestBuilding(self.sceneManager, String("2"))
# Global_buildingNode.setPosition(400, 165, 570)
-# #ogre.Radian r = Radian(3.1416/7.0)
-# #Global_buildingNode.rotate(ogre.Vector3.UNIT_Y, r)
-#
-# # Position camera in the center of the building
-# self.cameraNode.setPosition(Global_buildingNode.getPosition())
-# # Look back along -Z
-# self.camera.lookAt(self.cameraNode._getDerivedPosition() + ogre.Vector3(0,0,-300))
-# # Update bounds for camera
-# self.cameraNode._updateBounds()
-#
+ #ogre.Radian r = Radian(3.1416/7.0)
+ #Global_buildingNode.rotate(ogre.Vector3.UNIT_Y, r)
+
+ # Position camera in the center of the building
+ self.cameraNode.setPosition(Global_buildingNode.getPosition())
+ # Look back along -Z
+ self.camera.lookAt(self.cameraNode._getDerivedPosition() + ogre.Vector3(0,0,-300))
+ # Update bounds for camera
+ self.cameraNode._updateBounds()
+
# # create the ray scene query
-# Global_raySceneQuery = self.sceneManager.createRayQuery(
+# self.raySceneQuery = self.sceneManager.createRayQuery(
# Ray(self.camera.getParentNode().getPosition(), ogre.Vector3.NEGATIVE_UNIT_Z))
-# Global_raySceneQuery.setSortByDistance(True, 5)
+# self.raySceneQuery.setSortByDistance(True, 5)
Modified: trunk/python-ogre/demos/ogrepcz/RoomObject.py
===================================================================
--- trunk/python-ogre/demos/ogrepcz/RoomObject.py 2008-08-02 02:45:14 UTC (rev 683)
+++ trunk/python-ogre/demos/ogrepcz/RoomObject.py 2008-08-05 03:02:16 UTC (rev 684)
@@ -1,1009 +1,684 @@
##
+## Filename : RoomObject.py
+## based on C++ demo in Ogre
##
-##
-## Filename : RoomObject.cpp
-# #
-# #
-# # class RoomObject
-# #
-# # private:
-# # Ogre::Vector3 points[32];
-# # int mPortalCount;
-# # public:
+import sys
+import os
+sys.path.insert(0,'..')
+import PythonOgreConfig
-DOOR_NONE = 0x00
-DOOR_TOP = 0x01
-DOOR_BOT = 0x02
-DOOR_FRONT = 0x04
-DOOR_BACK = 0x08
-DOOR_LEFT = 0x10
-DOOR_RIGHT = 0x20
-DOOR_ALL = 0xFF
+## this here becase the Plug_PCZSceneManager.dll needs to be accessed by both the python module and the ogre plugins
+if sys.platform == 'win32':
+ newpath = os.path.join ( os.path.abspath(os.path.dirname(__file__)), '../../plugins')
+ os.environ['PATH'] = newpath +';' + os.environ['PATH']
-# #
-# #
-#include "Ogre.h"
-#include "OgreMaterial.h"
-#include "RoomObject.h"
-#include "OgrePortal.h"
+import ogre.renderer.OGRE as ogre
+import ogre.renderer.ogrepcz as pcz
-using namespace Ogre
-static int count = 0
+DOOR_NONE = 0x00
+DOOR_TOP = 0x01
+DOOR_BOT = 0x02
+DOOR_FRONT = 0x04
+DOOR_BACK = 0x08
+DOOR_LEFT = 0x10
+DOOR_RIGHT = 0x20
+DOOR_ALL = 0xFF
-PCZSceneNode * RoomObject.createTestBuilding(Ogre::SceneManager *scene, String & name)
+class RoomObject:
+ def __init__ ( self ):
+ self.initMaterial=False
+ self.count = 0
+ self.points =[ogre.Vector3]*32
- count++
- mPortalCount = 0
- Ogre.PCZSceneManager * pczSM = (Ogre::PCZSceneManager*)scene
+ def createTestBuilding(self, scene,name):
+ self.count+=1
+ pczSM = pcz.castAsPCZSceneManager(scene )
+
+ ## set points to building exterior size
+ self.createPoints(ogre.Vector3(60.0, 40.0, 60.0), ogre.Vector3(4.0, 10.0, 4.0))
+
+ ## create the building exterior
+ exterior = pczSM.createEntity( name + "_building_exterior", "building_exterior.mesh" )
+
+ ## make the enclosure a child node of the root scene node
+ exteriorNode = pcz.castAsPCZSceneNode(scene.getRootSceneNode()).createChildSceneNode(name +"_building_exterior_node", ogre.Vector3( 0, 0, 0 ) )
+ exteriorNode.attachObject(exterior)
+ pczSM.addPCZSceneNode(exteriorNode, pczSM.getDefaultZone())
+
+ ## create portals for the building exterior
+ self.createPortals(scene,
+ exterior,
+ exteriorNode,
+ pczSM.getDefaultZone(),
+ DOOR_FRONT|DOOR_BACK|DOOR_LEFT|DOOR_RIGHT,
+ True)
+
+ ## reset points to room size
+ self.createPoints(ogre.Vector3(20.0, 10.0, 20.0), ogre.Vector3(4.0, 10.0, 4.0))
+
+ ## create an interior room
+ room = pczSM.createEntity( name +"_room1", "room_nzpz.mesh" )
+
+ ## add the room as a child node to the enclosure node
+ roomNode = pcz.castAsPCZSceneNode(exteriorNode).createChildSceneNode( name +"_room1_node", ogre.Vector3( 0.0, 0.0, 20.0 ) )
+ roomNode.attachObject(room)
+
+ ## room needs it's own zone
+ zoneType = "ZoneType_Default"
+ zoneName = name +"_room1_zone"
+ newZone = pczSM.createZone(zoneType, zoneName)
+ newZone.setEnclosureNode(roomNode)
+ pczSM.addPCZSceneNode(roomNode, newZone)
+
+ ## create portals for the room
+ self.createPortals(scene,
+ room,
+ roomNode,
+ newZone,
+ DOOR_FRONT|DOOR_BACK,
+ False)
+
+ ## create another interior room
+ room = pczSM.createEntity( name +"_room2", "room_nxpxnypynzpz.mesh" )
+
+ ## add the room as a child node to the enclosure node
+ roomNode = pcz.castAsPCZSceneNode(exteriorNode).createChildSceneNode( name +"_room2_node", ogre.Vector3( 0.0, 0.0, 0.0 ) )
+ roomNode.attachObject(room)
+
+ ## room needs it's own zone
+ zoneName = name +"_room2_zone"
+ newZone = pczSM.createZone(zoneType, zoneName)
+ newZone.setEnclosureNode(roomNode)
+ pczSM.addPCZSceneNode(roomNode, newZone)
+
+ ## create portals for the room
+ self.createPortals(scene,
+ room,
+ roomNode,
+ newZone,
+ DOOR_FRONT|DOOR_BACK|DOOR_LEFT|DOOR_RIGHT|DOOR_TOP|DOOR_BOT,
+ False)
+
+ ## create another interior room
+ room = pczSM.createEntity( name +"_room3", "room_nzpz.mesh" )
+
+ ## add the room as a child node to the enclosure node
+ roomNode = pcz.castAsPCZSceneNode(exteriorNode).createChildSceneNode( name +"_room3_node", ogre.Vector3( 0.0, 0.0, -20.0 ) )
+ roomNode.attachObject(room)
+
+ ## room needs it's own zone
+ zoneName = name +"_room3_zone"
+ newZone = pczSM.createZone(zoneType, zoneName)
+ newZone.setEnclosureNode(roomNode)
+ pczSM.addPCZSceneNode(roomNode, newZone)
+
+ ## create portals for the room
+ self.createPortals(scene,
+ room,
+ roomNode,
+ newZone,
+ DOOR_FRONT|DOOR_BACK,
+ False)
+
+ ## create another interior room
+ room = pczSM.createEntity( name +"_room4", "room_nxpx.mesh" )
+
+ ## add the room as a child node to the enclosure node
+ roomNode = pcz.castAsPCZSceneNode(exteriorNode).createChildSceneNode( name +"_room4_node", ogre.Vector3( -20.0, 0.0, 0.0 ) )
+ roomNode.attachObject(room)
+
+ ## room needs it's own zone
+ zoneName = name +"_room4_zone"
+ newZone = pczSM.createZone(zoneType, zoneName)
+ newZone.setEnclosureNode(roomNode)
+ pczSM.addPCZSceneNode(roomNode, newZone)
+
+ ## create portals for the room
+ self.createPortals(scene,
+ room,
+ roomNode,
+ newZone,
+ DOOR_LEFT|DOOR_RIGHT,
+ False)
+
+ ## create another interior room
+ room = pczSM.createEntity( name +"_room5", "room_nxpx.mesh" )
+
+ ## add the room as a child node to the enclosure node
+ roomNode = pcz.castAsPCZSceneNode(exteriorNode).createChildSceneNode( name +"_room5_node", ogre.Vector3( 20.0, 0.0, 0.0 ) )
+ roomNode.attachObject(room)
+
+ ## room needs it's own zone
+ zoneName = name +"_room5_zone"
+ newZone = pczSM.createZone(zoneType, zoneName)
+ newZone.setEnclosureNode(roomNode)
+ pczSM.addPCZSceneNode(roomNode, newZone)
+
+ ## create portals for the room
+ self.createPortals(scene,
+ room,
+ roomNode,
+ newZone,
+ DOOR_LEFT|DOOR_RIGHT,
+ False)
+
+ ## create another interior room
+ room = pczSM.createEntity( name +"_room6", "room_ny.mesh" )
+
+ ## add the room as a child node to the enclosure node
+ roomNode = pcz.castAsPCZSceneNode(exteriorNode).createChildSceneNode( name +"_room6_node", ogre.Vector3( 0.0, 10.0, 0.0 ) )
+ roomNode.attachObject(room)
+
+ ## room needs it's own zone
+ zoneName = name +"_room6_zone"
+ newZone = pczSM.createZone(zoneType, zoneName)
+ newZone.setEnclosureNode(roomNode)
+ pczSM.addPCZSceneNode(roomNode, newZone)
+
+ ## create portals for the room
+ self.createPortals(scene,
+ room,
+ roomNode,
+ newZone,
+ DOOR_BOT,
+ False)
+
+ ## create another interior room
+ room = pczSM.createEntity( name +"_room7", "room_py.mesh" )
+
+ ## add the room as a child node to the enclosure node
+ roomNode = pcz.castAsPCZSceneNode(exteriorNode).createChildSceneNode( name +"_room7_node", ogre.Vector3( 0.0, -50.0, 0.0 ) )
+ roomNode.attachObject(room)
+
+ ## room needs it's own zone
+ zoneName = name +"_room7_zone"
+ newZone = pczSM.createZone(zoneType, zoneName)
+ newZone.setEnclosureNode(roomNode)
+ pczSM.addPCZSceneNode(roomNode, newZone)
+
+ ## create portals for the room
+ self.createPortals(scene,
+ room,
+ roomNode,
+ newZone,
+ DOOR_TOP,
+ False)
+
+ ## reset points to tall room size
+ self.createPoints(ogre.Vector3(20.0, 40.0, 20.0), ogre.Vector3(4.0, 10.0, 4.0))
+
+ ## create another interior room
+ room = pczSM.createEntity( name +"_room8", "room_nypy_4y.mesh" )
+
+ ## add the room as a child node to the enclosure node
+ roomNode = pcz.castAsPCZSceneNode(exteriorNode).createChildSceneNode( name +"_room8_node", ogre.Vector3( 0.0, -25.0, 0.0 ) )
+ roomNode.attachObject(room)
+
+ ## room needs it's own zone
+ zoneName = name +"_room8_zone"
+ newZone = pczSM.createZone(zoneType, zoneName)
+ newZone.setEnclosureNode(roomNode)
+ pczSM.addPCZSceneNode(roomNode, newZone)
+
+ ## create portals for the room
+ self.createPortals(scene,
+ room,
+ roomNode,
+ newZone,
+ DOOR_BOT|DOOR_TOP,
+ False)
+
+
+ ## resolve portal zone pointers
+ pczSM.connectPortalsToTargetZonesByLocation()
+
+ return exteriorNode
- ## set points to building exterior size
- createPoints(Vector3(60.0, 40.0, 60.0), Vector3(4.0, 10.0, 4.0))
- ## create the building exterior
- Entity *exterior = pczSM->createEntity( name + "_building_exterior", "building_exterior.mesh" )
- ## make the enclosure a child node of the root scene node
- PCZSceneNode * exteriorNode
- exteriorNode = (PCZSceneNode*)scene->getRootSceneNode()->createChildSceneNode(name +"_building_exterior_node", Vector3( 0.0, 0.0f, 0.0f ) )
- exteriorNode->attachObject(exterior)
- pczSM->addPCZSceneNode(exteriorNode, pczSM->getDefaultZone())
+ def createRoom(self, scene, name, doorFlags, isEnclosure, dimensions, doorDimensions):
+ self.addMaterial(name, ogre.ColourValue(1,1,1,.75), Ogre.SBT_TRANSPARENT_ALPHA)
+ room = scene.createManualObject(name)
+ room.begin(name, ogre.RenderOperation.OT_TRIANGLE_LIST)
+
+ ## create points
+ self.createPoints(dimensions, doorDimensions)
+
+ fade=0.5
+ solid=0.8
+ color = ogre.ColourValue(0, 0, solid, solid)
+
+ ## copy to room
+ for i in range(32):
+ room.position(self.self.points[i])
+ room.colour(color)
+
+ self.createWalls(room, doorFlags, isEnclosure)
+ room.end()
+ return room
- ## create portals for the building exterior
- createPortals(scene,
- exterior,
- exteriorNode,
- pczSM->getDefaultZone(),
- DOOR_FRONT|DOOR_BACK|DOOR_LEFT|DOOR_RIGHT,
- True)
- ## reset points to room size
- createPoints(Vector3(20.0, 10.0, 20.0), Vector3(4.0, 10.0, 4.0))
+ def addMaterial( self, mat, clr, sbt):
+ if(self.initMaterial):
+ return
+ else:
+ self.initMaterial=True
+
+ matptr = ogre.MaterialManager.getSingleton().create(mat, "General")
+ matptr.setReceiveShadows(False)
+ matptr.getTechnique(0).setLightingEnabled(True)
+ matptr.getTechnique(0).getPass(0).setDiffuse(clr)
+ matptr.getTechnique(0).getPass(0).setAmbient(clr)
+ matptr.getTechnique(0).getPass(0).setSelfIllumination(clr)
+ matptr.getTechnique(0).getPass(0).setSceneBlending(sbt)
+ matptr.getTechnique(0).getPass(0).setLightingEnabled(False)
+ matptr.getTechnique(0).getPass(0).setVertexColourTracking(Ogre.TVC_DIFFUSE)
- ## create an interior room
- Entity *room = pczSM->createEntity( name +"_room1", "room_nzpz.mesh" )
- ## add the room as a child node to the enclosure node
- PCZSceneNode * roomNode
- roomNode = (PCZSceneNode*)exteriorNode->createChildSceneNode( name +"_room1_node", Vector3( 0.0, 0.0f, 20.0f ) )
- roomNode->attachObject(room)
+ def createPoints(self, dimensions, doorDimensions):
- ## room needs it's own zone
- Ogre.String zoneType = "ZoneType_Default"
- Ogre.String zoneName = name +"_room1_zone"
- PCZone * newZone = pczSM->createZone(zoneType, zoneName)
- newZone->setEnclosureNode(roomNode)
- pczSM->addPCZSceneNode(roomNode, newZone)
+ l = dimensions.x/2
+ h = dimensions.y/2
+ w = dimensions.z/2
+
+ ## 4 7
+ ## *-------*
+ ## /| /|
+ ## / | / | y
+ ## / 5| 3/ 6| |
+ ## 0*---*---*---* *-- x
+ ## | / | / /
+ ## | / | / z
+ ## |/ |/
+ ## 1*-------*2
+
+ self.points[0] = ogre.Vector3(-l, h, w) ##0
+ self.points[1] = ogre.Vector3(-l, -h, w) ##1
+ self.points[2] = ogre.Vector3(l, -h, w) ##2
+ self.points[3] = ogre.Vector3(l, h, w) ##3
+
+ self.points[4] = ogre.Vector3(-l, h, -w) ##4
+ self.points[5] = ogre.Vector3(-l, -h, -w) ##5
+ self.points[6] = ogre.Vector3(l, -h, -w) ##6
+ self.points[7] = ogre.Vector3(l, h, -w) ##7
+
+ ## doors
+ l2 = doorDimensions.x/2
+ h2 = doorDimensions.y/2
+ w2 = doorDimensions.z/2
+
+ ## front door
+ self.points[8] = ogre.Vector3(-l2, h2, w) ##8
+ self.points[9] = ogre.Vector3(-l2, -h2, w) ##9
+ self.points[10] = ogre.Vector3(l2, -h2, w) ##10
+ self.points[11] = ogre.Vector3(l2, h2, w) ##11
+
+ ## back door
+ self.points[12] = ogre.Vector3(-l2, h2, -w) ##12
+ self.points[13] = ogre.Vector3(-l2, -h2, -w) ##13
+ self.points[14] = ogre.Vector3(l2, -h2, -w) ##14
+ self.points[15] = ogre.Vector3(l2, h2, -w) ##15
+
+ ## top door
+ self.points[16] = ogre.Vector3(-l2, h, -w2) ##16
+ self.points[17] = ogre.Vector3(-l2, h, w2) ##17
+ self.points[18] = ogre.Vector3(l2, h, w2) ##18
+ self.points[19] = ogre.Vector3(l2, h, -w2) ##19
+
+ ## bottom door
+ self.points[20] = ogre.Vector3(-l2, -h, -w2) ##20
+ self.points[21] = ogre.Vector3(-l2, -h, w2) ##21
+ self.points[22] = ogre.Vector3(l2, -h, w2) ##22
+ self.points[23] = ogre.Vector3(l2, -h, -w2) ##23
+
+ ## left door
+ self.points[24] = ogre.Vector3(-l, h2, w2) ##24
+ self.points[25] = ogre.Vector3(-l, -h2, w2) ##25
+ self.points[26] = ogre.Vector3(-l, -h2, -w2) ##26
+ self.points[27] = ogre.Vector3(-l, h2, -w2) ##27
+
+ ## right door
+ self.points[28] = ogre.Vector3(l, h2, w2) ##28
+ self.points[29] = ogre.Vector3(l, -h2, w2) ##29
+ self.points[30] = ogre.Vector3(l, -h2, -w2) ##30
+ self.points[31] = ogre.Vector3(l, h2, -w2) ##31
- ## create portals for the room
- createPortals(scene,
- room,
- roomNode,
- newZone,
- DOOR_FRONT|DOOR_BACK,
- False)
- ## create another interior room
- room = pczSM->createEntity( name +"_room2", "room_nxpxnypynzpz.mesh" )
+ def createWalls(self, room, doorFlags, isEnclosure):
+ if (isEnclosure):
+ if(doorFlags & DOOR_FRONT):
+ ## make front wall outward facing with door
+ room.quad(0, 8, 11, 3)
+ room.quad(1, 9, 8, 0)
+ room.quad(2, 10, 9, 1)
+ room.quad(3, 11, 10, 2)
+ else:
+ ## make front wall outward facing without door
+ room.quad(0, 1, 2, 3)
+
+ if(doorFlags & DOOR_BACK):
+ ## make back wall outward facing with door
+ room.quad(7, 15, 12, 4)
+ room.quad(6, 14, 15, 7)
+ room.quad(5, 13, 14, 6)
+ room.quad(4, 12, 13, 5)
+ else:
+ ## make back wall outward facing without door
+ room.quad(7, 6, 5, 4)
+
+ if(doorFlags & DOOR_TOP):
+ ## make top wall outward facing with door
+ room.quad(0, 17, 16, 4)
+ room.quad(4, 16, 19, 7)
+ room.quad(7, 19, 18, 3)
+ room.quad(3, 18, 17, 0)
+ else:
+ ## make top wall outward facing without door
+ room.quad(0, 3, 7, 4)
+
+ if(doorFlags & DOOR_BOT):
+ ## make bottom wall outward facing with door
+ room.quad(5, 20, 21, 1)
+ room.quad(6, 23, 20, 5)
+ room.quad(2, 22, 23, 6)
+ room.quad(1, 21, 22, 2)
+ else:
+ ## make bottom wall outward facing without door
+ room.quad(2, 1, 5, 6)
+
+ if(doorFlags & DOOR_LEFT):
+ ## make left wall outward facing with door
+ room.quad(0, 24, 25, 1)
+ room.quad(4, 27, 24, 0)
+ room.quad(5, 26, 27, 4)
+ room.quad(1, 25, 26, 5)
+ else:
+ ## make left side wall outward facing without door
+ room.quad(1, 0, 4, 5)
+
+ if(doorFlags & DOOR_RIGHT):
+ ## make right wall outward facing with door
+ room.quad(2, 29, 28, 3)
+ room.quad(6, 30, 29, 2)
+ room.quad(7, 31, 30, 6)
+ room.quad(3, 28, 31, 7)
+ else:
+ ## make right side wall outward facing without door
+ room.quad(3, 2, 6, 7)
+
+ else:
+
+ ## front back
+ if(doorFlags & DOOR_FRONT):
+ ## make front wall inward facing with door
+ room.quad(3, 11, 8, 0)
+ room.quad(0, 8, 9, 1)
+ room.quad(1, 9, 10, 2)
+ room.quad(2, 10, 11, 3)
+ else:
+ ## make front wall inward facing without door
+ room.quad(3, 2, 1, 0)
+
+ if(doorFlags & DOOR_BACK):
+ ## make back wall inward facing with door
+ room.quad(4, 12, 15, 7)
+ room.quad(7, 15, 14, 6)
+ room.quad(6, 14, 13, 5)
+ room.quad(5, 13, 12, 4)
+ else:
+ ## make back wall inward facing without door
+ room.quad(4, 5, 6, 7)
+
+ ## top bottom
+ if(doorFlags & DOOR_TOP):
+ ## make top wall inward facing with door
+ room.quad(4, 16, 17, 0)
+ room.quad(7, 19, 16, 4)
+ room.quad(3, 18, 19, 7)
+ room.quad(0, 17, 18, 3)
+ else:
+ ## make top wall inward facing without door
+ room.quad(4, 7, 3, 0)
+
+ if(doorFlags & DOOR_BOT):
+ ## make bottom wall inward facing with door
+ room.quad(1, 21, 20, 5)
+ room.quad(5, 20, 23, 6)
+ room.quad(6, 23, 22, 2)
+ room.quad(2, 22, 21, 1)
+ else:
+ ## make bottom wall inward facing without door
+ room.quad(6, 5, 1, 2)
+
+ ## end caps
+ if(doorFlags & DOOR_LEFT):
+ ## make left wall inward facing with door
+ room.quad(1, 25, 24, 0)
+ room.quad(0, 24, 27, 4)
+ room.quad(4, 27, 26, 5)
+ room.quad(5, 26, 25, 1)
+ else:
+ ## make left side wall inward facing without door
+ room.quad(5, 4, 0, 1)
+
+ if(doorFlags & DOOR_RIGHT):
+ ## make right wall inward facing with door
+ room.quad(3, 28, 29, 2)
+ room.quad(2, 29, 30, 6)
+ room.quad(6, 30, 31, 7)
+ room.quad(7, 31, 28, 3)
+ else:
+ ## make right side wall inward facing without door
+ room.quad(7, 6, 2, 3)
- ## add the room as a child node to the enclosure node
- roomNode = (PCZSceneNode*)exteriorNode->createChildSceneNode( name +"_room2_node", Vector3( 0.0, 0.0f, 0.0f ) )
- roomNode->attachObject(room)
-
- ## room needs it's own zone
- zoneName = name +"_room2_zone"
- newZone = pczSM->createZone(zoneType, zoneName)
- newZone->setEnclosureNode(roomNode)
- pczSM->addPCZSceneNode(roomNode, newZone)
-
- ## create portals for the room
- createPortals(scene,
- room,
- roomNode,
- newZone,
- DOOR_FRONT|DOOR_BACK|DOOR_LEFT|DOOR_RIGHT|DOOR_TOP|DOOR_BOT,
- False)
-
- ## create another interior room
- room = pczSM->createEntity( name +"_room3", "room_nzpz.mesh" )
-
- ## add the room as a child node to the enclosure node
- roomNode = (PCZSceneNode*)exteriorNode->createChildSceneNode( name +"_room3_node", Vector3( 0.0, 0.0f, -20.0f ) )
- roomNode->attachObject(room)
-
- ## room needs it's own zone
- zoneName = name +"_room3_zone"
- newZone = pczSM->createZone(zoneType, zoneName)
- newZone->setEnclosureNode(roomNode)
- pczSM->addPCZSceneNode(roomNode, newZone)
-
- ## create portals for the room
- createPortals(scene,
- room,
- roomNode,
- newZone,
- DOOR_FRONT|DOOR_BACK,
- False)
-
- ## create another interior room
- room = pczSM->createEntity( name +"_room4", "room_nxpx.mesh" )
-
- ## add the room as a child node to the enclosure node
- roomNode = (PCZSceneNode*)exteriorNode->createChildSceneNode( name +"_room4_node", Vector3( -20.0, 0.0f, 0.0f ) )
- roomNode->attachObject(room)
-
- ## room needs it's own zone
- zoneName = name +"_room4_zone"
- newZone = pczSM->createZone(zoneType, zoneName)
- newZone->setEnclosureNode(roomNode)
- pczSM->addPCZSceneNode(roomNode, newZone)
-
- ## create portals for the room
- createPortals(scene,
- room,
- roomNode,
- newZone,
- DOOR_LEFT|DOOR_RIGHT,
- False)
-
- ## create another interior room
- room = pczSM->createEntity( name +"_room5", "room_nxpx.mesh" )
-
- ## add the room as a child node to the enclosure node
- roomNode = (PCZSceneNode*)exteriorNode->createChildSceneNode( name +"_room5_node", Vector3( 20.0, 0.0f, 0.0f ) )
- roomNode->attachObject(room)
-
- ## room needs it's own zone
- zoneName = name +"_room5_zone"
- newZone = pczSM->createZone(zoneType, zoneName)
- newZone->setEnclosureNode(roomNode)
- pczSM->addPCZSceneNode(roomNode, newZone)
-
- ## create portals for the room
- createPortals(scene,
- room,
- roomNode,
- newZone,
- DOOR_LEFT|DOOR_RIGHT,
- False)
-
- ## create another interior room
- room = pczSM->createEntity( name +"_room6", "room_ny.mesh" )
-
- ## add the room as a child node to the enclosure node
- roomNode = (PCZSceneNode*)exteriorNode->createChildSceneNode( name +"_room6_node", Vector3( 0.0, 10.0f, 0.0f ) )
- roomNode->attachObject(room)
-
- ## room needs it's own zone
- zoneName = name +"_room6_zone"
- newZone = pczSM->createZone(zoneType, zoneName)
- newZone->setEnclosureNode(roomNode)
- pczSM->addPCZSceneNode(roomNode, newZone)
-
- ## create portals for the room
- createPortals(scene,
- room,
- roomNode,
- newZone,
- DOOR_BOT,
- False)
-
- ## create another interior room
- room = pczSM->createEntity( name +"_room7", "room_py.mesh" )
-
- ## add the room as a child node to the enclosure node
- roomNode = (PCZSceneNode*)exteriorNode->createChildSceneNode( name +"_room7_node", Vector3( 0.0, -50.0f, 0.0f ) )
- roomNode->attachObject(room)
-
- ## room needs it's own zone
- zoneName = name +"_room7_zone"
- newZone = pczSM->createZone(zoneType, zoneName)
- newZone->setEnclosureNode(roomNode)
- pczSM->addPCZSceneNode(roomNode, newZone)
-
- ## create portals for the room
- createPortals(scene,
- room,
- roomNode,
- newZone,
- DOOR_TOP,
- False)
-
- ## reset points to tall room size
- createPoints(Vector3(20.0, 40.0, 20.0), Vector3(4.0, 10.0, 4.0))
-
- ## create another interior room
- room = pczSM->createEntity( name +"_room8", "room_nypy_4y.mesh" )
-
- ## add the room as a child node to the enclosure node
- roomNode = (PCZSceneNode*)exteriorNode->createChildSceneNode( name +"_room8_node", Vector3( 0.0, -25.0f, 0.0f ) )
- roomNode->attachObject(room)
-
- ## room needs it's own zone
- zoneName = name +"_room8_zone"
- newZone = pczSM->createZone(zoneType, zoneName)
- newZone->setEnclosureNode(roomNode)
- pczSM->addPCZSceneNode(roomNode, newZone)
-
- ## create portals for the room
- createPortals(scene,
- room,
- roomNode,
- newZone,
- DOOR_BOT|DOOR_TOP,
- False)
-
-
- ## resolve portal zone pointers
- pczSM->connectPortalsToTargetZonesByLocation()
-
- return exteriorNode
-
-
-
-Ogre.ManualObject* RoomObject::createRoom(Ogre::SceneManager *scene,
- Ogre.String &name,
- short doorFlags,
- bool isEnclosure,
- Ogre.Vector3 dimensions,
- Ogre.Vector3 doorDimensions)
-
- addMaterial(name, Ogre.ColourValue(1,1,1,.75), Ogre::SBT_TRANSPARENT_ALPHA)
-
- Ogre.ManualObject* room = scene->createManualObject(name)
-
- room->begin(name, Ogre.RenderOperation::OT_TRIANGLE_LIST)
-
- ## create points
- createPoints(dimensions, doorDimensions)
-
- Ogre.Real fade=.5
- Ogre.Real solid=.8
- Ogre.ColourValue color = ColourValue(0, 0, solid, solid)
-
- ## copy to room
- for (int i=0 i<32;i++)
-
- room->position(points[i])
- room->colour(color)
-
-
- createWalls(room, doorFlags, isEnclosure)
-
- room->end()
-
- return room
-
-
-void RoomObject.addMaterial( Ogre::String &mat,
- Ogre.ColourValue &clr,
- Ogre.SceneBlendType sbt)
-
- static int init=False
- if(init):
- return
- else:
- init=True
-
- Ogre.MaterialPtr matptr = Ogre::MaterialManager::getSingleton().create(mat, "General")
- matptr->setReceiveShadows(False)
- matptr->getTechnique(0)->setLightingEnabled(True)
- matptr->getTechnique(0)->getPass(0)->setDiffuse(clr)
- matptr->getTechnique(0)->getPass(0)->setAmbient(clr)
- matptr->getTechnique(0)->getPass(0)->setSelfIllumination(clr)
- matptr->getTechnique(0)->getPass(0)->setSceneBlending(sbt)
- matptr->getTechnique(0)->getPass(0)->setLightingEnabled(False)
- matptr->getTechnique(0)->getPass(0)->setVertexColourTracking(Ogre.TVC_DIFFUSE)
-
-
-void RoomObject.createPoints(Ogre::Vector3 dimensions,
- Ogre.Vector3 doorDimensions)
-
- Ogre.Real l = dimensions.x/2
- Ogre.Real h = dimensions.y/2
- Ogre.Real w = dimensions.z/2
-
-## 4 7
-## *-------*
-## /| /|
-## / | / | y
-## / 5| 3/ 6| |
-## 0*---*---*---* *-- x
-## | / | / /
-## | / | / z
-## |/ |/
-## 1*-------*2
-
- points[0] = Ogre.Vector3(-l, h, w) ##0
- points[1] = Ogre.Vector3(-l, -h, w) ##1
- points[2] = Ogre.Vector3(l, -h, w) ##2
- points[3] = Ogre.Vector3(l, h, w) ##3
-
- points[4] = Ogre.Vector3(-l, h, -w) ##4
- points[5] = Ogre.Vector3(-l, -h, -w) ##5
- points[6] = Ogre.Vector3(l, -h, -w) ##6
- points[7] = Ogre.Vector3(l, h, -w) ##7
-
- ## doors
- Ogre.Real l2 = doorDimensions.x/2
- Ogre.Real h2 = doorDimensions.y/2
- Ogre.Real w2 = doorDimensions.z/2
-
- ## front door
- points[8] = Ogre.Vector3(-l2, h2, w) ##8
- points[9] = Ogre.Vector3(-l2, -h2, w) ##9
- points[10] = Ogre.Vector3(l2, -h2, w) ##10
- points[11] = Ogre.Vector3(l2, h2, w) ##11
-
- ## back door
- points[12] = Ogre.Vector3(-l2, h2, -w) ##12
- points[13] = Ogre.Vector3(-l2, -h2, -w) ##13
- points[14] = Ogre.Vector3(l2, -h2, -w) ##14
- points[15] = Ogre.Vector3(l2, h2, -w) ##15
-
- ## top door
- points[16] = Ogre.Vector3(-l2, h, -w2) ##16
- points[17] = Ogre.Vector3(-l2, h, w2) ##17
- points[18] = Ogre.Vector3(l2, h, w2) ##18
- points[19] = Ogre.Vector3(l2, h, -w2) ##19
-
- ## bottom door
- points[20] = Ogre.Vector3(-l2, -h, -w2) ##20
- points[21] = Ogre.Vector3(-l2, -h, w2) ##21
- points[22] = Ogre.Vector3(l2, -h, w2) ##22
- points[23] = Ogre.Vector3(l2, -h, -w2) ##23
-
- ## left door
- points[24] = Ogre.Vector3(-l, h2, w2) ##24
- points[25] = Ogre.Vector3(-l, -h2, w2) ##25
- points[26] = Ogre.Vector3(-l, -h2, -w2) ##26
- points[27] = Ogre.Vector3(-l, h2, -w2) ##27
-
- ## right door
- points[28] = Ogre.Vector3(l, h2, w2) ##28
- points[29] = Ogre.Vector3(l, -h2, w2) ##29
- points[30] = Ogre.Vector3(l, -h2, -w2) ##30
- points[31] = Ogre.Vector3(l, h2, -w2) ##31
-
-
-void RoomObject.createWalls(Ogre::ManualObject* room,
- short doorFlags,
- bool isEnclosure)
-
-
- if (isEnclosure):
-
- if(doorFlags & DOOR_FRONT):
-
- ## make front wall outward facing with door
- room->quad(0, 8, 11, 3)
- room->quad(1, 9, 8, 0)
- room->quad(2, 10, 9, 1)
- room->quad(3, 11, 10, 2)
-
- else:
-
- ## make front wall outward facing without door
- room->quad(0, 1, 2, 3)
-
- if(doorFlags & DOOR_BACK):
-
- ## make back wall outward facing with door
- room->quad(7, 15, 12, 4)
- room->quad(6, 14, 15, 7)
- room->quad(5, 13, 14, 6)
- room->quad(4, 12, 13, 5)
-
- else:
-
- ## make back wall outward facing without door
- room->quad(7, 6, 5, 4)
-
- if(doorFlags & DOOR_TOP):
-
- ## make top wall outward facing with door
- room->quad(0, 17, 16, 4)
- room->quad(4, 16, 19, 7)
- room->quad(7, 19, 18, 3)
- room->quad(3, 18, 17, 0)
-
- else:
-
- ## make top wall outward facing without door
- room->quad(0, 3, 7, 4)
-
- if(doorFlags & DOOR_BOT):
-
- ## make bottom wall outward facing with door
- room->quad(5, 20, 21, 1)
- room->quad(6, 23, 20, 5)
- room->quad(2, 22, 23, 6)
- room->quad(1, 21, 22, 2)
-
- else:
-
- ## make bottom wall outward facing without door
- room->quad(2, 1, 5, 6)
-
- if(doorFlags & DOOR_LEFT):
-
- ## make left wall outward facing with door
- room->quad(0, 24, 25, 1)
- room->quad(4, 27, 24, 0)
- room->quad(5, 26, 27, 4)
- room->quad(1, 25, 26, 5)
-
- else:
-
- ## make left side wall outward facing without door
- room->quad(1, 0, 4, 5)
-
- if(doorFlags & DOOR_RIGHT):
-
- ## make right wall outward facing with door
- room->quad(2, 29, 28, 3)
- room->quad(6, 30, 29, 2)
- room->quad(7, 31, 30, 6)
- room->quad(3, 28, 31, 7)
-
- else:
-
- ## make right side wall outward facing without door
- room->quad(3, 2, 6, 7)
-
-
- else:
-
- ## front back
- if(doorFlags & DOOR_FRONT):
-
- ## make front wall inward facing with door
- room->quad(3, 11, 8, 0)
- room->quad(0, 8, 9, 1)
- room->quad(1, 9, 10, 2)
- room->quad(2, 10, 11, 3)
-
- else:
-
- ## make front wall inward facing without door
- room->quad(3, 2, 1, 0)
-
- if(doorFlags & DOOR_BACK):
-
- ## make back wall inward facing with door
- room->quad(4, 12, 15, 7)
- room->quad(7, 15, 14, 6)
- room->quad(6, 14, 13, 5)
- room->quad(5, 13, 12, 4)
-
- else:
-
- ## make back wall inward facing without door
- room->quad(4, 5, 6, 7)
-
- ## top bottom
- if(doorFlags & DOOR_TOP):
-
- ## make top wall inward facing with door
- room->quad(4, 16, 17, 0)
- room->quad(7, 19, 16, 4)
- room->quad(3, 18, 19, 7)
- room->quad(0, 17, 18, 3)
-
- else:
-
- ## make top wall inward facing without door
- room->quad(4, 7, 3, 0)
-
- if(doorFlags & DOOR_BOT):
-
- ## make bottom wall inward facing with door
- room->quad(1, 21, 20, 5)
- room->quad(5, 20, 23, 6)
- room->quad(6, 23, 22, 2)
- room->quad(2, 22, 21, 1)
-
- else:
-
- ## make bottom wall inward facing without door
- room->quad(6, 5, 1, 2)
-
- ## end caps
- if(doorFlags & DOOR_LEFT):
-
- ## make left wall inward facing with door
- room->quad(1, 25, 24, 0)
- room->quad(0, 24, 27, 4)
- room->quad(4, 27, 26, 5)
- room->quad(5, 26, 25, 1)
-
- else:
-
- ## make left side wall inward facing without door
- room->quad(5, 4, 0, 1)
-
- if(doorFlags & DOOR_RIGHT):
-
- ## make right wall inward facing with door
- room->quad(3, 28, 29, 2)
- room->quad(2, 29, 30, 6)
- room->quad(6, 30, 31, 7)
- room->quad(7, 31, 28, 3)
-
- else:
-
- ## make right sid...
[truncated message content] |