void Game::handleEvent(Event& e) { if(strcmp(e.getID(), "changestate") == 0) { if(strcmp(e[0].toChar(), "menu") == 0) { MenuState* pMenuState = dynamic_cast<MenuState*>(m_pStateManager->initState(new MenuState())); pMenuState->Initialize(); m_pStateManager->setActiveState(pMenuState); } else if(strcmp(e[0].toChar(), "game") == 0) { SPGameState* pGameState = dynamic_cast<SPGameState*>(m_pStateManager->initState(new SPGameState())); pGameState->Initialize(); m_pStateManager->setActiveState(pGameState); } else if(strcmp(e[0].toChar(), "editor") == 0) { EditorState* pEditorState = dynamic_cast<EditorState*>(m_pStateManager->initState(new EditorState())); pEditorState->Initialize(); m_pStateManager->setActiveState(pEditorState); } } }
void TitleState::update() { if (input.upPressed() || input.downPressed()) { // move cursor if (cursor.getSelection() == CONTINUE) { cursor.setSelection(NEW); } else { cursor.setSelection(CONTINUE); } } if (input.getConfirm()) { // select option if (cursor.getSelection() == NEW) { MenuState *ms = new MenuState(); stateManager->pushState(ms); ms->pushMenu(new NewMenu()); } else { // load in party data from some file printf("TODO: Continue :)\n"); } } // input handled input.resetAll(); }
void Shader::NewProject(const wxString& type) { MenuState *ms = NEW(MenuState, (m_MenuBar)); ms->Add(wxID_UNDO); ms->Add(wxID_REDO); ms->Add(wxID_CUT); ms->Add(wxID_COPY); //ms->Add(wxID_PASTE); ms->Add(wxID_DUPLICATE); ms->Add(wxID_GROUP); ms->Add(wxID_UNGROUP); ms->Add(wxID_SAVEGROUP); ms->Get(); Project::New(this, ms, type); }
MenuState * MenuState::Clone() { MenuState *clone = NEW(MenuState, (m_MenuBar)); const size_t length = m_Ranges.size(); int count = 0; for (size_t index = 0; index < length; index++) { Range range = m_Ranges[index]; clone->Add(range.first, range.last); count += range.last - range.first + 1; } if (m_States != 0) { clone->m_States = NEWARRAY(bool, count); for (int index = 0; index < count; index++) { clone->m_States[index] = m_States[index]; } }
void Shader::Open(const wxString& file) { MenuState *ms = NEW(MenuState, (m_MenuBar)); ms->Add(wxID_UNDO); ms->Add(wxID_REDO); ms->Add(wxID_CUT); ms->Add(wxID_COPY); //ms->Add(wxID_PASTE); ms->Add(wxID_DUPLICATE); ms->Add(wxID_GROUP); ms->Add(wxID_UNGROUP); ms->Add(wxID_SAVEGROUP); ms->Get(); m_FileName = file; wxFileName fn(m_FileName); m_FilePath = fn.GetPath(); Project::Load(this, ms, m_FileName); m_RecentMenu->Put(m_FileName); }
int main() { sfw::initContext(SCREEN_WIDTH, SCREEN_HEIGHT, "NSFW Draw"); loadTexture("Background","./Textures/background.png", 1, 1); loadTexture("Start", "./Textures/GameButton.png", 1, 1); loadTexture("Credits", "./Textures/CreditsButton.png", 1, 1); loadTexture("Quit", "./Textures/QuitButton.png", 1, 1); loadTexture("Mouse", "./Textures/mouse.jpg", 1, 1); loadTexture("Fireball", "./Textures/Player/newFireball.png", 5, 1); loadTexture("playerIDLE", "./Textures/Player/playerIDLE.png", 6, 1); loadTexture("playerHIT", "./Textures/Player/playerHIT.png", 6, 1); loadTexture("playerRUN", "./Textures/Player/playerRUN.png", 8, 1); loadTexture("playerSHOOT", "./Textures/Player/playerShoot.png", 6, 1); loadTexture("enemyIDLE", "./Textures/Enemy/enemyIDLE.png", 6, 1); loadTexture("enemyHIT", "./Textures/Enemy/enemyHIT.png", 8, 1); loadTexture("enemyWALK", "./Textures/Enemy/enemyWALK.png", 8, 1); loadTexture("enemySPAWN", "./Textures/Enemy/enemySPAWN.png", 10, 1); loadTexture("enemyDIE", "./Textures/Enemy/enemyDIE.png", 8, 1); addAnimation("Fireball", "bAni", { 0,1,2,3,4 }, 12); addAnimation("playerIDLE", "pIDLE", { 0,1,2,3,4,5}, 12); addAnimation("playerHIT", "pHIT", { 0,1,2,3,4,5 }, 12); addAnimation("playerRUN", "pRUN", { 0,1,2,3,4,5,6,7 }, 12); addAnimation("playerSHOOT", "pSHOOT", { 0,1,2,3,4,5 }, 12); addAnimation("enemyIDLE", "eIDLE", { 0,1,2,3,4,5 }, 12); addAnimation("enemyHIT", "eHIT", { 0,1,2,3,4,5,6,7 }, 12); addAnimation("enemyWALK", "eWALK", { 0,1,2,3,4,5,6,7 }, 12); addAnimation("enemySPAWN", "eSPAWN", { 0,1,2,3,4,5,6,7,8,9 }, 12); addAnimation("enemyDIE", "eDIE", { 0,1,2,3,4,5,6,7 }, 12); GameState game; MenuState menu; STATE current = MENU; while (sfw::stepContext()) { switch (current) { case MENU: current = menu.update(); menu.draw(); break; case GAME: current = game.update(); game.draw(); break; case CREDITS: break; case QUIT: return 0; } //dinosaur.CollisionBox(CLEAR); } sfw::termContext(); }
void main() { sfw::initContext(800, 600, "Saving Bob"); sfw::setBackgroundColor(BLACK); loadTexture("Space", "../res/space800x600.jpg", 1, 1); loadTexture("Asteroid Belt", "../res/asteroidbelt.png", 1, 1); loadTexture("Nebula", "../res/nebula.png", 1, 1); loadTexture("Nebula2", "../res/nebula2.png", 1, 1); loadTexture("Player", "../res/playership.png", 8, 1); loadTexture("Bullet", "../res/bullet.png", 1, 1); loadTexture("eBullet", "../res/enemyBullet.png", 1, 1); loadTexture("Enemy", "../res/enemyship.png", 9, 1); loadTexture("Explosion", "../res/explosion.png", 4, 4); loadTexture("Play", "../res/PlayBlue.png", 1, 1); loadTexture("Exit", "../res/ExitBlue.png", 1, 1); loadTexture("Credits", "../res/CreditsBlue.png", 1, 1); loadTexture("GameOver", "../res/GameOver.jpg", 1, 1); loadTexture("Options", "../res/OptionsBlue.png", 1, 1); loadTexture("Crosshair", "../res/crosshair.png", 1, 1); loadTexture("SavingTitle", "../res/savingTitle.png", 1, 1); loadTexture("BobTitle", "../res/bobTitle.png", 1, 1); loadTexture("PlanetBob", "../res/planetBob.png", 5, 4); loadTexture("Back", "../res/backButton.png", 1, 1); loadTexture("CreditsPage", "../res/Credits.jpg", 1, 1); addAnimation("Player", "Thrusters", { 0,1,2,3,4,5,6,7 }); addAnimation("Enemy", "eThrusters", { 0,1,2,3,4,5,6,7,8 }); addAnimation("Explosion", "Boom", { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }); addAnimation("PlanetBob", "Rotation", { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 }); GameState game; MenuState menu; CreditsPage creditsPage; GameOverBG gameOverPage; menu.menuLayout(); game.start(); creditsPage.creditsPG(); //gameOverPage.gameOverPG(); while (sfw::stepContext()) { switch (menuSelection) { case 1: menu.update(); menu.draw(); break; case 2: game.update(); game.draw(); break; case 3: creditsPage.update(); creditsPage.draw(); break; case 4: sfw::termContext(); break; case 5: gameOverPage.update(); gameOverPage.draw(); } } sfw::termContext(); }
void StartMenuAspect::init(MenuState & gs) { gs.slotActivateState.subscribe([&] ( MenuState & gs, StateChangeInfoPtr const& changeInfo ) { logging::Info() << "setting up Menu state" << std::endl; EntityFactory fact(gs.getEngines()); // call this, once the screen transform is available gs.getEngines().renderEngine().setCameraLocation(Vector3(0.0f, 0.0f, 0.0f)); /*Entity * guyEnt = fact.create< SingleVisualEntity>("bullet", Vector2(4.0f, 4.0f)); gs.getEngines().entityEngine().addEntity(guyEnt, &gs.getManagedEntityList()); */ auto toMenu = std::dynamic_pointer_cast< GameToMenuInfo >(changeInfo); gs.bootstrapMenu(); ScreenTransform const& trans = gs.getEngines().renderEngine().getScreenTransform(); // we could also have no GameToMenuInfo, on the first start of the game bool playerDied = false; // we might not have a change info at all if ( toMenu ) { if ( toMenu->PlayerDied) playerDied = true; } if (playerDied ) { Vector2 gameOverPos(4.0f, 6.0f); TexturePtr textTex = gs.getEngines().resourceEngine().loadImage("textChars.png"); m_gameOverVisual = new TextVisual(trans, textTex, gameOverPos, "Game Over"); gs.getEngines().renderEngine().addTextVisual(m_gameOverVisual); Vector2 scorePos(4.0f, 5.0f); std::stringstream sScore; sScore << "Score: " << toMenu->FinalScore; m_scoreVisual = new TextVisual(trans, textTex, scorePos,sScore.str()); gs.getEngines().renderEngine().addTextVisual(m_scoreVisual); m_delayedGameOver = 1.0f; } else { /* Vector2 gameOverPos(0.0f, 6.0f); TexturePtr textTex = gs.getEngines().resourceEngine().loadImage("textChars.png"); auto testTxt = new TextVisual(trans, textTex, gameOverPos, "TEST"); gs.getEngines().renderEngine().addTextVisual(testTxt);*/ EntityFactory fact(gs.getEngines()); m_logoEntity = fact.createFromTemplateName< SingleVisualEntity>("game_logo", Vector2(1.0f, 1.0f)); m_logoEntity->getActiveVisual().get().setIngame(trans, Vector2(0.0f, 5.0f), false); VisualSupport::placeXCenter( m_logoEntity, 0.5f, 0.75f, trans ); gs.getEngines().entityEngine().addEntity(m_logoEntity , &gs.getManagedEntityList()); /* m_controlsEntity = fact.create< SingleVisualEntity>("xbox-gamepad-labels", Vector2(13.0f, 7.0f)); gs.getEngines().entityEngine().addEntity( m_controlsEntity, &gs.getManagedEntityList());*/ const float tableX = VisualSupport::positionXCenter( 0.5f, 0.5f, trans ).x() * 0.8f; const Vector2 posItemOne ( VisualSupport::positionXCenter( 0.28f, 0.0f, trans ).x(), VisualSupport::positionXCenter( 0.0f, 0.47f, trans ).y() ); const Vector2 posItemTwo = posItemOne - Vector2(0.0f, 1.2f); MenuItem it("start", "Start Game", posItemOne); gs.addMenuItem(it); //VisualSupport::place( it.TextVis, ) it = MenuItem("exit", "Exit", Vector2(posItemTwo)); gs.addMenuItem(it); gs.setCurrentItem(0); // generate all icons for the input devices DeviceList devList = gs.getEngines().inputEngine().availableInputDevices(); logging::Info() << "Setting up menu for " << devList.size() << " input devices"; const float maxTiles = trans.screenSizeInTiles().x(); const size_t maxDevices = gs.getEngines().inputEngine().maxInputDevices(); const float tilePerInputDev = maxTiles / float ( maxDevices); const float tileFreeSpace = tilePerInputDev * 0.5f; const float posYInputIcon = 2.5f; const float posYenableDisable = 1.1f; size_t curDevIndex = 0; if ( gs.getDeviceItems().size() == 0) { // add all available input devices, only done on the first execution for ( InputDevice const& iDev : devList ) { MenuState::DeviceItem item; // todo: enable always the first controller, if there is only one item.m_isEnabled = false; item.m_type = iDev.Type; item.m_ContainerId = iDev.Index; gs.addDeviceItem( item ); } } // setup graphics for the input items for ( auto & item : gs.getDeviceItems()) { const float thisBeginTile = tilePerInputDev * float ( curDevIndex) + tileFreeSpace; const Vector2 posInputIcon (thisBeginTile, posYInputIcon); const Vector2 posInputEnable(thisBeginTile, posYenableDisable); std::string iconActive; std::string iconPassive; std::string iconDisable; std::string iconEnable; if ( item.m_type == InputDevice::TypeEnum::Keyboard ) { iconActive = "keyboard"; iconPassive = "keyboard-passive"; iconDisable = "keyboard-disable"; iconEnable = "keyboard-enable"; } else if ( item.m_type == InputDevice::TypeEnum::Gamepad ) { //todo: check for ouya / pc and use controllers accordingly /* iconActive = "xbox-gamepad"; iconPassive = "xbox-gamepad-passive"; iconDisable = "xbox-gamepad-disable"; iconEnable = "xbox-gamepad-enable";*/ iconActive = "ouya-gamepad"; iconPassive = "ouya-gamepad-passive"; iconDisable = "ouya-gamepad-disable"; iconEnable = "ouya-gamepad-enable"; } else { logging::Fatal() << "This input type is not supported by the menu"; } item.m_Icon = fact.createFromTemplateName< SingleVisualEntity>(iconActive, posInputIcon); item.m_Icon->getActiveVisual().get().setIngame( trans, posInputIcon, false ); gs.getEngines().entityEngine().addEntity( item.m_Icon, &gs.getManagedEntityList()); item.m_IconPassive = fact.createFromTemplateName< SingleVisualEntity>(iconPassive, posInputIcon); item.m_IconPassive->getActiveVisual().get().setIngame( trans, posInputIcon, false ); gs.getEngines().entityEngine().addEntity( item.m_IconPassive, &gs.getManagedEntityList()); item.m_DisableText = fact.createFromTemplateName< SingleVisualEntity>(iconDisable, posInputEnable); item.m_DisableText->getActiveVisual().get().setIngame( trans, posInputEnable, false ); gs.getEngines().entityEngine().addEntity( item.m_DisableText, &gs.getManagedEntityList()); item.m_EnableText = fact.createFromTemplateName< SingleVisualEntity>(iconEnable, posInputEnable); item.m_EnableText->getActiveVisual().get().setIngame( trans, posInputEnable, false ); gs.getEngines().entityEngine().addEntity( item.m_EnableText, &gs.getManagedEntityList()); curDevIndex++; } gs.updateDevices(); } }); gs.slotDeactivateState.subscribe([&] ( MenuState & gs ) { // remove all the entities which might still be registered with the render system logging::Info() << "closing menu"; gs.getEngines().entityEngine().cleanManagedList(gs.getManagedEntityList(), gs.getEngines()); gs.getManagedEntityList().clear(); // entities have been cleaned via cleanManagedList // keep this for the next time we enter the menu //gs.m_deviceItems.clear(); // kill text visuals for (MenuItem & it : gs.getMenuItemList()) { gs.getEngines().renderEngine().removeTextVisual(it.TextVis); delete it.TextVis; } gs.getMenuItemList().clear(); if (m_gameOverVisual) { gs.getEngines().renderEngine().removeTextVisual(m_gameOverVisual); delete m_gameOverVisual; m_gameOverVisual = nullptr; } if (m_scoreVisual) { gs.getEngines().renderEngine().removeTextVisual(m_scoreVisual); delete m_scoreVisual; m_scoreVisual = nullptr; } }); gs.slotStep.subscribe([&] ( MenuState & gs, float deltaT ) { if ( m_delayedGameOver > 0.0f) { m_delayedGameOver -= deltaT; if ( m_delayedGameOver <= 0.0f ) { MenuItem it("restart", "Continue", Vector2( 4.0f, 4.0f)); gs.addMenuItem(it); /*it = MenuItem("exit", "Exit", Vector2( 4.0f, 3.0f)); gs.addMenuItem(it);*/ gs.setCurrentItem(0); } } }); }