Kaynağa Gözat

It compiles and runs

Panagiotis Christopoulos Charitos 15 yıl önce
ebeveyn
işleme
2c6cee4425

+ 2 - 2
blenderscripts/skeleton.py

@@ -188,7 +188,7 @@ def getAnkiSkeletonScript(skeleton, flipYZ):
 				
 		# write the parent
 		if not bone.parent:
-			buff += pack("I", 0xFFFFFF)
+			buff += pack("I", 0xFFFFFFFF)
 		else:
 			buff += pack("I", boneNames.index(bone.parent.name))
 			
@@ -218,4 +218,4 @@ def export(skeletonInit):
 	file.write(getAnkiSkeletonScript(skeleton, skeletonInit.flipYZ))
 	
 	print("Skeleton exported!! \"" + filename + "\"")	
-	
+	

+ 15 - 6
src/Main.cpp

@@ -372,12 +372,21 @@ void mainLoop()
 //======================================================================================================================
 int main(int argc, char* argv[])
 {
-	new App(argc, argv);
-	init();
+	try
+	{
+		new App(argc, argv);
+		init();
 
-	mainLoop();
+		mainLoop();
 
-	INFO("Exiting...");
-	app->quit(EXIT_SUCCESS);
-	return 0;
+		INFO("Exiting...");
+		app->quit(EXIT_SUCCESS);
+		return 0;
+	}
+	catch(std::exception& e)
+	{
+		std::cerr << e.what() << std::endl;
+		abort();
+		return 1;
+	}
 }

+ 2 - 3
src/Resources/Core/RsrcContainer.inl.h

@@ -97,11 +97,10 @@ Type* RsrcContainer<Type>::load(const char* fname)
 	{
 		newInstance->load(fname);
 	}
-	catch(Exception& e)
+	catch(std::exception& e)
 	{
 		delete newInstance;
-		return NULL;
-		throw EXCEPTION("Cannot load \"" + fname + '\"');
+		throw EXCEPTION("Cannot load resource \"" + fname + "\": " + e.what());
 	}
 
 	BaseClass::push_back(newInstance);

+ 13 - 5
src/Resources/Skeleton.cpp

@@ -20,6 +20,14 @@ void Skeleton::load(const char* filename)
 	{
 		BinaryStream bs(fs.rdbuf());
 
+		// Magic word
+		char magic[8];
+		bs.read(magic, 8);
+		if(bs.fail() || memcmp(magic, "ANKISKEL", 8))
+		{
+			throw EXCEPTION("Incorrect magic word");
+		}
+
 		// Bones num
 		uint bonesNum = bs.readUint();
 		bones.resize(bonesNum);
@@ -34,19 +42,19 @@ void Skeleton::load(const char* filename)
 
 			for(uint j=0; j<3; j++)
 			{
-				bone.head[i] = bs.readFloat();
+				bone.head[j] = bs.readFloat();
 			}
 
 			for(uint j=0; j<3; j++)
 			{
-				bone.tail[i] = bs.readFloat();
+				bone.tail[j] = bs.readFloat();
 			}
 
 			// Matrix
 			Mat4 m4;
 			for(uint j=0; j<16; j++)
 			{
-				m4[i] = bs.readFloat();
+				m4[j] = bs.readFloat();
 			}
 
 			// Matrix for real
@@ -94,8 +102,8 @@ void Skeleton::load(const char* filename)
 			}
 		}
 	}
-	catch(Exception& e)
+	catch(std::exception& e)
 	{
-		throw EXCEPTION("File \"" + filename + "\": " + e.what());
+		throw EXCEPTION("Skeleton \"" + filename + "\": " + e.what());
 	}
 }

+ 42 - 50
src/Scene/SkelModelNode.cpp

@@ -7,65 +7,57 @@
 /// Create a skelNode and N meshNodes that have a meshSkelCtrl
 void SkelModelNode::init(const char* filename)
 {
-	try
+	Scanner scanner(filename);
+	const Scanner::Token* token;
+
+	//** SKELETON **
+	token = &scanner.getNextToken();
+	if(!(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "SKELETON")))
 	{
-		Scanner scanner(filename);
-		const Scanner::Token* token;
-	
+		throw PARSER_EXCEPTION_EXPECTED("identifier SKELETON");
+		return;
+	}
 	
-		//** SKELETON **
-		token = &scanner.getNextToken();
-		if(!(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "SKELETON")))
-		{
-			throw PARSER_EXCEPTION_EXPECTED("identifier SKELETON");
-			return;
-		}
-		
-		token = &scanner.getNextToken();
-		if(token->getCode() != Scanner::TC_STRING)
-		{
-			throw PARSER_EXCEPTION_EXPECTED("string");
-			return;
-		}
+	token = &scanner.getNextToken();
+	if(token->getCode() != Scanner::TC_STRING)
+	{
+		throw PARSER_EXCEPTION_EXPECTED("string");
+		return;
+	}
 
-		skelNode = new SkelNode;
-		skelNode->init(token->getValue().getString());
-		addChild(skelNode);
+	skelNode = new SkelNode;
+	skelNode->init(token->getValue().getString());
+	addChild(skelNode);
 
-		//** MESHES **
-		token = &scanner.getNextToken();
-		if(!(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "MESHES_NUM")))
-		{
-			throw PARSER_EXCEPTION_EXPECTED("identifier MESHES_NUM");
-			return;
-		}
+	//** MESHES **
+	token = &scanner.getNextToken();
+	if(!(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "MESHES_NUM")))
+	{
+		throw PARSER_EXCEPTION_EXPECTED("identifier MESHES_NUM");
+		return;
+	}
+
+	token = &scanner.getNextToken();
+	if(token->getCode() != Scanner::TC_NUMBER || token->getDataType() != Scanner::DT_INT)
+	{
+		throw PARSER_EXCEPTION_EXPECTED("integer");
+		return;
+	}
+
+	meshNodes.resize(token->getValue().getInt());
 
+	for(uint i=0; i<meshNodes.size(); ++i)
+	{
 		token = &scanner.getNextToken();
-		if(token->getCode() != Scanner::TC_NUMBER || token->getDataType() != Scanner::DT_INT)
+		if(token->getCode() != Scanner::TC_STRING)
 		{
-			throw PARSER_EXCEPTION_EXPECTED("integer");
+			throw PARSER_EXCEPTION_EXPECTED("string");
 			return;
 		}
-				
-		meshNodes.resize(token->getValue().getInt());
-
-		for(uint i=0; i<meshNodes.size(); ++i)
-		{
-			token = &scanner.getNextToken();
-			if(token->getCode() != Scanner::TC_STRING)
-			{
-				throw PARSER_EXCEPTION_EXPECTED("string");
-				return;
-			}
 
-			meshNodes[i] = new MeshNode;
-			meshNodes[i]->init(token->getValue().getString());
-			skelNode->addChild(meshNodes[i]);
-			meshNodes[i]->meshSkelCtrl = new MeshSkelNodeCtrl(skelNode, meshNodes[i]);
-		}
-	}
-	catch(Exception& e)
-	{
-		ERROR(e.what());
+		meshNodes[i] = new MeshNode;
+		meshNodes[i]->init(token->getValue().getString());
+		skelNode->addChild(meshNodes[i]);
+		meshNodes[i]->meshSkelCtrl = new MeshSkelNodeCtrl(skelNode, meshNodes[i]);
 	}
 }