Esempio n. 1
0
	void HexagonGame::newGame(const string& mId, bool mFirstPlay, float mDifficultyMult)
	{
		initFlashEffect();

		firstPlay = mFirstPlay;
		setLevelData(assets.getLevelData(mId), mFirstPlay);
		difficultyMult = mDifficultyMult;

		// Audio cleanup
		assets.stopSounds(); stopLevelMusic();
		assets.playSound("go.ogg"); playLevelMusic();

		if(Config::getMusicSpeedDMSync())
		{
			auto current(assets.getMusicPlayer().getCurrent());
			if(current != nullptr) current->setPitch(pow(difficultyMult, 0.12f));
		}

		// Events cleanup
		messageText.setString("");
		eventTimeline.clear(); eventTimeline.reset();
		messageTimeline.clear(); messageTimeline.reset();

		// Manager cleanup
		manager.clear();
		factory.createPlayer();

		// Timeline cleanup
		timeline.clear(); timeline.reset();
		effectTimelineManager.clear();
		mustChangeSides = false;

		// FPSWatcher reset
		fpsWatcher.reset();
		if(Config::getOfficial()) fpsWatcher.enable();

		// LUA context and game status cleanup
		status = HexagonGameStatus{};
		if(!mFirstPlay) runLuaFunction<void>("onUnload");
		lua = Lua::LuaContext{};
		initLua();
		runLuaFile(levelData->luaScriptPath);
		runLuaFunction<void>("onInit");
		runLuaFunction<void>("onLoad");
		restartId = mId;
		restartFirstTime = false;
		setSides(levelStatus.sides);

		// Reset zoom
		overlayCamera.setView({{Config::getWidth() / 2.f, Config::getHeight() / 2.f}, Vec2f(Config::getWidth(), Config::getHeight())});
		backgroundCamera.setView({ssvs::zeroVec2f, {Config::getWidth() * Config::getZoomFactor(), Config::getHeight() * Config::getZoomFactor()}});
		backgroundCamera.setRotation(0);

		// 3D Cameras cleanup
		depthCameras.clear();
		auto depth(styleData._3dDepth);
		if(depth > Config::get3DMaxDepth()) depth = Config::get3DMaxDepth();
		for(auto i(0u); i < depth; ++i) depthCameras.push_back({window, {}});
	}
Esempio n. 2
0
void HexagonGame::death()
{
    playSound("death");
    playSound("game_over");

    hasDied = true;
    stopLevelMusic();
    checkAndSaveScore();
}
Esempio n. 3
0
	void HexagonGame::death()
	{
		playSound("death.ogg");
		playSound("gameOver.ogg");

		if(getInvincible()) return;

		status.flashEffect = 255;
		shakeCamera(effectTimelineManager, overlayCamera);
		shakeCamera(effectTimelineManager, backgroundCamera);
		for(auto& depthCamera : depthCameras) shakeCamera(effectTimelineManager, depthCamera);
		status.hasDied = true;
		stopLevelMusic();
		checkAndSaveScore();

		if(getAutoRestart()) status.mustRestart = true;
	}
Esempio n. 4
0
	void HexagonGame::death(bool mForce)
	{
		fpsWatcher.disable();
		assets.playSound("death.ogg", SoundPlayer::Mode::Abort);

		if(!mForce && (Config::getInvincible() || levelStatus.tutorialMode)) return;
		assets.playSound("gameOver.ogg", SoundPlayer::Mode::Abort);

		if(!assets.pIsLocal() && Config::isEligibleForScore()) { Online::trySendDeath(); }

		status.flashEffect = 255;
		shakeCamera(effectTimelineManager, overlayCamera);
		shakeCamera(effectTimelineManager, backgroundCamera);
		for(auto& depthCamera : depthCameras) shakeCamera(effectTimelineManager, depthCamera);
		status.hasDied = true;
		stopLevelMusic();
		checkAndSaveScore();

		if(Config::getAutoRestart()) status.mustRestart = true;
	}
