[Scummvm-cvs-logs] SF.net SVN: scummvm: [26114] residual/trunk

aquadran at users.sourceforge.net aquadran at users.sourceforge.net
Mon Mar 12 22:50:45 CET 2007


Revision: 26114
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26114&view=rev
Author:   aquadran
Date:     2007-03-12 14:50:44 -0700 (Mon, 12 Mar 2007)

Log Message:
-----------
a little more code with shadow stuff

Modified Paths:
--------------
    residual/trunk/actor.cpp
    residual/trunk/actor.h
    residual/trunk/driver.h
    residual/trunk/driver_gl.cpp
    residual/trunk/driver_gl.h
    residual/trunk/driver_tinygl.cpp
    residual/trunk/driver_tinygl.h
    residual/trunk/walkplane.h

Modified: residual/trunk/actor.cpp
===================================================================
--- residual/trunk/actor.cpp	2007-03-12 20:43:56 UTC (rev 26113)
+++ residual/trunk/actor.cpp	2007-03-12 21:50:44 UTC (rev 26114)
@@ -55,6 +55,8 @@
 	_constrain = false;
 	_talkSoundName = "";
 	_activeShadowSlot = -1;
+	_shadowArray = new Shadow[5];
+	memset(_shadowArray, 0, sizeof(Shadow) * 5);
 
 	for (int i = 0; i < 10; i++) {
 		_talkCostume[i] = NULL;
@@ -587,13 +589,16 @@
 }
 
 void Actor::draw() {
+	setupDrawShadow();
 	for (std::list<Costume *>::iterator i = _costumeStack.begin(); i != _costumeStack.end(); i++)
 		(*i)->setupTextures();
 
 	if (!_costumeStack.empty()) {
+		setupDrawShadow();
 		g_driver->startActorDraw(_pos, _yaw, _pitch, _roll);
 		_costumeStack.back()->draw();
 		g_driver->finishActorDraw();
+		finishDrawShadow();
 	}
 }
 
@@ -645,3 +650,14 @@
 		}
 	}
 }
+
+void Actor::setupDrawShadow() {
+	if (_activeShadowSlot == -1)
+		return;
+
+	g_driver->setupShadower(_shadowArray);
+}
+
+void Actor::finishDrawShadow() {
+	g_driver->setupShadower(NULL);
+}

Modified: residual/trunk/actor.h
===================================================================
--- residual/trunk/actor.h	2007-03-12 20:43:56 UTC (rev 26113)
+++ residual/trunk/actor.h	2007-03-12 21:50:44 UTC (rev 26114)
@@ -36,10 +36,12 @@
 class TextObject;
 class Sector;
 
+typedef std::list<Sector *> SectorListType;
+
 struct Shadow {
 	std::string name;
 	Vector3d pos;
-	std::list<Sector *>planeList;
+	SectorListType planeList;
 	bool active;
 };
 
@@ -126,6 +128,8 @@
 	void setShadowPlane(const char *name);
 	void addShadowPlane(const char *name);
 	void clearShadowPlanes();
+	void setupDrawShadow();
+	void finishDrawShadow();
 
 	void setConstrain(bool constrain) {
 		_constrain = constrain;
@@ -194,7 +198,7 @@
 	Costume *_mumbleCostume;
 	int _mumbleChore;
 
-	Shadow _shadowArray[5];
+	Shadow *_shadowArray;
 	int _activeShadowSlot;
 
 	static Font *_sayLineFont;

Modified: residual/trunk/driver.h
===================================================================
--- residual/trunk/driver.h	2007-03-12 20:43:56 UTC (rev 26113)
+++ residual/trunk/driver.h	2007-03-12 21:50:44 UTC (rev 26114)
@@ -31,6 +31,7 @@
 #include "colormap.h"
 #include "font.h"
 #include "primitives.h"
+#include "actor.h"
 
 class Material;
 class Bitmap;
@@ -67,7 +68,8 @@
 
 	virtual void startActorDraw(Vector3d pos, float yaw, float pitch, float roll) = 0;
 	virtual void finishActorDraw() = 0;
-	
+	virtual void setupShadower(Shadow *shadow) = 0;
+
 	virtual void set3DMode() = 0;
 
 	virtual void translateViewpoint(Vector3d pos, float pitch, float yaw, float roll) = 0;
@@ -322,6 +324,7 @@
 protected:
 	int _screenWidth, _screenHeight, _screenBPP;
 	bool _isFullscreen;
+	Shadow *_currentShadowArray;
 };
 
 extern Driver *g_driver;

