Esempio n. 1
0
MenuState::MenuState(StateStack& stateStack, Context context, States::ID id)
	:
	State(stateStack, context, id),
	m_play_button(context.textures->getTexture(Textures::Button), context.fonts->getFont(Fonts::Main)),
	m_exit_button(context.textures->getTexture(Textures::Button), context.fonts->getFont(Fonts::Main)),
	m_background(*context.textures->getTexture(Textures::Titlescreen)),
	m_background_move(true),
	m_button_fade(false)
{
	// Play button
	m_play_button.setAction([this] ()
	{
		requestStackPop();
		requestStackPush(States::Game);
	});
	m_play_button.setText("Play");
	m_play_button.setPosition(1280/2, 720/2 + 40);

	// Exit button
	m_exit_button.setAction([this] ()
	{
		requestStackClear();
	});
	m_exit_button.setText("Exit");
	m_exit_button.setPosition(1280/2, 720/2 + 80);

	// Background thing
	m_background.setPosition(640 - m_background.getLocalBounds().width/2, 360 - m_background.getLocalBounds().height/2);

	context.mouse->setState(gui::Mouse::Neutral);
}
Esempio n. 2
0
//private
void MenuHighScoreState::buildMenu(const sf::Font& font)
{
    const float centreX = xy::DefaultSceneSize.x / 2.f;

    const auto& scores = getContext().appInstance.getScores();
    auto list = xy::UI::create<xy::UI::ScoreList>(font);
    list->setAlignment(xy::UI::Alignment::Centre);
    list->setPosition(centreX, 590.f);
    list->setList(scores);
    list->setIndex(getContext().appInstance.getLastScoreIndex());
    m_uiContainer.addControl(list);

    auto upScroll = xy::UI::create<xy::UI::Button>(font, m_textureResource.get("assets/images/ui/scroll_arrow_vertical.png"));
    upScroll->setAlignment(xy::UI::Alignment::Centre);
    upScroll->setPosition(1310, 470.f);
    upScroll->addCallback([list]()
    {
        list->scroll(list->getVerticalSpacing());
    });
    m_uiContainer.addControl(upScroll);

    auto downScroll = xy::UI::create<xy::UI::Button>(font, m_textureResource.get("assets/images/ui/scroll_arrow_vertical.png"));
    downScroll->setAlignment(xy::UI::Alignment::Centre);
    downScroll->setRotation(180.f);
    downScroll->setPosition(1310.f, 720.f);
    downScroll->addCallback([list]()
    {
        list->scroll(-list->getVerticalSpacing());
    });
    m_uiContainer.addControl(downScroll);
    
    auto button = xy::UI::create<xy::UI::Button>(font, m_textureResource.get("assets/images/ui/start_button.png"));
    button->setString("OK");
    button->setAlignment(xy::UI::Alignment::Centre);
    button->setPosition(centreX, 875.f);
    button->addCallback([this]()
    {
        auto msg = m_messageBus.post<xy::Message::UIEvent>(xy::Message::UIMessage);
        msg->type = xy::Message::UIEvent::MenuClosed;
        msg->value = 0.f;
        msg->stateID = (m_endGame) ? States::ID::HighScoresEnd : States::ID::HighScoresMenu;

        if (m_endGame)
        {
            requestStackClear();
            requestStackPush(States::ID::MenuBackground);
        }
        else
        {
            requestStackPop();
            requestStackPush(States::ID::MenuMain);
        }
        
    });
    m_uiContainer.addControl(button);
}
    bool GameFinishedState::handleEvent(const sf::Event &event)
    {
        if (event.type != sf::Event::KeyPressed) {
            return false;
        }

        requestStackClear();

        return false;
    }
