Skip to content

Commit

Permalink
Merge branch 'add-darken-background-option' of https://github.com/Nut…
Browse files Browse the repository at this point in the history
…zzz/RigelEngine into add-darken-background-option
  • Loading branch information
Nutzzz committed Oct 15, 2022
2 parents 3e8c45a + a9c794e commit e8cffec
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 18 deletions.
4 changes: 3 additions & 1 deletion src/engine/sprite_rendering_system.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,9 @@ void collectVisibleSprites(
sprite.mUseCloakEffect,
drawTopmost,
drawOrder,
background);
background &&
entity.component<SpriteBackground>()->mRenderSlotMask.test(
slotIndex));
++slotIndex;
}

Expand Down
8 changes: 7 additions & 1 deletion src/engine/visual_components.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,6 @@ struct Sprite
std::bitset<NUM_RENDER_SLOTS> mFlashingWhiteStates;
bool mUseCloakEffect = false;
bool mShow = true;
bool mBackground = false;
};


Expand All @@ -206,6 +205,13 @@ struct ExtendedFrameList

struct SpriteBackground
{
SpriteBackground()
{
// Apply to all render slots by default
mRenderSlotMask.set();
}

std::bitset<NUM_RENDER_SLOTS> mRenderSlotMask;
};


Expand Down
9 changes: 8 additions & 1 deletion src/game_logic/entity_configuration.ipp
Original file line number Diff line number Diff line change
Expand Up @@ -1670,7 +1670,14 @@ void EntityFactory::configureEntity(
entity.component<Shootable>()->mDestroyWhenKilled = false;
entity.assign<AppearsOnRadar>();
if (mpOptions->mPrisonerIsBackground)
entity.assign<SpriteBackground>();
{
auto background = SpriteBackground{};

// Keep the grabbing hand in the foreground
background.mRenderSlotMask.reset(1);

entity.assign<SpriteBackground>(background);
}
break;

case ActorID::Passive_prisoner: // Monster in prison cell, passive
Expand Down
58 changes: 43 additions & 15 deletions src/game_logic/game_world.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,27 @@ base::Size clampedSectionSize(
std::min(sectionSize.height, map.height() - sectionStart.y)};
}


base::ScopeGuard
applyBrightnessOption(renderer::Renderer* pRenderer, float brightness)
{
if (brightness < 1.0f)
{
auto guard = renderer::saveState(pRenderer);
pRenderer->setColorModulation(base::Color{
base::roundTo<uint8_t>(255.0f * brightness),
base::roundTo<uint8_t>(255.0f * brightness),
base::roundTo<uint8_t>(255.0f * brightness),
255});
return guard;
}
else
{
return base::ScopeGuard{[]() {
}};
}
}

} // namespace


Expand Down Expand Up @@ -990,10 +1011,10 @@ void GameWorld::drawMapAndSprites(
}
else
{
const auto saved =
applyBrightnessOption(mpRenderer, mpOptions->mDropTileBrightness);
state.mMapRenderer.renderBackdrop(
params.mInterpolatedCameraPosition,
params.mViewportSize,
mpOptions->mDropTileBrightness);
params.mInterpolatedCameraPosition, params.mViewportSize);
}
};

Expand All @@ -1010,25 +1031,32 @@ void GameWorld::drawMapAndSprites(
};

auto renderBackgroundLayers = [&]() {
state.mMapRenderer.renderBackground(
params.mRenderStartPosition,
params.mViewportSize,
mpOptions->mBackTileBrightness);
state.mDynamicGeometrySystem.renderDynamicBackgroundSections(
params.mRenderStartPosition, params.mViewportSize, interpolationFactor);
{
const auto saved =
applyBrightnessOption(mpRenderer, mpOptions->mBackTileBrightness);
state.mMapRenderer.renderBackground(
params.mRenderStartPosition, params.mViewportSize);
state.mDynamicGeometrySystem.renderDynamicBackgroundSections(
params.mRenderStartPosition, params.mViewportSize, interpolationFactor);
}

state.mSpriteRenderingSystem.renderBackgroundSprites(
mSpecialEffects, mpOptions->mBackSpriteBrightness);
state.mSpriteRenderingSystem.renderRegularSprites(
mSpecialEffects, mpOptions->mRegSpriteBrightness);
};

auto renderForegroundLayers = [&]() {
state.mMapRenderer.renderForeground(
params.mRenderStartPosition,
params.mViewportSize,
mpOptions->mForeTileBrightness);
state.mDynamicGeometrySystem.renderDynamicForegroundSections(
params.mRenderStartPosition, params.mViewportSize, interpolationFactor);
{
const auto saved =
applyBrightnessOption(mpRenderer, mpOptions->mForeTileBrightness);

state.mMapRenderer.renderForeground(
params.mRenderStartPosition, params.mViewportSize);
state.mDynamicGeometrySystem.renderDynamicForegroundSections(
params.mRenderStartPosition, params.mViewportSize, interpolationFactor);
}

state.mSpriteRenderingSystem.renderForegroundSprites(
mSpecialEffects, mpOptions->mForeSpriteBrightness);
renderTileDebris();
Expand Down

0 comments on commit e8cffec

Please sign in to comment.