summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMorxemplum <morxemplum+github@gmail.com>2021-05-23 15:53:00 -0700
committerMorxemplum <morxemplum+github@gmail.com>2021-05-23 15:53:00 -0700
commit915938dd24dad436aa0b7258476b9e23f85b37ea (patch)
tree9451e0b1b9eb7fd5b9afb706c2cebc92c66cc0d7
parentf4af15149de5c9d3b843cbfe2abcd9b68a9876d1 (diff)
Add wall color override to style JSONswall_color_override
-rw-r--r--_RELEASE/Packs/experimental/Levels/wall_color_test.json12
-rw-r--r--_RELEASE/Packs/experimental/Styles/construct.json37
-rw-r--r--include/SSVOpenHexagon/Core/HexagonGame.hpp2
-rw-r--r--include/SSVOpenHexagon/Data/StyleData.hpp3
-rw-r--r--src/SSVOpenHexagon/Core/HGGraphics.cpp36
-rw-r--r--src/SSVOpenHexagon/Data/StyleData.cpp7
6 files changed, 89 insertions, 8 deletions
diff --git a/_RELEASE/Packs/experimental/Levels/wall_color_test.json b/_RELEASE/Packs/experimental/Levels/wall_color_test.json
new file mode 100644
index 00000000..1547a04f
--- /dev/null
+++ b/_RELEASE/Packs/experimental/Levels/wall_color_test.json
@@ -0,0 +1,12 @@
+{
+ "id": "wall_color_test",
+ "name": "Wall Color Test",
+ "description": "Another style test yay",
+ "author": "Morxemplum",
+ "menuPriority": 31,
+ "selectable": true,
+ "styleId": "construct",
+ "musicId": "jackRussel",
+ "luaFile": "Scripts/Levels/negative_pulse.lua",
+ "difficultyMults": []
+}
diff --git a/_RELEASE/Packs/experimental/Styles/construct.json b/_RELEASE/Packs/experimental/Styles/construct.json
new file mode 100644
index 00000000..2855ea87
--- /dev/null
+++ b/_RELEASE/Packs/experimental/Styles/construct.json
@@ -0,0 +1,37 @@
+{
+ // Style data id
+ "id": "construct",
+
+ // Hue options
+ "hue_min": 0,
+ "hue_max": 360,
+ "hue_ping_pong": true,
+ "hue_increment": 1.0,
+
+ // Pulse options
+ "pulse_min": 0.0,
+ "pulse_max": 1,
+ "pulse_increment": 0.025,
+
+ // 3D options
+ "3D_depth": 7,
+ "3D_skew": 0.15,
+ "3D_spacing": 1.5,
+ "3D_darken_multiplier": 1.5,
+ "3D_alpha_multiplier": 0.5,
+ "3D_alpha_falloff": 19.0,
+
+ // Main color
+ "main": { "main": true, "dynamic": false, "value": [0, 0, 0, 255], "pulse": [0, 0, 0, 0] },
+ "cap_color": {"legacy": false, "value": [255, 255, 255, 255], "pulse": [0, 0, 0, 0] },
+ "player_color": {"dynamic": false, "value": [0, 255, 0, 255], "pulse": [0, 0, 0, 0] },
+ "text_color": {"dynamic": false, "value": [255, 255, 255, 255], "pulse": [0, 0, 0, 0] },
+ "wall_color": {"dynamic": false, "value": [0, 198, 254, 255], "pulse": [0, 0, 0, 0] },
+
+ // Background colors
+ "colors":
+ [
+ { "dynamic": false, "dynamic_offset": false, "dynamic_darkness": 0.0, "value": [255, 145, 0, 255], "pulse": [0, 0, 0, 0]},
+ { "dynamic": false, "dynamic_offset": false, "dynamic_darkness": 0.0, "value": [219, 124, 0, 255], "pulse": [0, 0, 0, 0]}
+ ]
+}
diff --git a/include/SSVOpenHexagon/Core/HexagonGame.hpp b/include/SSVOpenHexagon/Core/HexagonGame.hpp
index 0f6661c8..5cd658c2 100644
--- a/include/SSVOpenHexagon/Core/HexagonGame.hpp
+++ b/include/SSVOpenHexagon/Core/HexagonGame.hpp
@@ -371,9 +371,11 @@ private:
Utils::FastVertexVectorTris backgroundTris;
Utils::FastVertexVectorQuads wallQuads;
+ Utils::FastVertexVectorQuads pivotQuads;
Utils::FastVertexVectorTris playerTris;
Utils::FastVertexVectorTris capTris;
Utils::FastVertexVectorQuads wallQuads3D;
+ Utils::FastVertexVectorQuads pivotQuads3D;
Utils::FastVertexVectorTris playerTris3D;
public:
diff --git a/include/SSVOpenHexagon/Data/StyleData.hpp b/include/SSVOpenHexagon/Data/StyleData.hpp
index 2c85a154..796067b5 100644
--- a/include/SSVOpenHexagon/Data/StyleData.hpp
+++ b/include/SSVOpenHexagon/Data/StyleData.hpp
@@ -45,6 +45,7 @@ private:
sf::Color currentMainColor{sf::Color::Black};
sf::Color currentPlayerColor{sf::Color::Black};
sf::Color currentTextColor{sf::Color::Black};
+ sf::Color currentWallColor{sf::Color::White};
sf::Color current3DOverrideColor{sf::Color::Black};
std::vector<sf::Color> currentColors;
@@ -95,6 +96,7 @@ private:
ColorData mainColorData;
ColorData playerColor;
ColorData textColor;
+ ColorData wallColor;
CapColor capColor;
@@ -122,6 +124,7 @@ public:
[[nodiscard]] const sf::Color& getMainColor() const noexcept;
[[nodiscard]] const sf::Color& getPlayerColor() const noexcept;
[[nodiscard]] const sf::Color& getTextColor() const noexcept;
+ [[nodiscard]] const sf::Color& getWallColor() const noexcept;
[[nodiscard]] const std::vector<sf::Color>& getColors() const noexcept;
[[nodiscard]] const sf::Color& getColor(
const std::size_t mIdx) const noexcept;
diff --git a/src/SSVOpenHexagon/Core/HGGraphics.cpp b/src/SSVOpenHexagon/Core/HGGraphics.cpp
index 4ff495d9..e2432b93 100644
--- a/src/SSVOpenHexagon/Core/HGGraphics.cpp
+++ b/src/SSVOpenHexagon/Core/HGGraphics.cpp
@@ -92,8 +92,10 @@ void HexagonGame::draw()
backgroundCamera->apply();
wallQuads3D.clear();
+ pivotQuads3D.clear();
playerTris3D.clear();
wallQuads.clear();
+ pivotQuads.clear();
playerTris.clear();
capTris.clear();
@@ -102,14 +104,14 @@ void HexagonGame::draw()
for(CWall& w : walls)
{
- w.draw(getColorMain(), wallQuads);
+ w.draw(styleData.getWallColor(), wallQuads);
}
cwManager.draw(wallQuads);
if(status.started)
{
- player.draw(getSides(), getColorMain(), getColorPlayer(), wallQuads,
+ player.draw(getSides(), getColorMain(), getColorPlayer(), pivotQuads,
capTris, playerTris, styleData.getCapColorResult());
}
@@ -117,9 +119,11 @@ void HexagonGame::draw()
{
const float depth(styleData._3dDepth);
const std::size_t numWallQuads(wallQuads.size());
+ const std::size_t numPivotQuads(pivotQuads.size());
const std::size_t numPlayerTris(playerTris.size());
wallQuads3D.reserve(numWallQuads * depth);
+ pivotQuads3D.reserve(numPivotQuads * depth);
playerTris3D.reserve(numPlayerTris * depth);
const float effect{
@@ -136,10 +140,7 @@ void HexagonGame::draw()
for(std::size_t i = 0; i < depth; ++i)
{
wallQuads3D.unsafe_emplace_other(wallQuads);
- }
-
- for(std::size_t i = 0; i < depth; ++i)
- {
+ pivotQuads3D.unsafe_emplace_other(pivotQuads);
playerTris3D.unsafe_emplace_other(playerTris);
}
@@ -166,9 +167,25 @@ void HexagonGame::draw()
sf::Color overrideColor{Utils::getColorDarkened(
styleData.get3DOverrideColor(), styleData._3dDarkenMult)};
-
adjustAlpha(overrideColor, i);
+ // Draw pivot layers
+ for(std::size_t k = j * numPivotQuads; k < (j + 1) * numPivotQuads;
+ ++k)
+ {
+ pivotQuads3D[k].position += newPos;
+ pivotQuads3D[k].color = overrideColor;
+ }
+
+ if(styleData.get3DOverrideColor() == styleData.getMainColor())
+ {
+ overrideColor = Utils::getColorDarkened(
+ styleData.getWallColor(), styleData._3dDarkenMult);
+
+ adjustAlpha(overrideColor, i);
+ }
+
+ // Draw wall layers
for(std::size_t k = j * numWallQuads; k < (j + 1) * numWallQuads;
++k)
{
@@ -185,6 +202,7 @@ void HexagonGame::draw()
adjustAlpha(overrideColor, i);
}
+ // Draw player layers
for(std::size_t k = j * numPlayerTris; k < (j + 1) * numPlayerTris;
++k)
{
@@ -195,10 +213,12 @@ void HexagonGame::draw()
}
render(wallQuads3D);
+ render(pivotQuads3D);
render(playerTris3D);
render(wallQuads);
- render(playerTris);
render(capTris);
+ render(pivotQuads);
+ render(playerTris);
overlayCamera->apply();
diff --git a/src/SSVOpenHexagon/Data/StyleData.cpp b/src/SSVOpenHexagon/Data/StyleData.cpp
index cabfd293..2a6b18a6 100644
--- a/src/SSVOpenHexagon/Data/StyleData.cpp
+++ b/src/SSVOpenHexagon/Data/StyleData.cpp
@@ -61,6 +61,7 @@ StyleData::StyleData(const ssvuj::Obj& mRoot)
colorDataFromObjOrDefault(mRoot, "player_color", mainColorData)}, //
textColor{
colorDataFromObjOrDefault(mRoot, "text_color", mainColorData)}, //
+ wallColor{colorDataFromObjOrDefault(mRoot, "wall_color", mainColorData)},
capColor{parseCapColor(ssvuj::getObj(mRoot, "cap_color"))}
{
currentHue = hueMin;
@@ -173,6 +174,7 @@ void StyleData::computeColors()
currentMainColor = calculateColor(currentHue, pulseFactor, mainColorData);
currentPlayerColor = calculateColor(currentHue, pulseFactor, playerColor);
currentTextColor = calculateColor(currentHue, pulseFactor, textColor);
+ currentWallColor = calculateColor(currentHue, pulseFactor, wallColor);
current3DOverrideColor =
_3dOverrideColor.a != 0 ? _3dOverrideColor : getMainColor();
@@ -300,6 +302,11 @@ void StyleData::setCapColor(const CapColor& mCapColor)
return currentTextColor;
}
+[[nodiscard]] const sf::Color& StyleData::getWallColor() const noexcept
+{
+ return currentWallColor;
+}
+
[[nodiscard]] const std::vector<sf::Color>&
StyleData::getColors() const noexcept
{