[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/games/kolf-ng
From:       Stefan Majewsky <majewsky () gmx ! net>
Date:       2009-07-31 21:47:19
Message-ID: 1249076839.013821.32450.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1005371 by majewsky:

Use the Kolf::ObjectList interface to simplify some code in the View3D.


 M  +11 -1     elements/objectlist.h  
 M  +18 -30    interface/view3d.cpp  


--- trunk/playground/games/kolf-ng/elements/objectlist.h #1005370:1005371
@@ -35,7 +35,8 @@
 	class ObjectList : public QList<Kolf::Object*>
 	{
 		public:
-			template <typename T> QList<T*> filter() const
+			///Returns a list of all Kolf::Object instances in this list that are of that \
given type. +			template <typename T> QList<T*> allOfType() const
 			{
 				QList<T*> resultList;
 				foreach (Kolf::Object* object, *this)
@@ -46,6 +47,15 @@
 				}
 				return resultList;
 			}
+			///Returns a list that contains all Kolf::Object instances except for those that \
are instances of the given type. +			template <typename T> Kolf::ObjectList \
allExceptType() const +			{
+				Kolf::ObjectList resultList;
+				foreach (Kolf::Object* object, *this)
+					if (object && !qobject_cast<T*>(object))
+						resultList << object;
+				return resultList;
+			}
 	};
 }
 
--- trunk/playground/games/kolf-ng/interface/view3d.cpp #1005370:1005371
@@ -152,14 +152,12 @@
 void Kolf::View3D::drawBall()
 {
 	//method to draw the ball, do not know if this is possible at the moment. I need to \
                'find' the Ball object, get its X,Y,Z and the render a gluSphere at \
                this position.
-	foreach (Kolf::Object* object, m_scene->objects())
+	foreach (Kolf::Ball* ball, m_scene->objects().allOfType<Kolf::Ball>())
 	{
-		Kolf::Ball* ball = qobject_cast<Kolf::Ball*>(object);
-		if (!ball)
-			continue;
 		GLUquadric *quad = gluNewQuadric(); //FIXME: possible memory leak
 		glPushMatrix();
-		GLfloat materialColor[] = {object->color().red() / 255.0, object->color().green() \
/ 255.0, object->color().blue() / 255.0, object->color().alpha()};  +		QColor \
ballColor = ball->color(); +		GLfloat materialColor[] = {ballColor.redF(), \
ballColor.greenF(), ballColor.blueF(), ballColor.alphaF()};  \
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, materialColor);  \
glTranslatef(ball->position().x(), ball->position().y(), ball->position().z());  \
gluSphere(quad, 10, 10, 10); @@ -170,11 +168,8 @@
 void Kolf::View3D::drawLandscape()
 {
 	//method to draw the landscape object
-	foreach (Kolf::Object* object, m_scene->objects())
+	foreach (Kolf::EnvironmentObject* object, \
m_scene->objects().allOfType<Kolf::EnvironmentObject>())  {
-		Kolf::EnvironmentObject* eObject = qobject_cast<Kolf::EnvironmentObject*>(object);
-		if (!eObject)
-			continue;
 		glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
 		GLfloat materialColor[] = {1.0, 1.0, 1.0, 1.0};	
 		//GLfloat matSpecular[] = {1.0, 1.0, 1.0, 1.0};
@@ -190,9 +185,9 @@
 		glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 		glVertexPointer(3, GL_FLOAT, 0, object->getVertexGeometry());
 		glNormalPointer(GL_FLOAT, 0 , object->getNormalGeometry());
-		glTexCoordPointer(2, GL_FLOAT, 0, eObject->getTextureIndices());
-		glDrawElements( GL_TRIANGLES, eObject->numIndices(), 
-                                GL_UNSIGNED_INT, eObject->getVertexIndices());
+		glTexCoordPointer(2, GL_FLOAT, 0, object->getTextureIndices());
+		glDrawElements( GL_TRIANGLES, object->numIndices(),
+                                GL_UNSIGNED_INT, object->getVertexIndices());
 		glDisableClientState(GL_VERTEX_ARRAY);
 		glDisableClientState(GL_NORMAL_ARRAY);
 		glDisableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -210,9 +205,9 @@
 
 void Kolf::View3D::drawStaticObjects()
 {
-	foreach (Kolf::Object* object, m_scene->objects())
+	foreach (Kolf::Object* object, \
m_scene->objects().allExceptType<Kolf::EnvironmentObject>())  {
-		if (!object->getNormalGeometry() || !object->getVertexGeometry() || \
object->metaObject()->className() == QLatin1String("Kolf::EnvironmentObject")) +		if \
(!object->getNormalGeometry() || !object->getVertexGeometry())  continue;
 		//do not translate to the objects position, that position is already in the \
VertexGeometry.  //glTranslatef(object->position().x(), object->position().y(), \
object->position().z()); @@ -241,8 +236,8 @@
 	{
 		if(object->objectName() == QString("LightObject"))
 		{
-			GLfloat lightPosition[] = {object->position().x(), object->position().y(), \
                object->position().z(), 0.0};	
-			GLfloat whiteLight[] = {1.0, 1.0, 1.0, 1.0};	
+			GLfloat lightPosition[] = {object->position().x(), object->position().y(), \
object->position().z(), 0.0}; +			GLfloat whiteLight[] = {1.0, 1.0, 1.0, 1.0};
 			glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
 			glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteLight);
 		}
@@ -252,16 +247,12 @@
 
 void Kolf::View3D::loadTerrainTexture()
 {
-	foreach (Kolf::Object* object, m_scene->objects())
+	foreach (Kolf::EnvironmentObject* object, \
m_scene->objects().allOfType<Kolf::EnvironmentObject>())  {
-		Kolf::EnvironmentObject* eObject = qobject_cast<Kolf::EnvironmentObject*>(object);
-		if (!eObject)
-			continue;
+		unsigned char* data = object->getTexture();
+		int height = object->textureHeight();
+		int width = object->textureWidth();
 
-		unsigned char* data = eObject->getTexture();
-		int height = eObject->textureHeight();
-		int width = eObject->textureWidth();
-
 		glGenTextures( 1, &m_terrainTexture ); 
 		glBindTexture( GL_TEXTURE_2D, m_terrainTexture);
 		glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
@@ -274,13 +265,10 @@
 
 	/*
 	//test code
-	foreach (Kolf::Object* object, m_scene->objects())
+	foreach (Kolf::EnvironmentObject* object, \
m_scene->objects().allOfType<Kolf::EnvironmentObject>())  {
-		Kolf::EnvironmentObject* eObject = qobject_cast<Kolf::EnvironmentObject*>(object);
-		if (!eObject)
-			continue;
-	m_terrainTexture = \
bindTexture(QImage(QString("/usr/local/share/apps/kolf-ng/courses/test1-texture.bmp")).mirrored(),GL_TEXTURE_2D);
                
-	glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		m_terrainTexture = \
bindTexture(QImage(QString("/usr/local/share/apps/kolf-ng/courses/test1-texture.bmp")).mirrored(),GL_TEXTURE_2D);
 +		glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
 	}
 	*/
 }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic