home *** CD-ROM | disk | FTP | other *** search
/ Enter 2005 March / ENTER.ISO / files / fwp-0.0.6-win32-installer.exe / ModelHandler.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2004-12-06  |  1.9 KB  |  95 lines

  1. #include "ModelHandler.h"
  2.  
  3. #include "Tokenizer.h"
  4.  
  5. char* ModelHandler::searchPath=NULL;
  6. char** ModelHandler::modelFilenames=NULL;
  7. Model** ModelHandler::models=NULL;
  8. int ModelHandler::numModels=0;
  9.  
  10. Model* ModelHandler::getModel(const char* filename){
  11.     int i;
  12.  
  13.     for(i=0;i<numModels;i++){
  14.         if(streq(filename, modelFilenames[i])){
  15.             return models[i];
  16.         }
  17.     }
  18.  
  19.     return loadModel(filename);
  20. }
  21.  
  22. int ModelHandler::getNumModels(){
  23.     return numModels;
  24. }
  25. void ModelHandler::setNewSearchPath(char* newPath){
  26.     if(searchPath!=NULL){
  27.         delete[] searchPath;
  28.     }
  29.     searchPath=newString(newPath);
  30. }
  31. void ModelHandler::addToSearchPath(char* path){
  32.     char* newPath=new char[strlen(searchPath)+strlen(path)+2];
  33.     strcpy(newPath, searchPath);
  34.     strcat(newPath, ";");
  35.     strcat(newPath, path);
  36.  
  37.     if(searchPath!=NULL){
  38.         delete[] searchPath;
  39.     }
  40. }
  41.  
  42. Model* ModelHandler::loadModel(const char* filename){
  43.     int i;
  44.     Model* m = new Model(filename);
  45.  
  46.     numModels++;
  47.     Model** newModels=new Model*[numModels];
  48.     char** newModelFilenames=new char*[numModels];
  49.     for(i=0;i<numModels-1;i++){
  50.         newModelFilenames[i]=modelFilenames[i];
  51.         newModels[i]=models[i];
  52.     }
  53.     
  54.     newModels[numModels-1]=m;
  55.     delete[] models;
  56.     models=newModels;
  57.  
  58.     newModelFilenames[numModels-1]=newString(filename);
  59.     delete[] modelFilenames;
  60.     modelFilenames=newModelFilenames;
  61.  
  62.     return m;
  63. }
  64.  
  65. void ModelHandler::freeModel(Model* model){
  66.     int i,j;
  67.  
  68.     for(i=0;i<numModels;i++){
  69.         if(models[i]==model){
  70.             delete models[i];
  71.             delete[] modelFilenames[i];
  72.             for(j=i;j<numModels-1;j++){
  73.                 models[j]=models[j+1];
  74.                 modelFilenames[j]=modelFilenames[j+1];
  75.             }
  76.             numModels--;
  77.         }
  78.     }
  79.  
  80.     Model** newModels=new Model*[numModels];
  81.     char** newModelFilenames=new char*[numModels];
  82.     for(i=0;i<numModels;i++){
  83.         newModelFilenames[i]=modelFilenames[i];
  84.         newModels[i]=models[i];
  85.  
  86.     }
  87.     
  88.     delete[] models;
  89.     models=newModels;
  90.  
  91.     delete[] modelFilenames;
  92.     modelFilenames=newModelFilenames;
  93.  
  94. }
  95.