Skip to content

Commit e8cffec

Browse files
committed
Merge branch 'add-darken-background-option' of https://github.com/Nutzzz/RigelEngine into add-darken-background-option
2 parents 3e8c45a + a9c794e commit e8cffec

File tree

4 files changed

+61
-18
lines changed

4 files changed

+61
-18
lines changed

src/engine/sprite_rendering_system.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,9 @@ void collectVisibleSprites(
162162
sprite.mUseCloakEffect,
163163
drawTopmost,
164164
drawOrder,
165-
background);
165+
background &&
166+
entity.component<SpriteBackground>()->mRenderSlotMask.test(
167+
slotIndex));
166168
++slotIndex;
167169
}
168170

src/engine/visual_components.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,6 @@ struct Sprite
181181
std::bitset<NUM_RENDER_SLOTS> mFlashingWhiteStates;
182182
bool mUseCloakEffect = false;
183183
bool mShow = true;
184-
bool mBackground = false;
185184
};
186185

187186

@@ -206,6 +205,13 @@ struct ExtendedFrameList
206205

207206
struct SpriteBackground
208207
{
208+
SpriteBackground()
209+
{
210+
// Apply to all render slots by default
211+
mRenderSlotMask.set();
212+
}
213+
214+
std::bitset<NUM_RENDER_SLOTS> mRenderSlotMask;
209215
};
210216

211217

src/game_logic/entity_configuration.ipp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1670,7 +1670,14 @@ void EntityFactory::configureEntity(
16701670
entity.component<Shootable>()->mDestroyWhenKilled = false;
16711671
entity.assign<AppearsOnRadar>();
16721672
if (mpOptions->mPrisonerIsBackground)
1673-
entity.assign<SpriteBackground>();
1673+
{
1674+
auto background = SpriteBackground{};
1675+
1676+
// Keep the grabbing hand in the foreground
1677+
background.mRenderSlotMask.reset(1);
1678+
1679+
entity.assign<SpriteBackground>(background);
1680+
}
16741681
break;
16751682

16761683
case ActorID::Passive_prisoner: // Monster in prison cell, passive

src/game_logic/game_world.cpp

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,27 @@ base::Size clampedSectionSize(
252252
std::min(sectionSize.height, map.height() - sectionStart.y)};
253253
}
254254

255+
256+
base::ScopeGuard
257+
applyBrightnessOption(renderer::Renderer* pRenderer, float brightness)
258+
{
259+
if (brightness < 1.0f)
260+
{
261+
auto guard = renderer::saveState(pRenderer);
262+
pRenderer->setColorModulation(base::Color{
263+
base::roundTo<uint8_t>(255.0f * brightness),
264+
base::roundTo<uint8_t>(255.0f * brightness),
265+
base::roundTo<uint8_t>(255.0f * brightness),
266+
255});
267+
return guard;
268+
}
269+
else
270+
{
271+
return base::ScopeGuard{[]() {
272+
}};
273+
}
274+
}
275+
255276
} // namespace
256277

257278

@@ -990,10 +1011,10 @@ void GameWorld::drawMapAndSprites(
9901011
}
9911012
else
9921013
{
1014+
const auto saved =
1015+
applyBrightnessOption(mpRenderer, mpOptions->mDropTileBrightness);
9931016
state.mMapRenderer.renderBackdrop(
994-
params.mInterpolatedCameraPosition,
995-
params.mViewportSize,
996-
mpOptions->mDropTileBrightness);
1017+
params.mInterpolatedCameraPosition, params.mViewportSize);
9971018
}
9981019
};
9991020

@@ -1010,25 +1031,32 @@ void GameWorld::drawMapAndSprites(
10101031
};
10111032

10121033
auto renderBackgroundLayers = [&]() {
1013-
state.mMapRenderer.renderBackground(
1014-
params.mRenderStartPosition,
1015-
params.mViewportSize,
1016-
mpOptions->mBackTileBrightness);
1017-
state.mDynamicGeometrySystem.renderDynamicBackgroundSections(
1018-
params.mRenderStartPosition, params.mViewportSize, interpolationFactor);
1034+
{
1035+
const auto saved =
1036+
applyBrightnessOption(mpRenderer, mpOptions->mBackTileBrightness);
1037+
state.mMapRenderer.renderBackground(
1038+
params.mRenderStartPosition, params.mViewportSize);
1039+
state.mDynamicGeometrySystem.renderDynamicBackgroundSections(
1040+
params.mRenderStartPosition, params.mViewportSize, interpolationFactor);
1041+
}
1042+
10191043
state.mSpriteRenderingSystem.renderBackgroundSprites(
10201044
mSpecialEffects, mpOptions->mBackSpriteBrightness);
10211045
state.mSpriteRenderingSystem.renderRegularSprites(
10221046
mSpecialEffects, mpOptions->mRegSpriteBrightness);
10231047
};
10241048

10251049
auto renderForegroundLayers = [&]() {
1026-
state.mMapRenderer.renderForeground(
1027-
params.mRenderStartPosition,
1028-
params.mViewportSize,
1029-
mpOptions->mForeTileBrightness);
1030-
state.mDynamicGeometrySystem.renderDynamicForegroundSections(
1031-
params.mRenderStartPosition, params.mViewportSize, interpolationFactor);
1050+
{
1051+
const auto saved =
1052+
applyBrightnessOption(mpRenderer, mpOptions->mForeTileBrightness);
1053+
1054+
state.mMapRenderer.renderForeground(
1055+
params.mRenderStartPosition, params.mViewportSize);
1056+
state.mDynamicGeometrySystem.renderDynamicForegroundSections(
1057+
params.mRenderStartPosition, params.mViewportSize, interpolationFactor);
1058+
}
1059+
10321060
state.mSpriteRenderingSystem.renderForegroundSprites(
10331061
mSpecialEffects, mpOptions->mForeSpriteBrightness);
10341062
renderTileDebris();

0 commit comments

Comments
 (0)