[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