home *** CD-ROM | disk | FTP | other *** search
- #include "ModelHandler.h"
-
- #include "Tokenizer.h"
-
- char* ModelHandler::searchPath=NULL;
- char** ModelHandler::modelFilenames=NULL;
- Model** ModelHandler::models=NULL;
- int ModelHandler::numModels=0;
-
- Model* ModelHandler::getModel(const char* filename){
- int i;
-
- for(i=0;i<numModels;i++){
- if(streq(filename, modelFilenames[i])){
- return models[i];
- }
- }
-
- return loadModel(filename);
- }
-
- int ModelHandler::getNumModels(){
- return numModels;
- }
- void ModelHandler::setNewSearchPath(char* newPath){
- if(searchPath!=NULL){
- delete[] searchPath;
- }
- searchPath=newString(newPath);
- }
- void ModelHandler::addToSearchPath(char* path){
- char* newPath=new char[strlen(searchPath)+strlen(path)+2];
- strcpy(newPath, searchPath);
- strcat(newPath, ";");
- strcat(newPath, path);
-
- if(searchPath!=NULL){
- delete[] searchPath;
- }
- }
-
- Model* ModelHandler::loadModel(const char* filename){
- int i;
- Model* m = new Model(filename);
-
- numModels++;
- Model** newModels=new Model*[numModels];
- char** newModelFilenames=new char*[numModels];
- for(i=0;i<numModels-1;i++){
- newModelFilenames[i]=modelFilenames[i];
- newModels[i]=models[i];
- }
-
- newModels[numModels-1]=m;
- delete[] models;
- models=newModels;
-
- newModelFilenames[numModels-1]=newString(filename);
- delete[] modelFilenames;
- modelFilenames=newModelFilenames;
-
- return m;
- }
-
- void ModelHandler::freeModel(Model* model){
- int i,j;
-
- for(i=0;i<numModels;i++){
- if(models[i]==model){
- delete models[i];
- delete[] modelFilenames[i];
- for(j=i;j<numModels-1;j++){
- models[j]=models[j+1];
- modelFilenames[j]=modelFilenames[j+1];
- }
- numModels--;
- }
- }
-
- Model** newModels=new Model*[numModels];
- char** newModelFilenames=new char*[numModels];
- for(i=0;i<numModels;i++){
- newModelFilenames[i]=modelFilenames[i];
- newModels[i]=models[i];
-
- }
-
- delete[] models;
- models=newModels;
-
- delete[] modelFilenames;
- modelFilenames=newModelFilenames;
-
- }
-