Esempio n. 5
0
void HexagonGame::newGame(string mId, bool mFirstPlay)
{
    clearMessages();

    setLevelData(getLevelData(mId), mFirstPlay);

    stopAllSounds();
    playSound("play");

    pm->resetAdj();

    stopLevelMusic();
    playLevelMusic();

    rotationDirection = getRnd(0, 100) > 50 ? true : false;

    scripts.clear();

    timeStop = 0;
    randomSideChangesEnabled = true;
    incrementEnabled = true;
    maxPulse = 85;
    minPulse = 75;
    pulseSpeedBackwards = 1;
    pulseSpeed = 1;

    hasDied = false;
    mustRestart = false;
    currentTime = 0;
    incrementTime = 0;
    setSides(levelData.getSides());
    radius = minPulse;

    manager.clear();
    createPlayer(manager, this, centerPos);

    scriptsTimeline = Timeline{};
    messagesTimeline = Timeline{};
    timeline = Timeline{};
}
Esempio n. 6
0
	void HexagonGame::newGame(const string& mId, bool mFirstPlay, float mDifficultyMult)
	{
		firstPlay = mFirstPlay;
		setLevelData(getLevelData(mId), mFirstPlay);
		difficultyMult = mDifficultyMult;

		// Audio cleanup
		stopAllSounds();
		playSound("go.ogg");
		stopLevelMusic();
		playLevelMusic();

		// Events cleanup
		clearMessage();

		for(auto eventPtr : eventPtrs) delete eventPtr;
		eventPtrs.clear();

		while(!eventPtrQueue.empty()) { delete eventPtrQueue.front(); eventPtrQueue.pop(); }
		eventPtrQueue = queue<EventData*>{};

		// Game status cleanup
		status = HexagonGameStatus{};
		restartId = mId;
		restartFirstTime = false;
		setSides(levelData.getSides());

		// Manager cleanup
		manager.clear();
		factory.createPlayer();

		// Timeline cleanup
		timeline.clear(); timeline.reset();
		messageTimeline.clear(); messageTimeline.reset();
		effectTimelineManager.clear();

		// FPSWatcher reset
		fpsWatcher.reset();
		if(getOfficial()) fpsWatcher.enable();

		// LUA context cleanup
		if(!mFirstPlay) runLuaFunction<void>("onUnload");
		lua = Lua::LuaContext{};
		initLua();
		runLuaFile(levelData.getValueString("lua_file"));
		runLuaFunction<void>("onLoad");

		// Random rotation direction
		if(getRnd(0, 100) > 50) setRotationSpeed(getRotationSpeed() * -1);

		// Reset zoom
		overlayCamera.setView({{getWidth() / 2.f, getHeight() / 2.f}, sf::Vector2f(getWidth(), getHeight())});
		backgroundCamera.setView({{0, 0}, {getWidth() * getZoomFactor(), getHeight() * getZoomFactor()}});
		backgroundCamera.setRotation(0);

		// 3D Cameras cleanup
		depthCameras.clear();
		unsigned int depth{styleData.get3DDepth()};
		if(depth > get3DMaxDepth()) depth = get3DMaxDepth();
		for(unsigned int i{0}; i < depth; ++i) depthCameras.push_back({window, {}});
	}
