Przeglądaj źródła

Fixed VPLANE primitive, minor tweaks (forgot exactly what)

Ivan Safrin 14 lat temu
rodzic
commit
e998cf2e27

+ 14 - 0
Core/Contents/Include/PolyEntity.h

@@ -565,6 +565,17 @@ namespace Polycode {
 			//@}
 			//@}
 			// ----------------------------------------------------------------------------------------------------------------
 			// ----------------------------------------------------------------------------------------------------------------
 			
 			
+			/**
+			* Sets user data pointer.
+			* @param userData User data pointer
+			*/
+			void setUserData(void *userData);			
+
+			/**
+			* Returns the user data pointer.
+			* @return User data pointer
+			*/			
+			void *getUserData();
 				
 				
 			void setBlendingMode(int newBlendingMode);
 			void setBlendingMode(int newBlendingMode);
 				
 				
@@ -585,6 +596,9 @@ namespace Polycode {
 			bool isMask;
 			bool isMask;
 		
 		
 		protected:
 		protected:
+		
+			void *userData;
+		
 			std::vector<Entity*> children;
 			std::vector<Entity*> children;
 
 
 			Vector3 childCenter;
 			Vector3 childCenter;

+ 5 - 0
Core/Contents/Include/PolyGlobals.h

@@ -70,6 +70,11 @@ THE SOFTWARE.
 
 
 typedef double Number;
 typedef double Number;
 
 
+inline Number clampf(Number x, Number a, Number b)
+{
+    return x < a ? a : (x > b ? b : x);
+}
+
 #define MIN(a, b)  (((a) < (b)) ? (a) : (b))
 #define MIN(a, b)  (((a) < (b)) ? (a) : (b))
 #define MAX(a, b)  (((a) > (b)) ? (a) : (b))
 #define MAX(a, b)  (((a) > (b)) ? (a) : (b))
 
 

+ 3 - 0
Core/Contents/Include/PolySceneLine.h

@@ -43,6 +43,9 @@ namespace Polycode {
 			SceneLine(Vector3 start, Vector3 end);
 			SceneLine(Vector3 start, Vector3 end);
 			~SceneLine();
 			~SceneLine();
 			
 			
+			void setStart(Vector3 start);
+			void setEnd(Vector3 end);
+						
 			void Render();
 			void Render();
 			
 			
 		protected:		
 		protected:		

+ 13 - 0
Core/Contents/Include/PolyVector3.h

@@ -124,6 +124,19 @@ namespace Polycode {
 			//@}
 			//@}
 			// ----------------------------------------------------------------------------------------------------------------
 			// ----------------------------------------------------------------------------------------------------------------
 	
 	
+			/**
+			* Returns the angle between this and the specified vectors.
+			* @return Angle between the vectors
+			*/
+			inline Number angleBetween(const Vector3& dest) {
+				Number lenProduct = length() * dest.length();
+				if(lenProduct < 1e-6f)
+					lenProduct = 1e-6f;
+				
+				Number f = dot(dest) / lenProduct;
+				f = clampf(f, -1.0, 1.0);
+				return acosf(f);
+			}
 
 
 			/**
 			/**
 			* Returns the vector length.
 			* Returns the vector length.

+ 9 - 0
Core/Contents/Source/PolyEntity.cpp

@@ -25,6 +25,7 @@
 using namespace Polycode;
 using namespace Polycode;
 
 
 Entity::Entity() {
 Entity::Entity() {
+	userData = NULL;
 	scale.set(1,1,1);
 	scale.set(1,1,1);
 	pitch = 0;
 	pitch = 0;
 	yaw = 0;
 	yaw = 0;
@@ -55,6 +56,14 @@ Entity::Entity() {
 	hasMask = false;
 	hasMask = false;
 }
 }
 
 
+void Entity::setUserData(void *userData) {
+	this->userData = userData;
+}
+
+void *Entity::getUserData() {
+	return userData;
+}
+
 Entity *Entity::getParentEntity() const {
 Entity *Entity::getParentEntity() const {
 	return parentEntity;
 	return parentEntity;
 }
 }

+ 5 - 5
Core/Contents/Source/PolyMesh.cpp

@@ -255,17 +255,17 @@ namespace Polycode {
 	
 	
 	void Mesh::createVPlane(Number w, Number h) { 
 	void Mesh::createVPlane(Number w, Number h) { 
 		Polygon *imagePolygon = new Polygon();
 		Polygon *imagePolygon = new Polygon();
-		imagePolygon->addVertex(0,h,0,0,0);	
-		imagePolygon->addVertex(w,h,0, 1, 0);			
-		imagePolygon->addVertex(w,0,0, 1, 1);		
-		imagePolygon->addVertex(0,0,0,0,1);
+		imagePolygon->addVertex(0,h,0,0,1);	
+		imagePolygon->addVertex(w,h,0, 1, 1);			
+		imagePolygon->addVertex(w,0,0, 1, 0);		
+		imagePolygon->addVertex(0,0,0,0,0);
 
 
 		addPolygon(imagePolygon);
 		addPolygon(imagePolygon);
 		
 		
 		for(int i=0; i < polygons.size(); i++) {
 		for(int i=0; i < polygons.size(); i++) {
 			for(int j=0; j < polygons[i]->getVertexCount(); j++) {
 			for(int j=0; j < polygons[i]->getVertexCount(); j++) {
 				polygons[i]->getVertex(j)->x = polygons[i]->getVertex(j)->x - (w/2.0f);
 				polygons[i]->getVertex(j)->x = polygons[i]->getVertex(j)->x - (w/2.0f);
-				polygons[i]->getVertex(j)->z = polygons[i]->getVertex(j)->y - (h/2.0f);
+				polygons[i]->getVertex(j)->y = polygons[i]->getVertex(j)->y - (h/2.0f);
 			}
 			}
 		}
 		}
 
 

+ 1 - 0
Core/Contents/Source/PolyParticleEmitter.cpp

@@ -278,6 +278,7 @@ void ParticleEmitter::resetParticle(Particle *particle) {
 	Matrix4 concatMatrix = getBaseMatrix();
 	Matrix4 concatMatrix = getBaseMatrix();
 	Vector3	startVector;
 	Vector3	startVector;
 	
 	
+	particle->dirVector = dirVector;
 //	if(emitterMesh) {
 //	if(emitterMesh) {
 //		Polygon *randPoly = emitterMesh->getMesh()->getPolygon(rand() % emitterMesh->getMesh()->getPolygonCount());		
 //		Polygon *randPoly = emitterMesh->getMesh()->getPolygon(rand() % emitterMesh->getMesh()->getPolygonCount());		
 //		startVector = *randPoly->getVertex(rand() % 3);
 //		startVector = *randPoly->getVertex(rand() % 3);

+ 7 - 0
Core/Contents/Source/PolySceneLine.cpp

@@ -62,6 +62,13 @@ SceneLine::~SceneLine() {
 
 
 }
 }
 
 
+void SceneLine::setStart(Vector3 start) {
+	this->start = start;
+}
+
+void SceneLine::setEnd(Vector3 end) {
+	this->end = end;
+}
 
 
 void SceneLine::Render() {	
 void SceneLine::Render() {