Modified: residual/trunk/driver_gl.cpp
===================================================================
--- residual/trunk/driver_gl.cpp	2007-03-12 20:43:56 UTC (rev 26113)
+++ residual/trunk/driver_gl.cpp	2007-03-12 21:50:44 UTC (rev 26114)
@@ -125,6 +125,9 @@
 	glDisable(GL_TEXTURE_2D);
 }
 
+void DriverGL::setupShadower(Shadow *shadow) {
+}
+
 void DriverGL::set3DMode() {
 	glMatrixMode(GL_MODELVIEW);
 	glEnable(GL_DEPTH_TEST);

Modified: residual/trunk/driver_gl.h
===================================================================
--- residual/trunk/driver_gl.h	2007-03-12 20:43:56 UTC (rev 26113)
+++ residual/trunk/driver_gl.h	2007-03-12 21:50:44 UTC (rev 26114)
@@ -52,6 +52,7 @@
 
 	void startActorDraw(Vector3d pos, float yaw, float pitch, float roll);
 	void finishActorDraw();
+	void setupShadower(Shadow *shadow);
 	
 	void set3DMode();
 

Modified: residual/trunk/driver_tinygl.cpp
===================================================================
--- residual/trunk/driver_tinygl.cpp	2007-03-12 20:43:56 UTC (rev 26113)
+++ residual/trunk/driver_tinygl.cpp	2007-03-12 21:50:44 UTC (rev 26114)
@@ -184,6 +184,25 @@
 	tglMatrixMode(TGL_MODELVIEW);
 	tglPopMatrix();
 	tglDisable(TGL_TEXTURE_2D);
+
+/*	// enable to draw shadow planes (Special Sectors)
+	int k, r;
+	if (!_currentShadowArray)
+		return;
+
+	tglColor3f(0.8,0.8,0.8);
+	for (r = 0; r < 5; r++) {
+		_currentShadowArray[r].planeList.begin();
+		for (SectorListType::iterator i = _currentShadowArray[r].planeList.begin(); i != _currentShadowArray[r].planeList.end(); i++) {
+			Sector *shadowSector = *i;
+			tglBegin(TGL_POLYGON);
+			tglNormal3f(shadowSector->getNormal().x(), shadowSector->getNormal().y(), shadowSector->getNormal().z());
+			for (k = 0; k < shadowSector->getNumVertices(); k++) {
+				tglVertex3f(shadowSector->getVertices()[k].x(), shadowSector->getVertices()[k].y(), shadowSector->getVertices()[k].z());
+			}
+			tglEnd();
+		}
+	}*/
 }
 
 void DriverTinyGL::set3DMode() {
@@ -191,6 +210,10 @@
 	tglEnable(TGL_DEPTH_TEST);
 }
 
+void DriverTinyGL::setupShadower(Shadow *shadow) {
+	_currentShadowArray = shadow;
+}
+
 void DriverTinyGL::drawModelFace(const Model::Face *face, float *vertices, float *vertNormals, float *textureVerts) {
 	tglNormal3fv((float *)face->_normal._coords);
 	tglBegin(TGL_POLYGON);

Modified: residual/trunk/driver_tinygl.h
===================================================================
--- residual/trunk/driver_tinygl.h	2007-03-12 20:43:56 UTC (rev 26113)
+++ residual/trunk/driver_tinygl.h	2007-03-12 21:50:44 UTC (rev 26114)
@@ -53,6 +53,7 @@
 
 	void startActorDraw(Vector3d pos, float yaw, float pitch, float roll);
 	void finishActorDraw();
+	void setupShadower(Shadow *shadow);
 	
 	void set3DMode();
 

Modified: residual/trunk/walkplane.h
===================================================================
--- residual/trunk/walkplane.h	2007-03-12 20:43:56 UTC (rev 26113)
+++ residual/trunk/walkplane.h	2007-03-12 21:50:44 UTC (rev 26114)
@@ -33,7 +33,7 @@
 class Sector { 
 public:
 	Sector() : _vertices(0) {}
-	~Sector() { if(_vertices) delete[] _vertices; }
+	~Sector() { if (_vertices) delete[] _vertices; }
 
 	void load(TextSplitter &ts);
 
@@ -56,9 +56,12 @@
 		float angleWithEdge;
 		Vector3d edgeDir;
 	};
-	void getExitInfo(Vector3d start, Vector3d dir,
-			 struct ExitInfo *result);
+	void getExitInfo(Vector3d start, Vector3d dir, struct ExitInfo *result);
 
+	int getNumVertices() { return _numVertices; }
+	Vector3d *getVertices() { return _vertices; }
+	Vector3d getNormal() { return _normal; }
+
 private:
 	int _numVertices, _id;
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list