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

List:       kde-commits
Subject:    playground/games/kolf-ng
From:       Huan Zeng <zh.issac () gmail ! com>
Date:       2009-06-24 14:38:13
Message-ID: 1245854293.587622.17729.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 986320 by hzeng:

prepare for terrain's rendering in 2d view.


 M  +11 -0     3d/renderstatemanager.cpp  
 M  +2 -0      3d/renderstatemanager.h  
 M  +1 -1      courses/test1-terrain.kolf  
 M  +2 -0      elements/object-environment.cpp  
 M  +5 -0      elements/scene.cpp  
 M  +4 -0      elements/scene.h  
 M  +11 -0     engine/game-editor.cpp  
 M  +1 -0      engine/game-editor.h  
 M  +2 -0      engine/kolf-editorui.rc  
 M  +15 -5     interface/view3d.cpp  
 M  +2 -0      interface/view3d.h  


--- trunk/playground/games/kolf-ng/3d/renderstatemanager.cpp #986319:986320
@@ -32,6 +32,7 @@
 	disableBlendingState();
 	disableLightState();
 	disableWireframeState();
+	enableTextureState();
 	setGlobalBackgroundColor(Qt::white);
 	setGlobalDrawingColor(Qt::green);
 }
@@ -80,6 +81,11 @@
 	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
 }
 
+void Kolf::RenderStateManager::enableTextureState()
+{
+	glEnable(GL_TEXTURE_2D);
+}
+
 void Kolf::RenderStateManager::disableBlendingState()
 {
 	glDisable(GL_BLEND);
@@ -100,6 +106,11 @@
 	glPolygonMode(GL_FRONT, GL_POLYGON);
 }
 
+void Kolf::RenderStateManager::disableTextureState()
+{
+	glDisable(GL_TEXTURE_2D);
+}
+
 void Kolf::RenderStateManager::setTopViewport()
 {
 	gluLookAt(500, 500, 2000, 500, 500, 0, 0, 1, 0);
--- trunk/playground/games/kolf-ng/3d/renderstatemanager.h #986319:986320
@@ -37,11 +37,13 @@
 			void enableDepthState();
 			void enableLightState();
 			void enableWireframeState();
+			void enableTextureState();
 
 			void disableBlendingState();
 			void disableDepthState();
 			void disableLightState();
 			void disableWireframeState();
+			void disableTextureState();
 
 			void setTopViewport();
 			void setFrontPerspectiveViewport();
--- trunk/playground/games/kolf-ng/courses/test1-terrain.kolf #986319:986320
@@ -15,7 +15,7 @@
 Type=Kolf::EnvironmentObject
 CourseBoundary=false
 PathToHeightmap=test1-heightmap.bmp
-PathToTexture=grass_256.jpg
+PathToTexture=test1-texture.bmp
 Position=0,0,0
 
 
--- trunk/playground/games/kolf-ng/elements/object-environment.cpp #986319:986320
@@ -165,6 +165,8 @@
 
 void Kolf::EnvironmentObject::paint(QPainter* painter, const \
QStyleOptionGraphicsItem* option, QWidget* widget)  {
+	Q_UNUSED(option);
+	Q_UNUSED(widget);
 	m_item = m_geometry->picture();
 	if(!m_item)
 		return;
--- trunk/playground/games/kolf-ng/elements/scene.cpp #986319:986320
@@ -111,6 +111,11 @@
 	emit newHole();
 }
 
+void Kolf::Scene::askForSnapshot()
+{
+	emit snapshot();
+}
+
 void Kolf::Scene::timerEvent(QTimerEvent* event)
 {
 	//filter events that we do not want
--- trunk/playground/games/kolf-ng/elements/scene.h #986319:986320
@@ -47,6 +47,8 @@
 			void removeObject(Kolf::Object* object);
 			void clear();
 			void holeChanged();
+			void askForSnapshot();
+
 		Q_SIGNALS:
 			void objectAdded(Kolf::Object* object);
 			void objectChanged(Kolf::Object* object);
@@ -56,6 +58,8 @@
 			void nextFrameSimulated();
 			void turnEnded();
 			void newHole();
+			void snapshot();
+
 		protected:
 			virtual void timerEvent(QTimerEvent* event);
 		private Q_SLOTS:
--- trunk/playground/games/kolf-ng/engine/game-editor.cpp #986319:986320
@@ -67,6 +67,12 @@
 	//undo and redo
 	m_undoAction = KStandardAction::undo(0, "", actionCollection());
 	m_redoAction = KStandardAction::redo(0, "", actionCollection());
+	//take a snapshot for this scene, used as the backdrop of the 2d view
+	const KIcon snapshotIcon("take snapshot");
+	KAction* snapshotAct = new KAction(snapshotIcon, i18n("Take Snapshot"), \
actionCollection()); +	snapshotAct->setToolTip(i18n("Take a snapshot as the backdrop \
for 2d view")); +	actionCollection()->addAction("kolf_take_snapshot", snapshotAct);
+	connect(snapshotAct, SIGNAL(triggered()), this, SLOT(actionSnapshot()));
 }
 
 bool Kolf::EditorGame::startGame()
@@ -122,6 +128,7 @@
 		//show par player ball for editing
 		parPlayer()->ball()->show();
 		//FIXME: pushState does not work for the ball - We somehow have to communicate the \
ball position change back to the environment object. \
+		Kolf::Scene::instance()->holeChanged();  }
 	//activate overlays
 	for (int i = 0; i < view()->objectCount(); ++i)
