bool isEligibleForScore() { if(!getOfficial()) { uneligibilityReason = "official mode off"; return false; } if(getDebug()) { uneligibilityReason = "debug mode on"; return false; } if(!getAutoZoomFactor()) { uneligibilityReason = "modified zoom factor"; return false; } if(getPlayerSpeed() != 9.45f) { uneligibilityReason = "player speed modified"; return false; } if(getPlayerFocusSpeed() != 4.625f) { uneligibilityReason = "player focus speed modified"; return false; } if(getPlayerSize() != 7.3f) { uneligibilityReason = "player size modified"; return false; } if(getInvincible()) { uneligibilityReason = "invincibility on"; return false; } if(getNoRotation()) { uneligibilityReason = "rotation off"; return false; } if(Online::getServerVersion() == -1) { uneligibilityReason = "connection error"; return false; } if(Online::getServerVersion() > getVersion()) { uneligibilityReason = "version mismatch"; return false; } return true; }
void HexagonGame::drawText() { ostringstream s; s << "time: " << toStr(status.currentTime).substr(0, 5) << endl; if(getOfficial()) s << "official mode" << endl; if(getDebug()) s << "debug mode" << endl; if(status.scoreInvalid) s << "score invalidated (performance issues)" << endl; if(status.hasDied) s << "press r to restart" << endl; Vector2f pos{15, 3}; vector<Vector2f> offsets{{-1, -1}, {-1, 1}, {1, -1}, {1, 1}}; Color offsetColor{getColor(1)}; if(getBlackAndWhite()) offsetColor = Color::Black; text.setString(s.str()); text.setCharacterSize(25 / getZoomFactor()); text.setOrigin(0, 0); text.setColor(offsetColor); for(const auto& o : offsets) { text.setPosition(pos + o); render(text); } text.setColor(getColorMain()); text.setPosition(pos); render(text); if(messageTextPtr == nullptr) return; text.setString(messageTextPtr->getString()); text.setCharacterSize(messageTextPtr->getCharacterSize()); text.setOrigin(text.getGlobalBounds().width / 2, 0); text.setColor(offsetColor); for(const auto& o : offsets) { text.setPosition(messageTextPtr->getPosition() + o); render(text); } messageTextPtr->setColor(getColorMain()); render(*messageTextPtr); }
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, {}}); }