Check model format version
This commit is contained in:
		
							parent
							
								
									557111d5c4
								
							
						
					
					
						commit
						dd6edb96f3
					
				| 
						 | 
				
			
			@ -3,10 +3,14 @@
 | 
			
		|||
#include <zip.h>
 | 
			
		||||
#include <tomlcpp.hpp> //dynamically link tomlcpp if it becomes common in repositories
 | 
			
		||||
#include <model.hpp>
 | 
			
		||||
#include <config.hpp>
 | 
			
		||||
 | 
			
		||||
#define BUFFER_SIZE_MODEL_DESC	8192		// 8 KiB
 | 
			
		||||
#define BUFFER_SIZE_TEXTURE	16777220	// 16 MiB
 | 
			
		||||
 | 
			
		||||
#define SUPPORTED_MODEL_MAJOR 0
 | 
			
		||||
#define SUPPORTED_MODEL_MINOR 1
 | 
			
		||||
 | 
			
		||||
void textureFromArchive(zip_t* archive, const char* path, ModelPart* part, size_t slot, std::string triggerName) {
 | 
			
		||||
	zip_file_t* textureFile = zip_fopen(archive, path, 0);
 | 
			
		||||
	if (textureFile != NULL) {
 | 
			
		||||
| 
						 | 
				
			
			@ -42,11 +46,40 @@ Model::Model(const char* path) {
 | 
			
		|||
		std::cerr << "cannot parse model.toml! " << std::endl << modelDesc.errmsg << std::endl;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// get name
 | 
			
		||||
	// get format table
 | 
			
		||||
	auto format = modelDesc.table->getTable("format");
 | 
			
		||||
	if (!format) {
 | 
			
		||||
		std::cerr << "Model does not have a format table!" << std::endl;
 | 
			
		||||
	} else {
 | 
			
		||||
		// get format version
 | 
			
		||||
		auto formatMajResult = format->getInt("version_major");
 | 
			
		||||
		auto formatMinResult = format->getInt("version_minor");
 | 
			
		||||
 | 
			
		||||
		if (formatMajResult.first && formatMinResult.first) {
 | 
			
		||||
			// check format version
 | 
			
		||||
			if (formatMajResult.second != SUPPORTED_MODEL_MAJOR ||
 | 
			
		||||
				formatMinResult.second > SUPPORTED_MODEL_MINOR ) {
 | 
			
		||||
 | 
			
		||||
				std::cerr << "Model format version " <<
 | 
			
		||||
					formatMajResult.second << "." << formatMinResult.second <<
 | 
			
		||||
					" is unsupported! This version of " << PROJECT_NAME << " supports model file version " <<
 | 
			
		||||
					SUPPORTED_MODEL_MAJOR << ".0 to version " <<
 | 
			
		||||
					SUPPORTED_MODEL_MAJOR << "." << SUPPORTED_MODEL_MINOR << std::endl;
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			std::cerr << "Model does not define a format version!" << std::endl;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	// get model info table
 | 
			
		||||
	auto modelInfo = modelDesc.table->getTable("model_info");
 | 
			
		||||
 | 
			
		||||
	if (!modelInfo) {
 | 
			
		||||
		std::cerr << "Model does not have a model_info table!" << std::endl;
 | 
			
		||||
	} else {
 | 
			
		||||
 | 
			
		||||
		// get name
 | 
			
		||||
		auto nameResult = modelInfo->getString("name");
 | 
			
		||||
 | 
			
		||||
		if (!nameResult.first) {
 | 
			
		||||
| 
						 | 
				
			
			@ -56,7 +89,7 @@ Model::Model(const char* path) {
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	// parse parts
 | 
			
		||||
	auto partsDescArray = modelDesc.table->getArray("part");
 | 
			
		||||
 | 
			
		||||
	auto partsVec = *partsDescArray->getTableVector();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue