-
-
Notifications
You must be signed in to change notification settings - Fork 72
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add 3D layer offset as style property #378
base: develop
Are you sure you want to change the base?
Changes from 4 commits
3f9dff7
9a80df1
50165b4
a205350
327c6ba
74ffe8c
cf282a0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -120,6 +120,9 @@ void HexagonGame::draw() | |
|
||
window->setView(backgroundCamera->apply()); | ||
|
||
wallQuads3DTop.clear(); | ||
pivotQuads3DTop.clear(); | ||
playerTris3DTop.clear(); | ||
wallQuads3D.clear(); | ||
pivotQuads3D.clear(); | ||
playerTris3D.clear(); | ||
|
@@ -147,14 +150,27 @@ void HexagonGame::draw() | |
|
||
if(Config::get3D()) | ||
{ | ||
const float depth(styleData._3dDepth); | ||
const float aboveMain(-styleData._3dLayerOffset - 1); | ||
const bool renderAbove(aboveMain > 0 && !styleData._3dMainOnTop); | ||
const float layerOffset(renderAbove ? -1.f : styleData._3dLayerOffset); | ||
const float depth(styleData._3dDepth - renderAbove * aboveMain); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Some comments would be appreciated here, I don't find this code obvious, especially what |
||
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); | ||
if(renderAbove) | ||
{ | ||
wallQuads3DTop.reserve(numWallQuads * aboveMain); | ||
pivotQuads3DTop.reserve(numPivotQuads * aboveMain); | ||
playerTris3DTop.reserve(numPlayerTris * aboveMain); | ||
} | ||
|
||
if(depth > 0) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Would be nice to have a comment explaining why this only happens when |
||
{ | ||
wallQuads3D.reserve(numWallQuads * depth); | ||
pivotQuads3D.reserve(numPivotQuads * depth); | ||
playerTris3D.reserve(numPlayerTris * depth); | ||
} | ||
|
||
const float pulse3D{Config::getNoPulse() ? 1.f : status.pulse3D}; | ||
const float effect{ | ||
|
@@ -175,20 +191,34 @@ void HexagonGame::draw() | |
playerTris3D.unsafe_emplace_other(playerTris); | ||
} | ||
|
||
if(renderAbove) | ||
{ | ||
for(std::size_t i = 0; i < aboveMain; ++i) | ||
{ | ||
wallQuads3DTop.unsafe_emplace_other(wallQuads); | ||
pivotQuads3DTop.unsafe_emplace_other(pivotQuads); | ||
playerTris3DTop.unsafe_emplace_other(playerTris); | ||
} | ||
} | ||
|
||
const auto adjustAlpha = [&](sf::Color& c, const float i) | ||
{ | ||
SSVOH_ASSERT(styleData._3dAlphaMult != 0.f); | ||
|
||
const float newAlpha = | ||
(static_cast<float>(c.a) / styleData._3dAlphaMult) - | ||
i * styleData._3dAlphaFalloff; | ||
(styleData._3dAlphaMirror ? std::abs(i + 1) : i) * | ||
styleData._3dAlphaFalloff; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ditto, this expression is pretty complicated. Either comments or maybe splitting it up would help. |
||
|
||
c.a = Utils::componentClamp(newAlpha); | ||
}; | ||
|
||
for(int j(0); j < static_cast<int>(depth); ++j) | ||
for(int j(0); | ||
j < static_cast<int>(renderAbove ? depth + aboveMain : depth); ++j) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Extract |
||
{ | ||
const float i(depth - j - 1); | ||
const bool renderingAbove(j >= depth && renderAbove); | ||
const float jAdj(j - depth * renderingAbove * (depth >= 0)); | ||
const float i(depth - j - 1 + layerOffset); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ditto, especially confused about There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, it's a bit confusing because i didn't want to split it into two loops, it's so it can switch to the next vertex container in the same loop. It's probably a better idea to just split it into two loops. |
||
|
||
const float offset(styleData._3dSpacing * | ||
(float(i + 1.f) * styleData._3dPerspectiveMult) * | ||
|
@@ -212,11 +242,19 @@ void HexagonGame::draw() | |
adjustAlpha(overrideColor, i); | ||
|
||
// Draw pivot layers | ||
for(std::size_t k = j * numPivotQuads; k < (j + 1) * numPivotQuads; | ||
++k) | ||
for(std::size_t k = jAdj * numPivotQuads; | ||
k < (jAdj + 1) * numPivotQuads; ++k) | ||
{ | ||
pivotQuads3D[k].position += newPos; | ||
pivotQuads3D[k].color = overrideColor; | ||
if(renderingAbove) | ||
{ | ||
pivotQuads3DTop[k].position += newPos; | ||
pivotQuads3DTop[k].color = overrideColor; | ||
} | ||
else | ||
{ | ||
pivotQuads3D[k].position += newPos; | ||
pivotQuads3D[k].color = overrideColor; | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Pull the |
||
} | ||
|
||
if(styleData.get3DOverrideColor() == styleData.getMainColor()) | ||
|
@@ -228,11 +266,19 @@ void HexagonGame::draw() | |
} | ||
|
||
// Draw wall layers | ||
for(std::size_t k = j * numWallQuads; k < (j + 1) * numWallQuads; | ||
++k) | ||
for(std::size_t k = jAdj * numWallQuads; | ||
k < (jAdj + 1) * numWallQuads; ++k) | ||
{ | ||
wallQuads3D[k].position += newPos; | ||
wallQuads3D[k].color = overrideColor; | ||
if(renderingAbove) | ||
{ | ||
wallQuads3DTop[k].position += newPos; | ||
wallQuads3DTop[k].color = overrideColor; | ||
} | ||
else | ||
{ | ||
wallQuads3D[k].position += newPos; | ||
wallQuads3D[k].color = overrideColor; | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Pull the |
||
} | ||
|
||
// Apply player color if no 3D override is present. | ||
|
@@ -245,11 +291,19 @@ void HexagonGame::draw() | |
} | ||
|
||
// Draw player layers | ||
for(std::size_t k = j * numPlayerTris; k < (j + 1) * numPlayerTris; | ||
++k) | ||
for(std::size_t k = jAdj * numPlayerTris; | ||
k < (jAdj + 1) * numPlayerTris; ++k) | ||
{ | ||
playerTris3D[k].position += newPos; | ||
playerTris3D[k].color = overrideColor; | ||
if(renderingAbove) | ||
{ | ||
playerTris3DTop[k].position += newPos; | ||
playerTris3DTop[k].color = overrideColor; | ||
} | ||
else | ||
{ | ||
playerTris3D[k].position += newPos; | ||
playerTris3D[k].color = overrideColor; | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Pull the |
||
} | ||
} | ||
} | ||
|
@@ -273,6 +327,10 @@ void HexagonGame::draw() | |
render(pivotQuads, getRenderStates(RenderStage::PivotQuads)); | ||
render(playerTris, getRenderStates(RenderStage::PlayerTris)); | ||
|
||
render(wallQuads3DTop, getRenderStates(RenderStage::WallQuads3D)); | ||
render(pivotQuads3DTop, getRenderStates(RenderStage::PivotQuads3D)); | ||
render(playerTris3DTop, getRenderStates(RenderStage::PlayerTris3D)); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can this also be wrapped in There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. yes |
||
|
||
window->setView(overlayCamera->apply()); | ||
|
||
drawParticles(); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unused, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
True I tried implementing this in another way initially but ended up not using it and forgot to remove it from the header.