Selaa lähdekoodia

Nothing worth mentioning

Panagiotis Christopoulos Charitos 15 vuotta sitten
vanhempi
sitoutus
08ea50bbab
4 muutettua tiedostoa jossa 389 lisäystä ja 563 poistoa
  1. 313 514
      build/debug/Makefile
  2. 57 48
      src/Resources/LightData.cpp
  3. 2 1
      src/Resources/LightData.h
  4. 17 0
      src/Util/Exception.cpp

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 313 - 514
build/debug/Makefile


+ 57 - 48
src/Resources/LightData.cpp

@@ -28,50 +28,45 @@ bool LightData::load(const char* filename)
 	{
 		Scanner scanner(filename);
 		const Scanner::Token* token;
-
-		// First of all get the type
-		token = &scanner.getNextToken();
-		if(token->getCode() != Scanner::TC_IDENTIFIER || strcmp(token->getValue().getString(), "type"))
-		{
-			PARSE_ERR_EXPECTED("type");
-			return false;
-		}
-
-		token = &scanner.getNextToken();
-		if(token->getCode() != Scanner::TC_IDENTIFIER)
-		{
-			if(!strcmp(token->getValue().getString(), "LT_SPOT"))
-			{
-				type = LT_SPOT;
-			}
-			else if(!strcmp(token->getValue().getString(), "LT_POINT"))
-			{
-				type = LT_POINT;
-			}
-			else
-			{
-				PARSE_ERR_EXPECTED("LT_SPOT or LT_POINT");
-				return false;
-			}
-		}
-
+		type = LT_NUM;
 
 		while(true)
 		{
 			token = &scanner.getNextToken();
 
+			// type
+			if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "type"))
+			{
+				token = &scanner.getNextToken();
+				if(token->getCode() != Scanner::TC_IDENTIFIER)
+				{
+					if(!strcmp(token->getValue().getString(), "LT_SPOT"))
+					{
+						type = LT_SPOT;
+					}
+					else if(!strcmp(token->getValue().getString(), "LT_POINT"))
+					{
+						type = LT_POINT;
+					}
+					else
+					{
+						PARSE_ERR_EXPECTED("LT_SPOT or LT_POINT");
+						return false;
+					}
+				}
+			}
 			// diffuseCol
-			if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "diffuseCol"))
+			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "diffuseCol"))
 			{
 				Parser::parseMathVector(scanner, diffuseCol);
 			}
-			// SPECULAR_COL
-			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "SPECULAR_COLOR"))
+			// specularCol
+			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "specularCol"))
 			{
 				Parser::parseMathVector(scanner, specularCol);
 			}
-			// RADIUS
-			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "RADIUS"))
+			// radius
+			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "radius"))
 			{
 				token = &scanner.getNextToken();
 				if(token->getCode() != Scanner::TC_NUMBER)
@@ -83,20 +78,34 @@ bool LightData::load(const char* filename)
 				radius = (token->getDataType() == Scanner::DT_FLOAT) ? token->getValue().getFloat() :
 																															 float(token->getValue().getInt());
 			}
-			// CASTS_SHADOW
-			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "CASTS_SHADOW"))
+			// castsShadow
+			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "castsShadow"))
 			{
 				token = &scanner.getNextToken();
-				if(token->getCode() != Scanner::TC_NUMBER || token->getDataType() != Scanner::DT_INT)
+				if(token->getCode() == Scanner::TC_IDENTIFIER)
 				{
-					PARSE_ERR_EXPECTED("number");
+					if(!strcmp(token->getValue().getString(), "true"))
+					{
+						castsShadow_ = true;
+					}
+					else if(!strcmp(token->getValue().getString(), "false"))
+					{
+						castsShadow_ = false;
+					}
+					else
+					{
+						PARSE_ERR_EXPECTED("true or false");
+						return false;
+					}
+				}
+				else
+				{
+					PARSE_ERR_EXPECTED("true or false");
 					return false;
 				}
-
-				castsShadow_ = token->getValue().getInt();
 			}
-			// DISTANCE
-			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "DISTANCE"))
+			// distance
+			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "distance"))
 			{
 				token = &scanner.getNextToken();
 				if(token->getCode() != Scanner::TC_NUMBER)
@@ -109,8 +118,8 @@ bool LightData::load(const char* filename)
 																																 float(token->getValue().getInt());
 				type = LT_SPOT;
 			}
-			// FOV_X
-			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "FOV_X"))
+			// fovX
+			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "fovX"))
 			{
 				token = &scanner.getNextToken();
 				if(token->getCode() != Scanner::TC_NUMBER)
@@ -123,8 +132,8 @@ bool LightData::load(const char* filename)
 																														 float(token->getValue().getInt());
 				type = LT_SPOT;
 			}
-			// FOV_Y
-			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "FOV_Y"))
+			// fovY
+			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "fovY"))
 			{
 				token = &scanner.getNextToken();
 				if(token->getCode() != Scanner::TC_NUMBER)
@@ -137,8 +146,8 @@ bool LightData::load(const char* filename)
 																														 float(token->getValue().getInt());
 				type = LT_SPOT;
 			}
-			// TEXTURE
-			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "TEXTURE"))
+			// texture
+			else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "texture"))
 			{
 				token = &scanner.getNextToken();
 				if(token->getCode() != Scanner::TC_STRING)
@@ -173,9 +182,9 @@ bool LightData::load(const char* filename)
 	}
 	
 	// sanity checks
-	if(type == LT_SPOT && texture.get() == NULL)
+	if(type == LT_NUM)
 	{
-		ERROR("Spot light should have texture");
+		ERROR("Forgot to set type");
 		return false;
 	}
 

+ 2 - 1
src/Resources/LightData.h

@@ -15,7 +15,8 @@ class LightData: public Resource
 		enum LightType
 		{
 			LT_POINT,
-			LT_SPOT
+			LT_SPOT,
+			LT_NUM
 		};
 
 	/// @name Common light properties

+ 17 - 0
src/Util/Exception.cpp

@@ -0,0 +1,17 @@
+#include <cstdio>
+#include <cstring>
+#include "Exception.h"
+
+
+using namespace std;
+
+
+//======================================================================================================================
+// init                                                                                                                =
+//======================================================================================================================
+void Exception::init(const char* err_, const char* file, int line, const char* func)
+{
+	char tmpStr[1024];
+	sprintf(tmpStr, "Exception (%s:%d %s): %s", file, line, func, err_);
+	err = tmpStr;
+}

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä