void Module::enter() { if (!_hasModule) throw Common::Exception("Module::enter(): Lacking a module?!?"); if (!_pc) throw Common::Exception("Module::enter(): Lacking a PC?!?"); _pc->clearVariables(); loadTexturePack(); _console->printf("Entering module \"%s\" with character \"%s\"", _ifo.getName().getString().c_str(), _pc->getName().c_str()); _ingameGUI->updatePartyMember(0, *_pc); try { loadTLK(); loadHAKs(); loadAreas(); } catch (Common::Exception &e) { e.add("Can't initialize module \"%s\"", _ifo.getName().getString().c_str()); throw e; } float entryX, entryY, entryZ, entryDirX, entryDirY; _ifo.getEntryPosition(entryX, entryY, entryZ); _ifo.getEntryDirection(entryDirX, entryDirY); const float entryAngle = -Common::rad2deg(atan2(entryDirX, entryDirY)); _pc->setPosition(entryX, entryY, entryZ); _pc->setOrientation(0.0f, 0.0f, 1.0f, entryAngle); _pc->loadModel(); runScript(kScriptModuleLoad , this, _pc); runScript(kScriptModuleStart, this, _pc); runScript(kScriptEnter , this, _pc); Common::UString startMovie = _ifo.getStartMovie(); if (!startMovie.empty()) playVideo(startMovie); _newArea = _ifo.getEntryArea(); CameraMan.reset(); // Roughly head position CameraMan.setPosition(entryX, entryY, entryZ + 1.8f); CameraMan.setOrientation(90.0f, 0.0f, entryAngle); CameraMan.update(); _running = true; _exit = false; _ingameGUI->show(); }
bool Module::enter() { if (!_hasModule) { warning("Module::enter(): Lacking a module?!?"); return false; } if (!_pc) { warning("Module::enter(): Lacking a PC?!?"); return false; } _pc->clearVariables(); loadTexturePack(); _console->printf("Entering module \"%s\" with character \"%s\"", _ifo.getName().getString().c_str(), _pc->getName().c_str()); _ingameGUI->updatePartyMember(0, *_pc); try { loadHAKs(); loadAreas(); } catch (Common::Exception &e) { e.add("Can't initialize module \"%s\"", _ifo.getName().getString().c_str()); printException(e, "WARNING: "); return false; } runScript(kScriptModuleLoad , this, _pc); runScript(kScriptModuleStart, this, _pc); runScript(kScriptEnter , this, _pc); Common::UString startMovie = _ifo.getStartMovie(); if (!startMovie.empty()) playVideo(startMovie); _exit = false; _newArea = _ifo.getEntryArea(); CameraMan.reset(); float entryX, entryY, entryZ; _ifo.getEntryPosition(entryX, entryY, entryZ); // Roughly head position CameraMan.setPosition(entryX, entryZ + 2.0, entryY); float entryDirX, entryDirY; _ifo.getEntryDirection(entryDirX, entryDirY); CameraMan.setOrientation(entryDirX, entryDirY); return true; }
void Module::enter(Creature &pc, bool isNewCampaign) { if (!isLoaded()) throw Common::Exception("Module::enter(): Lacking a module?!?"); try { loadTLK(); loadHAKs(); loadAreas(); } catch (Common::Exception &e) { e.add("Can't initialize module \"%s\"", _name.c_str()); throw e; } if (isNewCampaign) _ranPCSpawn = false; _pc = &pc; addObject(*_pc); float entryX, entryY, entryZ, entryDirX, entryDirY; _ifo.getEntryPosition(entryX, entryY, entryZ); _ifo.getEntryDirection(entryDirX, entryDirY); const float entryAngle = -Common::rad2deg(atan2(entryDirX, entryDirY)); _pc->setPosition(entryX, entryY, entryZ); _pc->setOrientation(0.0f, 0.0f, 1.0f, entryAngle); _pc->loadModel(); _console->printf("Entering module \"%s\" with character \"%s\"", _name.c_str(), _pc->getName().c_str()); runScript(kScriptModuleLoad , this, _pc); runScript(kScriptModuleStart, this, _pc); runScript(kScriptEnter , this, _pc); Common::UString startMovie = _ifo.getStartMovie(); if (!startMovie.empty()) playVideo(startMovie); _newArea = _ifo.getEntryArea(); CameraMan.reset(); // Roughly head position CameraMan.setPosition(entryX, entryY, entryZ + 1.8f); CameraMan.setOrientation(90.0f, 0.0f, entryAngle); CameraMan.update(); _running = true; _exit = false; }