void ComposerState::initController() { Controller_::ActionMapT actions; actions[A_QUIT] = "A_QUIT"; actions[A_LOADING_MESH] = "A_LOADING_MESH"; actions[A_LOADING_MATERIAL] = "A_LOADING_MATERIAL"; actions[A_CAMERA_AXIS_X] = "A_CAMERA_AXIS_X"; actions[A_CAMERA_AXIS_Y] = "A_CAMERA_AXIS_Y"; actions[A_CAMERA_AXIS_Z] = "A_CAMERA_AXIS_Z"; actions[A_CAMERA_MOVE] = "A_CAMERA_MOVE"; actions[A_CAMERA_RESET] = "A_CAMERA_RESET"; actions[A_CAMERA_ORBIT] = "A_CAMERA_ORBIT"; actions[A_SCREENSHOT] = "A_SCREENSHOT"; actions[A_LOADING_SKY] = "A_LOADING_SKY"; actions[A_CREATE_LIGHT] = "A_CREATE_LIGHT"; actions[A_DESTROY_LIGHT] = "A_DESTROY_LIGHT"; actions[A_PREV_LIGHT] = "A_PREV_LIGHT"; actions[A_NEXT_LIGHT] = "A_NEXT_LIGHT"; actions[A_FIRST_LIGHT] = "A_FIRST_LIGHT"; actions[A_LAST_LIGHT] = "A_LAST_LIGHT"; actions[A_INFO_WINDOW] = "A_INFO_WINDOW"; actions[A_CAMERA_MOUSE_X] = "A_CAMERA_MOUSE_X"; actions[A_CAMERA_MOUSE_Y] = "A_CAMERA_MOUSE_Y"; actions[A_CAMERA_MOUSE_Z] = "A_CAMERA_MOUSE_Z"; actions[A_CAMERA_MOUSE_MOVE] = "A_CAMERA_MOUSE_MOVE"; actions[A_SUB_MESH] = "A_SUB_MESH"; actions[A_TEX_UNIT] = "A_TEX_UNIT"; actions[A_ANIMATION] = "A_ANIMATION"; actions[A_ADAPTER] = "A_ADAPTER"; actions[A_UPDATE_FEATURES] = "A_UPDATE_FEATURES"; Controller_::fillWithDefaultActions(actions); Controller_::sendActionsToController(mLane, actions); Path path; const std::string config_path = path.Expand("Composer.xml"); const std::string state_name = "Composer"; View::WindowAttributes wa; View::queryWindowAttributes(wa); Controller_::StateInsertion si(config_path, state_name, generateHandle(), true, wa); mLane.emit(ID::CE_LOAD_STATE, si); }
MainState::MainState(GameHandle handle, Event::Lane& lane) : State(lane), mPlayer(NULL_HANDLE), mEnvironment(new Environment), mLane(lane) { Path p; std::string level = p.Get(ID::P_SCRIPTS_LEVELS) + "spaceinvaders/"; std::string def = p.Get(ID::P_SCRIPTS_LEVELS) + "default/"; LevelConfig lc; lc.mModules.push_back(def + "Object.xml"); lc.mAdapters.push_back(def + "Adapter.xml"); lc.mConcepts.push_back(def + "Concept.xml"); lc.mProperties.push_back(def + "Value.xml"); lc.mModules.push_back(level + "Object.xml"); lc.mAdapters.push_back(level + "Adapter.xml"); lc.mConcepts.push_back(level + "Concept.xml"); lc.mProperties.push_back(level + "Value.xml"); using BFG::Property::ValueId; PluginId spId = ValueId::ENGINE_PLUGIN_ID; PluginId sipId = BFG::Property::generatePluginId<PluginId>(); boost::shared_ptr<BFG::SpacePlugin> sp(new BFG::SpacePlugin(spId)); boost::shared_ptr<SiPlugin> sip(new SiPlugin(sipId)); mPluginMap.insert(sp); mPluginMap.insert(sip); boost::shared_ptr<GameObjectFactory> gof; gof.reset(new GameObjectFactory(mLane, lc, mPluginMap, mEnvironment, handle)); mSector.reset(new Sector(mLane, 1, "SpaceInvaderSector", gof)); // Init Controller BFG::Controller_::ActionMapT actions; actions[A_SHIP_AXIS_Y] = "A_SHIP_AXIS_Y"; actions[A_SHIP_FIRE] = "A_SHIP_FIRE"; actions[A_QUIT] = "A_QUIT"; actions[A_FPS] = "A_FPS"; BFG::Controller_::sendActionsToController(mLane, actions); const std::string config_path = p.Expand("SpaceInvaders.xml"); const std::string state_name = "SpaceInvaders"; BFG::View::WindowAttributes wa; BFG::View::queryWindowAttributes(wa); //! \todo Verify usage of generateHandle() here. Controller_::StateInsertion si(config_path, state_name, generateHandle(), true, wa); mLane.emit(ID::CE_LOAD_STATE, si); // --- View::SkyCreation sc("sky02"); mLane.emit(ID::VE_SET_SKY, sc, handle); ObjectParameter op; mPlayer = generateHandle(); op.mHandle = mPlayer; op.mName = "The Hero's Mighty Ship"; op.mType = "Ship"; op.mLocation = v3(0.0f, -NEGATIVE_SHIP_Y_POSITION, OBJECT_Z_POSITION); // - 5.0f); // + SPECIAL_PACKER_MESH_OFFSET); fromAngleAxis(op.mLocation.orientation, -90.0f * (float) DEG2RAD, v3::UNIT_X); boost::shared_ptr<GameObject> player = gof->createGameObject(op); mSector->addObject(player); mInvaderGeneral.reset(new InvaderGeneral(lane.createSubLane(), mEnvironment)); mHumanGeneral.reset(new HumanGeneral(lane.createSubLane(), mEnvironment)); mLane.connect(A_SHIP_AXIS_Y, this, &MainState::onAxisY); mLane.connect(A_FPS, this, &MainState::onFps); mLane.connectV(A_SHIP_FIRE, this, &MainState::onShipFire); mLane.connect(A_QUIT, this, &MainState::onQuit); }
// This is the Ex-'GameStateManager::SingleThreadEntryPoint(void*)' function void* SingleThreadEntryPoint(void *iPointer) { EventLoop* loop = static_cast<EventLoop*>(iPointer); GameHandle siHandle = BFG::generateHandle(); gViewComposerState.reset(new ViewComposerState(siHandle, loop)); gComposerState.reset(new ComposerState(siHandle, loop)); // Init Controller GameHandle handle = generateHandle(); { BFG::Controller_::ActionMapT actions; actions[A_QUIT] = "A_QUIT"; actions[A_LOADING_MESH] = "A_LOADING_MESH"; actions[A_LOADING_MATERIAL] = "A_LOADING_MATERIAL"; actions[A_CAMERA_AXIS_X] = "A_CAMERA_AXIS_X"; actions[A_CAMERA_AXIS_Y] = "A_CAMERA_AXIS_Y"; actions[A_CAMERA_AXIS_Z] = "A_CAMERA_AXIS_Z"; actions[A_CAMERA_MOVE] = "A_CAMERA_MOVE"; actions[A_CAMERA_RESET] = "A_CAMERA_RESET"; actions[A_CAMERA_ORBIT] = "A_CAMERA_ORBIT"; actions[A_SCREENSHOT] = "A_SCREENSHOT"; actions[A_LOADING_SKY] = "A_LOADING_SKY"; actions[A_CREATE_LIGHT] = "A_CREATE_LIGHT"; actions[A_DESTROY_LIGHT] = "A_DESTROY_LIGHT"; actions[A_PREV_LIGHT] = "A_PREV_LIGHT"; actions[A_NEXT_LIGHT] = "A_NEXT_LIGHT"; actions[A_FIRST_LIGHT] = "A_FIRST_LIGHT"; actions[A_LAST_LIGHT] = "A_LAST_LIGHT"; actions[A_INFO_WINDOW] = "A_INFO_WINDOW"; actions[A_CAMERA_MOUSE_X] = "A_CAMERA_MOUSE_X"; actions[A_CAMERA_MOUSE_Y] = "A_CAMERA_MOUSE_Y"; actions[A_CAMERA_MOUSE_Z] = "A_CAMERA_MOUSE_Z"; actions[A_CAMERA_MOUSE_MOVE] = "A_CAMERA_MOUSE_MOVE"; actions[A_SUB_MESH] = "A_SUB_MESH"; actions[A_TEX_UNIT] = "A_TEX_UNIT"; actions[A_ANIMATION] = "A_ANIMATION"; actions[A_ADAPTER] = "A_ADAPTER"; actions[A_UPDATE_FEATURES] = "A_UPDATE_FEATURES"; BFG::Controller_::fillWithDefaultActions(actions); BFG::Controller_::sendActionsToController(loop, actions); Path path; const std::string config_path = path.Expand("Composer.xml"); const std::string state_name = "Composer"; BFG::View::WindowAttributes wa; BFG::View::queryWindowAttributes(wa); Controller_::StateInsertion si(config_path, state_name, handle, true, wa); EventFactory::Create<Controller_::ControlEvent> ( loop, ID::CE_LOAD_STATE, si ); loop->connect(A_QUIT, gComposerState.get(), &ComposerState::ControllerEventHandler); loop->connect(A_SCREENSHOT, gComposerState.get(), &ComposerState::ControllerEventHandler); loop->connect(A_LOADING_MESH, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_LOADING_MATERIAL, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_CAMERA_AXIS_X, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_CAMERA_AXIS_Y, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_CAMERA_AXIS_Z, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_CAMERA_MOVE, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_CAMERA_RESET, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_CAMERA_ORBIT, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_LOADING_SKY, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_CREATE_LIGHT, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_DESTROY_LIGHT, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_PREV_LIGHT, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_NEXT_LIGHT, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_FIRST_LIGHT, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_LAST_LIGHT, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_INFO_WINDOW, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_SUB_MESH, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_TEX_UNIT, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_ANIMATION, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_ADAPTER, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_CAMERA_MOUSE_X, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_CAMERA_MOUSE_Y, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_CAMERA_MOUSE_Z, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_CAMERA_MOUSE_MOVE, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(BFG::ID::A_MOUSE_MIDDLE_PRESSED, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(BFG::ID::A_MOUSE_LEFT_PRESSED, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(BFG::ID::A_MOUSE_RIGHT_PRESSED, gViewComposerState.get(), &ViewComposerState::controllerEventHandler); loop->connect(A_UPDATE_FEATURES, gViewComposerState.get(), &ViewComposerState::toolEventHandler); } return 0; }