// 초기화 함수. bool InputManager::Initialize() { // 디바이스 생성 _createDevice(); // 키 등록 _registerKey(); return true; }
int main(int argc, char* argv[]) { stringc sceneDirectory, saveDir; irr::io::path sceneFileName; UserDataSerializer serializer; if(argc < 2) { printf("error scene file name missing:\n"); printf(" irrbPhysics <input scene filename>\n"); return -1; } // initialize Irrlicht m_device = _createDevice(); if(!m_device) return -1; m_fileSystem = m_device->getFileSystem(); m_videoDriver = m_device->getVideoDriver(); m_sceneManager = m_device->getSceneManager(); m_gui = m_device->getGUIEnvironment(); m_debugNode = new CDebugNode(m_sceneManager); // create debug panel (text area) core::dimension2du screen = m_videoDriver->getScreenSize(); m_debugPanel = m_gui->addStaticText(L"",rect<s32>(screen.Width-202,0,screen.Width-2,100)); m_debugPanel->setBackgroundColor(SColor(128, 30, 30, 30)); m_debugPanel->setDrawBorder(true); IGUIFont* font=m_debugPanel->getOverrideFont(); if(!font) font = m_gui->getSkin()->getFont(); m_charHeight = font->getDimension(L"Ay").Height; s32 idx=0; m_charHeight += font->getKerningHeight(); // create help panel (text area) m_helpPanel = m_gui->addStaticText(L"",rect<s32>(2,0,202,200)); m_helpPanel->setBackgroundColor(SColor(128, 30, 30, 30)); m_helpPanel->setDrawBorder(true); _addHelpText("F1 - Toggle Help"); _addHelpText("F3 - Cycle Wire, Points, Solid"); _addHelpText("F4 - Toggle Physics Debug"); _addHelpText("F5 - Warp To Start Position"); _addHelpText("F9 - Detach Camera"); // turn hardware cursor off m_device->getCursorControl()->setVisible(false); #if defined(USE_BULLET) m_device->setWindowCaption(L"irrb Collision/Physics example - Using Bullet"); #elif defined(USE_IRRPHYSX) m_device->setWindowCaption(L"irrb Collision/Physics example - Using IrrPhysx"); #else m_device->setWindowCaption(L"irrb Collision/Physics example - Using Irrlicht"); #endif m_camera = m_sceneManager->addCameraSceneNodeFPS(0, 100.0f, m_moveSpeed, -1, keyMap, 5, true, m_jumpSpeed); m_camera->setPosition(vector3df(0,10,0)); m_camera->setFOV(core::PI / 2.5f); m_camera->setNearValue(.1f); m_camera->setFarValue(1000.f); // save off animator core::list<ISceneNodeAnimator*>::ConstIterator anims=m_camera->getAnimators().begin(); while(anims != m_camera->getAnimators().end()) { if ((*anims)->getType() == ESNAT_CAMERA_FPS) { m_fpsAnimator = (ISceneNodeAnimatorCameraFPS*)*anims; break; } ++anims; } // init physics library _initPhysicsLibrary(); m_displayPhysicsDebug = true; _enablePhysicsDebug(true); m_debugNode->setVisible(true); // load scene sceneFileName = argv[1]; sceneDirectory = m_fileSystem->getFileDir(sceneFileName); saveDir = m_fileSystem->getWorkingDirectory(); m_fileSystem->changeWorkingDirectoryTo(sceneDirectory); m_sceneManager->loadScene(sceneFileName.c_str(), &serializer); m_fileSystem->changeWorkingDirectoryTo(saveDir); // if the scene also contained a camera, set the active // camera to our fps camera and update the fps pos/rot. if(m_camera && (m_camera != m_sceneManager->getActiveCamera())) { ICameraSceneNode* anode = m_sceneManager->getActiveCamera(); m_camera->setPosition(anode->getPosition()); m_camera->setRotation(anode->getRotation()); m_sceneManager->setActiveCamera(m_camera); m_startPos = m_camera->getPosition(); _warp(m_startPos); } ITimer* timer = m_device->getTimer(); u32 current, last = timer->getRealTime(); u32 delta = 0; while(m_device->run() && m_running) { _clearDebugText(); m_videoDriver->beginScene(true, true, SColor(255,100,101,140)); // calc milliseconds since last frame current = timer->getRealTime(); delta = current-last; last = current; // update collision/physics simulation _stepSimulation(delta); m_sceneManager->drawAll(); static char buf[64]; sprintf(buf, "FPS: %d", m_videoDriver->getFPS()); _updateDebugText(0, buf); m_gui->drawAll(); m_videoDriver->endScene(); } m_device->drop(); delete m_eventReceiver; return 0; }