@@ -172,4 +179,8 @@
 	m_saveAction->setEnabled(!clean);
 }
 
+void Kolf::EditorGame::actionSnapshot()
+{
+	Kolf::Scene::instance()->askForSnapshot();
+}
 #include "game-editor.moc"
--- trunk/playground/games/kolf-ng/engine/game-editor.h #986319:986320
@@ -50,6 +50,7 @@
 			void actionGoToNextHole();
 			void actionSave();
 			void cleanChanged(bool clean);
+			void actionSnapshot();
 		private:
 			void setupActions();
 
--- trunk/playground/games/kolf-ng/engine/kolf-editorui.rc #986319:986320
@@ -10,5 +10,7 @@
 		<Separator/>
 		<Action name="edit_undo" />
 		<Action name="edit_redo" />
+		<Separator/>
+		<Action name="kolf_take_snapshot" />
 	</ToolBar>
 </gui>
--- trunk/playground/games/kolf-ng/interface/view3d.cpp #986319:986320
@@ -30,6 +30,7 @@
 #include <QString>
 #include <QTimer>
 #include <QVector>
+#include <QFileDialog>
 
 Kolf::View3D::View3D(Kolf::View* parent)
 	: QGLWidget(parent)
@@ -41,6 +42,7 @@
 	setMinimumSize(100, 100);
 	connect(m_timer, SIGNAL(timeout()), this, SLOT(updateGL()));
 	connect(Kolf::Scene::instance(), SIGNAL(newHole()), this, SLOT(newStuffArrival()));
+	connect(Kolf::Scene::instance(), SIGNAL(snapshot()), this, SLOT(snapshot()));
 }
 
 Kolf::View3D::~View3D()
@@ -64,8 +66,7 @@
 	qDebug("View3D:initializeGL");
 	m_rsm->setDefaultRenderState();
 	m_rsm->setGlobalBackgroundColor(Qt::black);
-	//m_rsm->enableWireframeState();
-	glEnable(GL_TEXTURE_2D);
+	m_rsm->enableWireframeState();
 }
 
 void Kolf::View3D::paintGL()
@@ -75,8 +76,8 @@
 
 	drawStaticObjects();
 	drawAnimatedObjects();
+	drawLandscape();
 	drawBall();
-	drawLandscape();
 	glFlush();
 }
 
@@ -88,8 +89,8 @@
 	double aspect = (double)w/h;
 	gluPerspective(30, aspect, 1, 3000);
 	//Sets the viewport to a top view, front perspective also avaliable ATM.
-	m_rsm->setTopViewport();
-	//m_rsm->setFrontPerspectiveViewport();
+	//m_rsm->setTopViewport();
+	m_rsm->setFrontPerspectiveViewport();
 	//m_rsm->setBackPerspectiveViewport();
 	//m_rsm->setLeftPerspectiveViewport();
 	//m_rsm->setRightPerspectiveViewport();
@@ -230,4 +231,13 @@
 		hasNewStuff = true;
 	}
 }
+
+void Kolf::View3D::snapshot()
+{
+	QImage img = grabFrameBuffer( );
+	QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), \
"./untitled.png", +                            tr("Images (*.png *.xpm *.jpg)"));
+	//to be continue	
+
+}
 #include "view3d.moc"
--- trunk/playground/games/kolf-ng/interface/view3d.h #986319:986320
@@ -50,9 +50,11 @@
 			void drawStaticObjects();
 			void initializeObjects();
 			void loadTerrainTexture();
+
 		private Q_SLOTS:
 			void getNewStuff();
 			void newStuffArrival();
+			void snapshot();
 		private:
 			Kolf::View* m_parent;
 			Kolf::RenderStateManager* m_rsm;


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

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