Esempio n. 4
0
bool GameOverState::update(sf::Time dt){
	mElapsedTime += dt;

	if (mElapsedTime > sf::seconds(3)){
		requestStackClear();
		requestStackPush(States::Menu);
	}

	return false;
}
Esempio n. 5
0
void MyFirstState::createScene()
{
    //add the systems
    auto& messageBus = getContext().appInstance.getMessageBus();
    m_scene.addSystem<xy::TextSystem>(messageBus);
    m_scene.addSystem<xy::UISystem>(messageBus);
    m_scene.addSystem<xy::RenderSystem>(messageBus);

    m_font.loadFromFile("ProggyClean.ttf");

    auto entity = m_scene.createEntity();
    entity.addComponent<xy::Transform>().setPosition(200.f, 200.f);
    entity.addComponent<xy::Text>(m_font).setString("xygine tutorial");
    entity.getComponent<xy::Text>().setCharacterSize(60);
    entity.addComponent<xy::Drawable>();

    entity = m_scene.createEntity();
    entity.addComponent<xy::Transform>().setPosition(200.f, 300.f);
    entity.addComponent<xy::Text>(m_font).setString("Play");
    entity.getComponent<xy::Text>().setCharacterSize(40);
    entity.addComponent<xy::Drawable>();

    entity.addComponent<xy::UIHitBox>().area = xy::Text::getLocalBounds(entity);

    auto callbackID = m_scene.getSystem<xy::UISystem>().addMouseButtonCallback(
        [&](xy::Entity, sf::Uint64 flags)
        {
            if(flags & xy::UISystem::LeftMouse)
            {
                requestStackClear();
                requestStackPush(States::GameState);
            }
        });
    entity.getComponent<xy::UIHitBox>().callbacks[xy::UIHitBox::MouseUp] = callbackID;

    entity = m_scene.createEntity();
    entity.addComponent<xy::Transform>().setPosition(200.f, 360.f);
    entity.addComponent<xy::Text>(m_font).setString("Quit");
    entity.getComponent<xy::Text>().setCharacterSize(40);
    entity.addComponent<xy::Drawable>();

    entity.addComponent<xy::UIHitBox>().area = xy::Text::getLocalBounds(entity);

    callbackID = m_scene.getSystem<xy::UISystem>().addMouseButtonCallback(
        [&](xy::Entity, sf::Uint64 flags)
        {
            if(flags & xy::UISystem::LeftMouse)
            {
                getContext().appInstance.quit();
            }
        });
    entity.getComponent<xy::UIHitBox>().callbacks[xy::UIHitBox::MouseUp] = callbackID;

}
Esempio n. 6
0
//private
void MenuPauseState::buildMenu(const sf::Font& font)
{
    const float centreX = xy::DefaultSceneSize.x / 2.f;

    auto label = xy::UI::create<xy::UI::Label>(font);
    label->setAlignment(xy::UI::Alignment::Centre);
    label->setPosition(centreX, 300.f);
    label->setString("PAUSED");
    m_uiContainer.addControl(label);
    
    auto button = xy::UI::create<xy::UI::Button>(font, m_textureResource.get("assets/images/ui/start_button.png"));
    button->setString("Continue");
    button->setAlignment(xy::UI::Alignment::Centre);
    button->setPosition(centreX, 425.f);
    button->addCallback([this]()
    {
        close();
    });
    m_uiContainer.addControl(button);

    button = xy::UI::create<xy::UI::Button>(font, m_textureResource.get("assets/images/ui/start_button.png"));
    button->setString("Options");
    button->setAlignment(xy::UI::Alignment::Centre);
    button->setPosition(centreX, 525.f);
    button->addCallback([this]()
    {
        close();
        requestStackPush(States::ID::PausedOptions);
    });
    m_uiContainer.addControl(button);

    button = xy::UI::create<xy::UI::Button>(font, m_textureResource.get("assets/images/ui/start_button.png"));
    button->setString("Quit to Main");
    button->setAlignment(xy::UI::Alignment::Centre);
    button->setPosition(centreX, 625.f);
    button->addCallback([this]()
    {
        close();
        requestStackClear();
        requestStackPush(States::ID::MenuBackground);
    });
    m_uiContainer.addControl(button);

    button = xy::UI::create<xy::UI::Button>(font, m_textureResource.get("assets/images/ui/start_button.png"));
    button->setString("Exit to Desktop");
    button->setAlignment(xy::UI::Alignment::Centre);
    button->setPosition(centreX, 725.f);
    button->addCallback([this]()
    {
        xy::App::quit();
    });
    m_uiContainer.addControl(button);
}
Esempio n. 7
0
bool MenuState::handleEvents(const sf::Event& event)
{
	if (!m_background_move && !m_button_fade)
	{
		m_play_button.handleEvent(event);
		m_exit_button.handleEvent(event);
	}
	if (event.KeyPressed)
	{
		if (event.key.code == sf::Keyboard::Escape)
			requestStackClear();
	}
	return false;
}
MainMenu::MainMenu( StateStack& stack, Context context )
	: State( stack, context )
	, m_container()
{
	std::cout << "MainMenu State Entered..." << std::endl;

	getContext().fonts -> loadResource( Font::Arcade, "Resources/Fonts/arcade.ttf" );

	auto play = std::make_shared< GUI::Button >( getContext() );
	play -> setPosition( getContext().window -> getView().getSize() / 2.0f );
	play -> setText( "Play" );
	play -> setCharacterSize( 40 );
	play -> setCallback( [ this ] () 
	{
		requestStackPop();
		requestStackPush( States::Game );
	});

	auto options = std::make_shared< GUI::Button >( getContext() );
	options -> setPosition( play -> getPosition().x, play -> getPosition().y + play -> getCharacterSize() );
	options -> setText( "Options" );
	options -> setCharacterSize( 40 );

	auto credits = std::make_shared< GUI::Button >( getContext() );
	credits -> setPosition( options -> getPosition().x, options -> getPosition().y + options -> getCharacterSize() );
	credits -> setText( "Credits" );
	credits -> setCharacterSize( 40 );

	auto exit = std::make_shared< GUI::Button >( getContext() );
	exit -> setPosition( credits -> getPosition().x, credits -> getPosition().y + credits -> getCharacterSize() );
	exit -> setText( "Exit" );
	exit -> setCharacterSize( 40 );
	exit -> setCallback( [ this ] () 
	{
		requestStackClear();
		getContext().window -> close();
	});

	m_container.pack( play );
	m_container.pack( options );
	m_container.pack( credits );
	m_container.pack( exit );
}
bool PauseState::handleEvent(const sf::Event& event)
{
	if (event.type != sf::Event::KeyPressed)
		return false;

	if (event.key.code == sf::Keyboard::Escape)
	{
		// Escape pressed, remove itself to return to the game
		requestStackPop();
	}

	if (event.key.code == sf::Keyboard::BackSpace)
	{
		// Escape pressed, remove itself to return to the game
		requestStackClear();
		requestStackPush(States::Menu);
	}

	return false;
}
Esempio n. 10
0
bool PauseState::handleEvent(const sf::Event& event)
{

    if (event.type != sf::Event::KeyPressed) //sinon, il faut rester appuyé constament
		return false;

    if(event.key.code == sf::Keyboard::Escape)
    {
        //Escape is pressed, go back to previous state(game)
        requestStackPop();
    }

    if(event.key.code == sf::Keyboard::BackSpace)
    {
        //Escape pressed, clear all the things, return to menu
        requestStackClear();
        requestStackPush(States::Menu);
    }

    return false;
}
Esempio n. 11
0
bool TitleState::processEvent(const cpp3ds::Event& event)
{
	// If any key is pressed, trigger the next screen
	if (event.type == cpp3ds::Event::KeyPressed)
	{
		if (event.key.code == cpp3ds::Keyboard::Select) {
			requestStackClear();
			return true;
		}

		if (cpp3ds::Service::isEnabled(cpp3ds::NETWORK)) {
			requestStackPop();
			requestStackPush(States::ServerSelect);
		} else {
			getContext().transition.message = _("No internet connection.\nConnect to internet and retry.");
			requestStackPush(States::TransitionMessage);
		}
	}

	return true;
}
Esempio n. 12
0
bool PauseState::handleEvent(const sf::Event &event)
{
    //CommandQueue& commands = mWorld.getCommandQueue();

    // If ESC key is pressed, we leave
    if (event.type == sf::Event::KeyReleased)
    {
        switch(event.key.code)
        {
            case sf::Keyboard::Escape:
                requestStackPop();
                break;

            case sf::Keyboard::Q:
                requestStackClear();
                break;

            default:break;
        }
    }

    return false;
}
Esempio n. 13
0
void SyncState::sync()
{
	m_timer.restart();

	// Set up directory structure, if necessary
	std::string tmpPath = cpp3ds::FileSystem::getFilePath("sdmc:/3ds/BrewMan/tmp");
	std::string cachePath = cpp3ds::FileSystem::getFilePath("sdmc:/3ds/BrewMan/cache");
	std::string installedPath = cpp3ds::FileSystem::getFilePath("sdmc:/3ds/BrewMan/installed");
	if (pathExists(tmpPath.c_str(), false))
		removeDirectory(tmpPath.c_str());
	mkdir(tmpPath.c_str(), 0777);
	if (!pathExists(cachePath.c_str(), false))
		mkdir(cachePath.c_str(), 0777);
	if (!pathExists(installedPath.c_str(), false))
		mkdir(installedPath.c_str(), 0777);

	// If auto-dated, boot into newest BrewMan
	if (autoUpdate())
	{
		char buf[256];
		size_t len;
		FILE *src = fopen("sdmc:/3ds/BrewMan/tmp/update.3dsx", "rb");
		FILE *dst = fopen("sdmc:/3ds/BrewMan/tmp/update-copy.3dsx", "wb");
		while ((len = fread(buf, 1, sizeof(buf), src)) > 0)
			fwrite(buf, 1, sizeof(buf), dst);
		fclose(src);
		fclose(dst);

		bootApp("/3ds/BrewMan/tmp/update.3dsx", "");
		requestStackClear();
		return;
	}

	git_repository *repo = NULL;
	const char *repoUrl = "git://github.com/Repo3DS/ideal-enigma.git";
	const std::string path = cpp3ds::FileSystem::getFilePath(REPO_DIR);

	git_clone_options opts = GIT_CLONE_OPTIONS_INIT;

	setStatus("Fetching git repo...");

	int error = git_clone(&repo, repoUrl, path.c_str(), NULL);

	if (error < 0)
	{
		if (error == GIT_EEXISTS) {
			error = git_repository_open(&repo, path.c_str());
			if (error == 0) {
				git_remote *remote;
				error = git_remote_lookup(&remote, repo, "origin");
				if (error == 0) {
					error = git_remote_fetch(remote, NULL, NULL, "pull");
					if (error == 0)
					{
						git_annotated_commit *our_head, *their_heads[1];
						if (git_repository_fetchhead_foreach(repo, find_master, NULL) == 0)
						{
							git_annotated_commit_from_fetchhead(&their_heads[0], repo, "master", repoUrl, &m_git_oid);

							git_merge_analysis_t analysis;
							git_merge_preference_t prefs;
							git_merge_analysis(&analysis, &prefs, repo, (const git_annotated_commit**)their_heads, 1);

							if (analysis & GIT_MERGE_ANALYSIS_UP_TO_DATE)
								printf("up to date\n");
							else if (analysis & GIT_MERGE_ANALYSIS_FASTFORWARD)
							{
								printf("fast-forwarding\n");
//								if (git_merge(repo, (const git_annotated_commit **)their_heads, 1, NULL, NULL) == 0) {

								git_reference *ref;
								git_reference *newref;
								if (git_reference_lookup(&ref, repo, "refs/heads/master") == 0)
									git_reference_set_target(&newref, ref, &m_git_oid, "BrewMan pull: Fast-forward");

								git_reset_from_annotated(repo, their_heads[0], GIT_RESET_HARD, NULL);

								git_reference_free(ref);
								git_repository_state_cleanup(repo);
							}

							git_annotated_commit_free(their_heads[0]);
						}
					}
				}
			}
			git_repository_free(repo);
			const git_error *e = giterr_last();
			if (e) {
				setStatus(_("Error %d/%d\n%s\nCloning repo again...", error, e->klass, e->message));
				if (!removeDirectory(path.c_str())) {
					cpp3ds::sleep(cpp3ds::seconds(2.f));
					sync();
				} else {
					setStatus("Repo failure. Please report this error.\nAnd delete /3ds/BrewMan/repo/ and try again.");
				}
				return;
			}
		}
		const git_error *e = giterr_last();
		if (e) {
			setStatus(_("Error %d/%d: %s", error, e->klass, e->message));
			return;
		}
	}

	setStatus("Everything up-to-date!");

	// Give the Title animation time to finish if necessary
	while (m_timer.getElapsedTime() < cpp3ds::seconds(5.f))
		cpp3ds::sleep(cpp3ds::milliseconds(50));

	requestStackClear();
	requestStackPush(States::Browse);
}
Esempio n. 14
0
//private
void MenuWeaponState::buildMenu(const sf::Font& font)
{
    const float centreX = xy::DefaultSceneSize.x / 2.f;

    auto label = xy::UI::create<xy::UI::Label>(font);
    label->setString("Select Secondary Weapon");
    label->setAlignment(xy::UI::Alignment::Centre);
    label->setPosition(centreX, 86.f);
    label->setCharacterSize(40u);
    m_uiContainer.addControl(label);
   
    label = xy::UI::create<xy::UI::Label>(font);
    label->setString("Rank " + std::to_string(m_profile.getRank()) + ": " +std::to_string(m_profile.getXP()) + "XP");
    label->setAlignment(xy::UI::Alignment::Centre);
    label->setPosition(centreX, 160.f);
    m_uiContainer.addControl(label);

    //weapon selector
    auto weaponSelect = xy::UI::create<lm::ui::WeaponSelect>(m_textureResource.get("assets/images/ui/weapon_select.png"));
    weaponSelect->setAlignment(xy::UI::Alignment::Centre);
    weaponSelect->setPosition(centreX, 420.f);
    
    sf::Int32 count = AchievementID::Rank50 - AchievementID::Rank10;
    sf::Uint8 flags = 0xff;
    for (auto i = 0; i < count; ++i)
    {
        if (m_profile.hasAchievement(static_cast<AchievementID>(AchievementID::Rank10 + i)))
        {
            flags &= ~(1 << i);
        }
    }
    weaponSelect->setLockedFlags(flags);
    

    m_uiContainer.addControl(weaponSelect);

    auto button = xy::UI::create<xy::UI::Button>(font, m_textureResource.get("assets/images/ui/start_button.png"));
    button->setString("Back");
    button->setAlignment(xy::UI::Alignment::Centre);
    button->setPosition(600.f, 975.f);
    button->addCallback([this]()
    {
        auto msg = m_messageBus.post<xy::Message::UIEvent>(xy::Message::UIMessage);
        msg->type = xy::Message::UIEvent::MenuClosed;
        msg->value = 0.f;
        msg->stateID = States::ID::MenuWeapon;

        requestStackPop();
        requestStackPush(States::ID::MenuMain);
    });
    m_uiContainer.addControl(button);

    button = xy::UI::create<xy::UI::Button>(font, m_textureResource.get("assets/images/ui/start_button.png"));
    button->setString("Begin!");
    button->setAlignment(xy::UI::Alignment::Centre);
    button->setPosition(1320.f, 975.f);
    button->addCallback([this, weaponSelect, flags]()
    {
        //set the currently selected weapon
        lm::SpecialWeapon weapon = lm::SpecialWeapon::None;
        auto idx = weaponSelect->getSelectedIndex();
        if ((flags & (1 << idx)) == 0)
        {
            weapon = static_cast<lm::SpecialWeapon>(idx + 1);
        }

        m_profile.setSpecialWeapon(weapon);
        
        //and raise message to say we're done
        auto msg = m_messageBus.post<xy::Message::UIEvent>(xy::Message::UIMessage);
        msg->type = xy::Message::UIEvent::MenuClosed;
        msg->value = 0.f;
        msg->stateID = States::ID::MenuWeapon;

        requestStackClear();
        requestStackPush(States::ID::SinglePlayer);
    });
    m_uiContainer.addControl(button);
}