void LevelManager::loadLevel(Level* lvl) { printf("STARTING TO LOAD LEVEL \n" ); std::cout << "Entities::start " << cg::Registry::instance()->size() << "\n"; _currentLevel = lvl; _currentClues = 0; static_cast<Scene*>(cg::Registry::instance()->get("Scene"))->reset(); MaterialManager* materialManager = dynamic_cast<MaterialManager*>(cg::Registry::instance()->get("MaterialManager")); TextureManager* textureManager = dynamic_cast<TextureManager*>(cg::Registry::instance()->get("TextureManager")); materialManager->clear(); std::list<Material*>::iterator matit; for(matit = lvl->getMaterials()->begin(); matit != lvl->getMaterials()->end(); matit++) { materialManager->add(*matit); } textureManager->clear(); std::list<Texture*>::iterator texit; textureManager->addMap(lvl->getMapTex()); for(texit = lvl->getTextures()->begin(); texit != lvl->getTextures()->end(); texit++) { textureManager->add(*texit); } printf("LEVEL MANAGER: REMOVING PREVIOUS ENTITIES\n"); //clearing old ones (if there are any) cg::View* v1 = static_cast<cg::View*>(cg::Registry::instance()->get("view1")); std::list<std::string>::iterator entitiesit; for(entitiesit = _currentEntities->begin(); entitiesit != _currentEntities->end(); entitiesit++) { v1->unlinkEntity(*entitiesit); cg::Registry::instance()->remove(*entitiesit); } std::cout << "Entities::after_unlink " << cg::Registry::instance()->size() << "\n"; DebugManager* dm = static_cast<DebugManager*>(cg::Registry::instance()->get("DebugManager")); std::cout << "Debugmanager::Before " << dm->getListsSize() << "\n"; printf("LEVEL MANAGER: REMOVING DEBUG LISTENERS\n"); //removing everything registered for Debug (Ninja is always there) //DebugManager* dm = static_cast<DebugManager*>(cg::Registry::instance()->get("DebugManager")); dm->dispose(); dm->disableDebug(); std::cout << "Debugmanager::After " << dm->getListsSize() << "\n"; CollisionManager* cm = static_cast<CollisionManager*>(cg::Registry::instance()->get("CollisionManager")); std::cout << "Collision::Before " << cm->getListsSize() << "\n"; printf("LEVEL MANAGER: REMOVING COLLISION LISTENERS\n"); //removing everything except Ninja from Collisions //CollisionManager* cm = static_cast<CollisionManager*>(cg::Registry::instance()->get("CollisionManager")); cm->dispose(); std::cout << "Collision::After " << cm->getListsSize() << "\n"; std::cout << "Entities::after_managers " << cg::Registry::instance()->size() << "\n"; _currentEntities->clear(); std::cout << "Entities::after_clean_entities " << cg::Registry::instance()->size() << "\n"; printf("LEVEL MANAGER: STARTING TO LOAD HEIGHT MAP\n"); ImageLoaderHeightMap* ilhm = static_cast<ImageLoaderHeightMap*>(cg::Registry::instance()->get("mappedterrain")); if(ilhm != NULL) ilhm->setHeightMap(LEVEL_PATH + _currentLevel->getHeightMap()); else { ilhm = new ImageLoaderHeightMap("mappedterrain", LEVEL_PATH + _currentLevel->getHeightMap()); cg::Registry::instance()->add(ilhm); } std::cout << "Entities::after_heightmap " << cg::Registry::instance()->size() << "\n"; printf("LEVEL MANAGER: STARTING TO LOAD ITEM MAP\n"); ImageLoaderItemMap* ilim = static_cast<ImageLoaderItemMap*>(cg::Registry::instance()->get("mappeditems")); if(ilim != NULL) ilim->setItemMap(LEVEL_PATH + _currentLevel->getHeightMap(), LEVEL_PATH + _currentLevel->getItemMap()); else { ilim = new ImageLoaderItemMap("mappeditems", LEVEL_PATH + _currentLevel->getHeightMap(), LEVEL_PATH + _currentLevel->getItemMap()); cg::Registry::instance()->add(ilim); } for(entitiesit = _currentEntities->begin(); entitiesit != _currentEntities->end(); entitiesit++) { cg::Registry::instance()->get(*entitiesit)->init(); } //reset ninja position printf("LEVEL MANAGER: RESETING NINJA POSITION\n"); Ninja* ninja = dynamic_cast<Ninja*>(cg::Registry::instance()->get("Ninja")); ninja->reset(); static_cast<Camera*>(cg::Registry::instance()->get("Camera"))->mainCamera(); std::cout << "Entities::after_itemmap " << cg::Registry::instance()->size() << "\n"; std::cout << "Debugmanager::After " << dm->getListsSize() << "\n"; std::cout << "Collision::After " << cm->getListsSize() << "\n"; printf("LEVEL LOADED\n"); }