void HexagonGame::drawBackground() { float div{360.f / getSides() * 1.0001f}; float distance{1500}; VertexArray vertices{PrimitiveType::Triangles, 3}; for(int i{0}; i < getSides(); i++) { float angle { div * i }; Color currentColor { styleData.getCurrentA() }; if (i % 2 == 0) { currentColor = styleData.getCurrentB(); if (i == getSides() - 1) currentColor = getColorDarkened(currentColor, 1.4f); } Vector2f p1 = getOrbit(centerPos, angle + div * 0.5f, distance); Vector2f p2 = getOrbit(centerPos, angle - div * 0.5f, distance); vertices.append(Vertex{centerPos, currentColor}); vertices.append(Vertex{p1, currentColor}); vertices.append(Vertex{p2, currentColor}); } gameTexture.draw(vertices); }
Color StyleData::calculateColor(const ColorData& mColorData) const { Color color{mColorData.color}; if(mColorData.dynamic) { const auto& dynamicColor(getColorFromHue((currentHue + mColorData.hueShift) / 360.f)); if(!mColorData.main) { if(mColorData.dynamicOffset) { assert(mColorData.offset != 0); color.r += dynamicColor.r / mColorData.offset; color.g += dynamicColor.g / mColorData.offset; color.b += dynamicColor.b / mColorData.offset; color.a += dynamicColor.a; } else color = getColorDarkened(dynamicColor, mColorData.dynamicDarkness); } else color = dynamicColor; } const auto& pulse(mColorData.pulse); return Color(getClamped(color.r + pulse.r * pulseFactor, 0.f, 255.f), getClamped(color.g + pulse.g * pulseFactor, 0.f, 255.f), getClamped(color.b + pulse.b * pulseFactor, 0.f, 255.f), getClamped(color.a + pulse.a * pulseFactor, 0.f, 255.f)); }
void HexagonGame::draw() { wallQuads.clear(); styleData.computeColors(); window.clear(Color::Black); if(!Config::getNoBackground()) { backgroundCamera.apply(); styleData.drawBackground(window, ssvs::zeroVec2f, getSides()); } if(Config::get3D()) { status.drawing3D = true; float effect{styleData._3dSkew * Config::get3DMultiplier() * status.pulse3D}; Vec2f skew{1.f, 1.f + effect}; backgroundCamera.setSkew(skew); for(auto i(0u); i < depthCameras.size(); ++i) { Camera& depthCamera(depthCameras[i]); depthCamera.setView(backgroundCamera.getView()); depthCamera.setSkew(skew); depthCamera.setOffset({0, styleData._3dSpacing * (i * styleData._3dPerspectiveMult) * (effect * 3.6f)}); } for(auto i(0u); i < depthCameras.size(); ++i) { status.overrideColor = getColorDarkened(styleData.get3DOverrideColor(), styleData._3dDarkenMult); status.overrideColor.a /= styleData._3dAlphaMult; status.overrideColor.a -= i * styleData._3dAlphaFalloff; depthCameras[i].apply(); manager.draw(); render(wallQuads); } status.drawing3D = false; } backgroundCamera.apply(); manager.draw(); render(wallQuads); overlayCamera.apply(); drawText(); if(Config::getFlash()) render(flashPolygon); if(mustTakeScreenshot) { window.saveScreenshot("screenshot.png"); mustTakeScreenshot = false; } }
void HexagonGame::draw() { styleData.computeColors(); window.clear(Color::Black); if(!getNoBackground()) { backgroundCamera.apply(); styleData.drawBackground(window.getRenderWindow(), {0, 0}, getSides()); } if(get3D()) { status.drawing3D = true; float effect{styleData.get3DSkew() * get3DMultiplier() * status.pulse3D}; Vector2f skew{1.f, 1.f + effect}; backgroundCamera.setSkew(skew); for(unsigned int i{0}; i < depthCameras.size(); ++i) { Camera& depthCamera(depthCameras[i]); depthCamera.setView(backgroundCamera.getView()); depthCamera.setSkew(skew); depthCamera.setOffset({0, styleData.get3DSpacing() * (i * styleData.get3DPerspectiveMultiplier()) * (effect * 3.6f)}); } for(unsigned int i{0}; i < depthCameras.size(); ++i) { status.overrideColor = getColorDarkened(styleData.get3DOverrideColor(), styleData.get3DDarkenMultiplier()); status.overrideColor.a /= styleData.get3DAlphaMultiplier(); status.overrideColor.a -= i * styleData.get3DAlphaFalloff(); depthCameras[i].apply(); manager.draw(); } status.drawing3D = false; } backgroundCamera.apply(); manager.draw(); overlayCamera.apply(); drawText(); if(getFlash()) render(flashPolygon); if(mustTakeScreenshot) { window.getRenderWindow().capture().saveToFile("screenshot.png"); mustTakeScreenshot = false; } }
void StyleData::drawBackground(RenderTarget& mRenderTarget, const Vec2f& mCenterPos, int mSides) { float div{ssvu::tau / mSides * 1.0001f}, distance{4500}; ssvs::VertexVector<sf::PrimitiveType::Triangles> vertices; const auto& colors(getColors()); for(int i{0}; i < mSides; ++i) { float angle{div * i}; Color currentColor{ssvu::getByWrapIdx(colors, i)}; if(Config::getBlackAndWhite()) currentColor = Color::Black; else if(i % 2 == 0 && i == mSides - 1) currentColor = getColorDarkened(currentColor, 1.4f); vertices.emplace_back(mCenterPos, currentColor); vertices.emplace_back(getOrbitRad(mCenterPos, angle + div * 0.5f, distance), currentColor); vertices.emplace_back(getOrbitRad(mCenterPos, angle - div * 0.5f, distance), currentColor); } mRenderTarget.draw(vertices); }