Esempio n. 7
0
void HexagonGame::executeEvents(Json::Value& mRoot, float mTime)
{
    for (Json::Value& eventRoot : mRoot)
    {
        if(eventRoot["time"].asFloat() >  mTime) continue;
        if(eventRoot["executed"].asBool()) continue;
        eventRoot["executed"] = true;
        string type{eventRoot["type"].asString()};
        float duration{eventRoot["duration"].asFloat()};
        string valueName{eventRoot["value_name"].asString()};
        float value{eventRoot["value"].asFloat()};
        string message{eventRoot["message"].asString()};
        string id{eventRoot["id"].asString()};

        if 		(type == "level_change")			changeLevel(id);
        else if (type == "menu") 					goToMenu();
        else if (type == "message_add")				{
            if(getShowMessages()) addMessage(message, duration);
        }
        else if (type == "message_clear") 			clearMessages();
        else if (type == "time_stop")				timeStop = duration;
        else if (type == "timeline_wait") 			timeline.add(new Wait(duration));
        else if (type == "timeline_clear") 			clearAndResetTimeline(timeline);
        else if (type == "value_float_set") 		levelData.setValueFloat(valueName, value);
        else if (type == "value_float_add") 		levelData.setValueFloat(valueName, levelData.getValueFloat(valueName) + value);
        else if (type == "value_float_subtract") 	levelData.setValueFloat(valueName, levelData.getValueFloat(valueName) - value);
        else if (type == "value_float_multiply") 	levelData.setValueFloat(valueName, levelData.getValueFloat(valueName) * value);
        else if (type == "value_float_divide") 		levelData.setValueFloat(valueName, levelData.getValueFloat(valueName) / value);
        else if (type == "value_int_set") 			levelData.setValueInt(valueName, value);
        else if (type == "value_int_add") 			levelData.setValueInt(valueName, levelData.getValueFloat(valueName) + value);
        else if (type == "value_int_subtract")		levelData.setValueInt(valueName, levelData.getValueFloat(valueName) - value);
        else if (type == "value_int_multiply") 		levelData.setValueInt(valueName, levelData.getValueFloat(valueName) * value);
        else if (type == "value_int_divide") 		levelData.setValueInt(valueName, levelData.getValueFloat(valueName) / value);
        else if (type == "music_set")				{
            if(getChangeMusic()) {
                stopLevelMusic();
                musicData = getMusicData(id);
                musicData.playRandomSegment(musicPtr);
            }
        }
        else if (type == "music_set_segment")		{
            if(getChangeMusic()) {
                stopLevelMusic();
                musicData = getMusicData(id);
                musicData.playSegment(musicPtr, eventRoot["segment_index"].asInt());
            }
        }
        else if (type == "music_set_seconds")		{
            if(getChangeMusic()) {
                stopLevelMusic();
                musicData = getMusicData(id);
                musicData.playSeconds(musicPtr, eventRoot["seconds"].asInt());
            }
        }
        else if (type == "style_set")				{
            if(getChangeStyles()) styleData = getStyleData(id);
        }
        else if (type == "side_changing_stop")		randomSideChangesEnabled = false;
        else if (type == "side_changing_start")		randomSideChangesEnabled = true;
        else if (type == "increment_stop")			incrementEnabled = false;
        else if (type == "increment_start")			incrementEnabled = true;
        else if (type == "pulse_max_set")			maxPulse = value;
        else if (type == "pulse_min_set")			minPulse = value;
        else if (type == "pulse_speed_set")			pulseSpeed = value;
        else if (type == "pulse_speed_b_set")		pulseSpeedBackwards = value;
        else if (type == "script_exec")				scripts.push_back(getScriptData(id, this));
        else if (type == "script_queue")			queueScript(getScriptData(id, this));
        else										log("unknown script command: " + type);
    }
}
Esempio n. 8
0
    void HexagonGame::initLua()
    {
        // Utils
        lua.writeVariable("u_log", [=](string mLog)
            {
                lo("lua") << mLog << "\n";
            });
        lua.writeVariable("u_execScript", [=](string mName)
            {
                runLuaFile(levelData->packPath + "Scripts/" + mName);
            });
        lua.writeVariable("u_playSound", [=](string mId)
            {
                assets.playSound(mId);
            });
        lua.writeVariable("u_setMusic", [=](string mId)
            {
                musicData = assets.getMusicData(mId);
                musicData.firstPlay = true;
                stopLevelMusic();
                playLevelMusic();
            });
        lua.writeVariable("u_isKeyPressed", [=](int mKey)
            {
                return window.getInputState()[KKey(mKey)];
            });
        lua.writeVariable("u_isFastSpinning", [=]
            {
                return status.fastSpin > 0;
            });
        lua.writeVariable("u_forceIncrement", [=]
            {
                incrementDifficulty();
            });
        lua.writeVariable("u_kill", [=]
            {
                timeline.append<Do>([=]
                    {
                        death(true);
                    });
            });
        lua.writeVariable("u_eventKill", [=]
            {
                eventTimeline.append<Do>([=]
                    {
                        death(true);
                    });
            });
        lua.writeVariable("u_getDifficultyMult", [=]
            {
                return difficultyMult;
            });
        lua.writeVariable("u_getSpeedMultDM", [=]
            {
                return getSpeedMultDM();
            });
        lua.writeVariable("u_getDelayMultDM", [=]
            {
                return getDelayMultDM();
            });

        // Messages
        lua.writeVariable("m_messageAdd", [=](string mMsg, float mDuration)
            {
                eventTimeline.append<Do>([=]
                    {
                        if(firstPlay && Config::getShowMessages())
                            addMessage(mMsg, mDuration);
                    });
            });
        lua.writeVariable("m_messageAddImportant",
            [=](string mMsg, float mDuration)
            {
                eventTimeline.append<Do>([=]
                    {
                        if(Config::getShowMessages())
                            addMessage(mMsg, mDuration);
                    });
            });

        // Main timeline control
        lua.writeVariable("t_wait", [=](float mDuration)
            {
                timeline.append<Wait>(mDuration);
            });
        lua.writeVariable("t_waitS", [=](float mDuration)
            {
                timeline.append<Wait>(ssvu::getSecondsToFT(mDuration));
            });
        lua.writeVariable("t_waitUntilS", [=](float mDuration)
            {
                timeline.append<Wait>(10);
                timeline.append<Do>([=]
                    {
                        if(status.currentTime < mDuration)
                            timeline.jumpTo(timeline.getCurrentIndex() - 2);
                    });
            });

        // Event timeline control
        lua.writeVariable("e_eventStopTime", [=](float mDuration)
            {
                eventTimeline.append<Do>([=]
                    {
                        status.timeStop = mDuration;
                    });
            });
        lua.writeVariable("e_eventStopTimeS", [=](float mDuration)
            {
                eventTimeline.append<Do>([=]
                    {
                        status.timeStop = ssvu::getSecondsToFT(mDuration);
                    });
            });
        lua.writeVariable("e_eventWait", [=](float mDuration)
            {
                eventTimeline.append<Wait>(mDuration);
            });
        lua.writeVariable("e_eventWaitS", [=](float mDuration)
            {
                eventTimeline.append<Wait>(ssvu::getSecondsToFT(mDuration));
            });
        lua.writeVariable("e_eventWaitUntilS", [=](float mDuration)
            {
                eventTimeline.append<Wait>(10);
                eventTimeline.append<Do>([=]
                    {
                        if(status.currentTime < mDuration)
                            eventTimeline.jumpTo(
                                eventTimeline.getCurrentIndex() - 2);
                    });
            });

        // Level control
        lua.writeVariable("l_setSpeedMult", [=](float mValue)
            {
                levelStatus.speedMult = mValue;
            });
        lua.writeVariable("l_setSpeedInc", [=](float mValue)
            {
                levelStatus.speedInc = mValue;
            });
        lua.writeVariable("l_setRotationSpeed", [=](float mValue)
            {
                levelStatus.rotationSpeed = mValue;
            });
        lua.writeVariable("l_setRotationSpeedMax", [=](float mValue)
            {
                levelStatus.rotationSpeedMax = mValue;
            });
        lua.writeVariable("l_setRotationSpeedInc", [=](float mValue)
            {
                levelStatus.rotationSpeedInc = mValue;
            });
        lua.writeVariable("l_setDelayMult", [=](float mValue)
            {
                levelStatus.delayMult = mValue;
            });
        lua.writeVariable("l_setDelayInc", [=](float mValue)
            {
                levelStatus.delayInc = mValue;
            });
        lua.writeVariable("l_setFastSpin", [=](float mValue)
            {
                levelStatus.fastSpin = mValue;
            });
        lua.writeVariable("l_setSides", [=](unsigned int mValue)
            {
                levelStatus.sides = mValue;
            });
        lua.writeVariable("l_setSidesMin", [=](unsigned int mValue)
            {
                levelStatus.sidesMin = mValue;
            });
        lua.writeVariable("l_setSidesMax", [=](unsigned int mValue)
            {
                levelStatus.sidesMax = mValue;
            });
        lua.writeVariable("l_setIncTime", [=](float mValue)
            {
                levelStatus.incTime = mValue;
            });
        lua.writeVariable("l_setPulseMin", [=](float mValue)
            {
                levelStatus.pulseMin = mValue;
            });
        lua.writeVariable("l_setPulseMax", [=](float mValue)
            {
                levelStatus.pulseMax = mValue;
            });
        lua.writeVariable("l_setPulseSpeed", [=](float mValue)
            {
                levelStatus.pulseSpeed = mValue;
            });
        lua.writeVariable("l_setPulseSpeedR", [=](float mValue)
            {
                levelStatus.pulseSpeedR = mValue;
            });
        lua.writeVariable("l_setPulseDelayMax", [=](float mValue)
            {
                levelStatus.pulseDelayMax = mValue;
            });
        lua.writeVariable("l_setBeatPulseMax", [=](float mValue)
            {
                levelStatus.beatPulseMax = mValue;
            });
        lua.writeVariable("l_setBeatPulseDelayMax", [=](float mValue)
            {
                levelStatus.beatPulseDelayMax = mValue;
            });
        lua.writeVariable("l_setWallSkewLeft", [=](float mValue)
            {
                levelStatus.wallSkewLeft = mValue;
            });
        lua.writeVariable("l_setWallSkewRight", [=](float mValue)
            {
                levelStatus.wallSkewRight = mValue;
            });
        lua.writeVariable("l_setWallAngleLeft", [=](float mValue)
            {
                levelStatus.wallAngleLeft = mValue;
            });
        lua.writeVariable("l_setWallAngleRight", [=](float mValue)
            {
                levelStatus.wallAngleRight = mValue;
            });
        lua.writeVariable("l_setRadiusMin", [=](float mValue)
            {
                levelStatus.radiusMin = mValue;
            });
        lua.writeVariable("l_setSwapEnabled", [=](bool mValue)
            {
                levelStatus.swapEnabled = mValue;
            });
        lua.writeVariable("l_setTutorialMode", [=](bool mValue)
            {
                levelStatus.tutorialMode = mValue;
            });
        lua.writeVariable("l_setIncEnabled", [=](bool mValue)
            {
                levelStatus.incEnabled = mValue;
            });
        lua.writeVariable("l_setMaxInc", [=](SizeT mValue)
            {
                levelStatus.maxIncrements = mValue;
            });
        lua.writeVariable("l_addTracked", [=](string mVar, string mName)
            {
                levelStatus.trackedVariables.emplace_back(mVar, mName);
            });
        lua.writeVariable("l_enableRndSideChanges", [=](bool mValue)
            {
                levelStatus.rndSideChangesEnabled = mValue;
            });
        lua.writeVariable("l_getRotationSpeed", [=]
            {
                return levelStatus.rotationSpeed;
            });
        lua.writeVariable("l_setRotation", [=](float mValue)
            {
                backgroundCamera.setRotation(mValue);
            });
        lua.writeVariable("l_getRotation", [=]
            {
                return backgroundCamera.getRotation();
            });
        lua.writeVariable("l_getSides", [=]
            {
                return levelStatus.sides;
            });
        lua.writeVariable("l_getSpeedMult", [=]
            {
                return levelStatus.speedMult;
            });
        lua.writeVariable("l_getDelayMult", [=]
            {
                return levelStatus.delayMult;
            });
        lua.writeVariable("l_getMaxInc", [=]
            {
                return levelStatus.maxIncrements;
            });
        lua.writeVariable("l_getLevelTime", [=]
            {
                return (float)status.currentTime;
            });
        lua.writeVariable("l_getOfficial", [=]
            {
                return Config::getOfficial();
            });
        // TODO: test and consider re-enabling
        /*
        lua.writeVariable("l_setLevel", [=](string mId)
            {
                setLevelData(assets.getLevelData(mId), true);
                stopLevelMusic();
                playLevelMusic();
            });
        */

        // Style control
        lua.writeVariable("s_setPulseInc", [=](float mValue)
            {
                styleData.pulseIncrement = mValue;
            });
        lua.writeVariable("s_setHueInc", [=](float mValue)
            {
                styleData.hueIncrement = mValue;
            });
        lua.writeVariable("s_getHueInc", [=]
            {
                return styleData.hueIncrement;
            });
        lua.writeVariable("s_setCameraShake", [=](int mValue)
            {
                levelStatus.cameraShake = mValue;
            });
        lua.writeVariable("s_getCameraShake", [=]
            {
                return levelStatus.cameraShake;
            });
        lua.writeVariable("s_setStyle", [=](string mId)
            {
                styleData = assets.getStyleData(mId);
            });

        // Wall creation
        lua.writeVariable("w_wall", [=](int mSide, float mThickness)
            {
                timeline.append<Do>([=]
                    {
                        factory.createWall(
                            mSide, mThickness, {getSpeedMultDM()});
                    });
            });
        lua.writeVariable("w_wallAdj",
            [=](int mSide, float mThickness, float mSpeedAdj)
            {
                timeline.append<Do>([=]
                    {
                        factory.createWall(
                            mSide, mThickness, mSpeedAdj * getSpeedMultDM());
                    });
            });
        lua.writeVariable("w_wallAcc", [=](int mSide, float mThickness,
                                           float mSpeedAdj, float mAcceleration,
                                           float mMinSpeed, float mMaxSpeed)
            {
                timeline.append<Do>([=]
                    {
                        factory.createWall(mSide, mThickness,
                            {mSpeedAdj * getSpeedMultDM(), mAcceleration,
                                mMinSpeed * getSpeedMultDM(),
                                mMaxSpeed * getSpeedMultDM()});
                    });
            });
        lua.writeVariable(
            "w_wallHModSpeedData",
            [=](float mHMod, int mSide, float mThickness, float mSAdj,
                float mSAcc, float mSMin, float mSMax, bool mSPingPong)
            {
                timeline.append<Do>([=]
                    {
                        factory.createWall(mSide, mThickness,
                            {mSAdj * getSpeedMultDM(), mSAcc, mSMin, mSMax,
                                mSPingPong},
                            mHMod);
                    });
            });
        lua.writeVariable(
            "w_wallHModCurveData",
            [=](float mHMod, int mSide, float mThickness, float mCAdj,
                float mCAcc, float mCMin, float mCMax, bool mCPingPong)
            {
                timeline.append<Do>([=]
                    {
                        factory.createWall(mSide, mThickness,
                            {getSpeedMultDM()},
                            {mCAdj, mCAcc, mCMin, mCMax, mCPingPong}, mHMod);
                    });
            });
    }