Skip to content

Commit 60a3dca

Browse files
Merge pull request #879 from lethal-guitar/improve-parity
Improve parity
2 parents e875743 + 9069838 commit 60a3dca

File tree

9 files changed

+60
-31
lines changed

9 files changed

+60
-31
lines changed

src/engine/map_renderer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,8 @@ base::Vec2f backdropOffset(
177177
else
178178
{
179179
return {
180-
0.0f, float(GameTraits::viewportHeightPx) - backdropAutoScrollOffset};
180+
cameraPosition.x * PARALLAX_FACTOR,
181+
float(GameTraits::viewportHeightPx) - backdropAutoScrollOffset};
181182
}
182183
}
183184

src/game_logic/damage_infliction_system.cpp

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -65,22 +65,23 @@ DamageInflictionSystem::DamageInflictionSystem(
6565

6666
void DamageInflictionSystem::update(ex::EntityManager& es)
6767
{
68-
es.each<DamageInflicting, WorldPosition, BoundingBox>(
68+
es.each<Shootable, WorldPosition, BoundingBox>(
6969
[this, &es](
70-
ex::Entity inflictorEntity,
71-
DamageInflicting& damage,
72-
const WorldPosition& inflictorPosition,
73-
const BoundingBox& bbox) {
74-
const auto inflictorBbox = engine::toWorldSpace(bbox, inflictorPosition);
75-
76-
ex::ComponentHandle<Shootable> shootable;
77-
ex::ComponentHandle<WorldPosition> shootablePos;
78-
ex::ComponentHandle<BoundingBox> shootableBboxLocal;
79-
for (auto shootableEntity : es.entities_with_components(
80-
shootable, shootablePos, shootableBboxLocal))
70+
ex::Entity shootableEntity,
71+
Shootable& shootable,
72+
const WorldPosition& shootablePos,
73+
const BoundingBox& shootableBboxLocal) {
74+
const auto shootableBbox =
75+
engine::toWorldSpace(shootableBboxLocal, shootablePos);
76+
77+
ex::ComponentHandle<DamageInflicting> damage;
78+
ex::ComponentHandle<WorldPosition> inflictorPosition;
79+
ex::ComponentHandle<BoundingBox> inflictorBboxLocal;
80+
for (auto inflictorEntity : es.entities_with_components(
81+
damage, inflictorPosition, inflictorBboxLocal))
8182
{
82-
const auto shootableBbox =
83-
engine::toWorldSpace(*shootableBboxLocal, *shootablePos);
83+
const auto inflictorBbox =
84+
engine::toWorldSpace(*inflictorBboxLocal, *inflictorPosition);
8485

8586
const auto shootableOnScreen =
8687
shootableEntity.has_component<Active>() &&
@@ -89,17 +90,12 @@ void DamageInflictionSystem::update(ex::EntityManager& es)
8990
// clang-format off
9091
if (
9192
shootableBbox.intersects(inflictorBbox) &&
92-
!shootable->mInvincible &&
93-
(shootableOnScreen || shootable->mCanBeHitWhenOffscreen))
93+
!shootable.mInvincible &&
94+
(shootableOnScreen || shootable.mCanBeHitWhenOffscreen))
9495
// clang-format on
9596
{
96-
const auto destroyOnContact =
97-
damage.mDestroyOnContact || shootable->mAlwaysConsumeInflictor;
98-
inflictDamage(inflictorEntity, damage, shootableEntity, *shootable);
99-
if (destroyOnContact)
100-
{
101-
break;
102-
}
97+
inflictDamage(inflictorEntity, *damage, shootableEntity, shootable);
98+
break;
10399
}
104100
}
105101
});

src/game_logic/game_world.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,13 @@ void GameWorld::receive(const rigel::events::ExitReached& event)
422422
}
423423

424424

425+
void GameWorld::receive(const rigel::events::HintMachineMessage& event)
426+
{
427+
mMessageDisplay.setMessage(
428+
event.mText, ui::MessagePriority::HintMachineMessage);
429+
}
430+
431+
425432
void GameWorld::receive(const rigel::events::PlayerDied& event)
426433
{
427434
mpState->mPlayerDied = true;
@@ -566,6 +573,7 @@ void GameWorld::subscribe(entityx::EventManager& eventManager)
566573
{
567574
eventManager.subscribe<rigel::events::CheckPointActivated>(*this);
568575
eventManager.subscribe<rigel::events::ExitReached>(*this);
576+
eventManager.subscribe<rigel::events::HintMachineMessage>(*this);
569577
eventManager.subscribe<rigel::events::PlayerDied>(*this);
570578
eventManager.subscribe<rigel::events::PlayerTookDamage>(*this);
571579
eventManager.subscribe<rigel::events::PlayerMessage>(*this);
@@ -585,6 +593,7 @@ void GameWorld::unsubscribe(entityx::EventManager& eventManager)
585593
{
586594
eventManager.unsubscribe<rigel::events::CheckPointActivated>(*this);
587595
eventManager.unsubscribe<rigel::events::ExitReached>(*this);
596+
eventManager.unsubscribe<rigel::events::HintMachineMessage>(*this);
588597
eventManager.unsubscribe<rigel::events::PlayerDied>(*this);
589598
eventManager.unsubscribe<rigel::events::PlayerTookDamage>(*this);
590599
eventManager.unsubscribe<rigel::events::PlayerMessage>(*this);
@@ -1159,7 +1168,7 @@ void GameWorld::quickSave()
11591168
mpQuickSave = std::make_unique<QuickSaveData>(
11601169
QuickSaveData{*mpPlayerModel, std::move(pStateCopy)});
11611170

1162-
mMessageDisplay.setMessage("Quick saved.");
1171+
mMessageDisplay.setMessage("Quick saved.", ui::MessagePriority::Menu);
11631172

11641173
LOG_F(INFO, "Quick save created");
11651174
}
@@ -1178,7 +1187,7 @@ void GameWorld::quickLoad()
11781187
mpState->synchronizeTo(
11791188
*mpQuickSave->mpState, mpServiceProvider, mpPlayerModel, mSessionId);
11801189
mpState->mPreviousCameraPosition = mpState->mCamera.position();
1181-
mMessageDisplay.setMessage("Quick save restored.");
1190+
mMessageDisplay.setMessage("Quick save restored.", ui::MessagePriority::Menu);
11821191

11831192
if (!mpOptions->mMotionSmoothing)
11841193
{

src/game_logic/game_world.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class GameWorld : public entityx::Receiver<GameWorld>
8888

8989
void receive(const rigel::events::CheckPointActivated& event);
9090
void receive(const rigel::events::ExitReached& event);
91+
void receive(const rigel::events::HintMachineMessage& event);
9192
void receive(const rigel::events::PlayerDied& event);
9293
void receive(const rigel::events::PlayerTookDamage& event);
9394
void receive(const rigel::events::PlayerMessage& event);

src/game_logic/global_dependencies.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,12 @@ struct PlayerMessage
144144
};
145145

146146

147+
struct HintMachineMessage
148+
{
149+
std::string mText;
150+
};
151+
152+
147153
struct TutorialMessage
148154
{
149155
TutorialMessage() = default;

src/game_logic/player.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1126,7 +1126,7 @@ void Player::updateMovement(
11261126
startFallingDelayed();
11271127
}
11281128
}
1129-
else if (movementVector.x != 0)
1129+
else if (movementVector.x != 0 && !fireButton.mIsPressed)
11301130
{
11311131
if (movementVector.x != orientationAsMovement)
11321132
{

src/game_logic/player/interaction_system.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,7 @@ void PlayerInteractionSystem::activateHintMachine(entityx::Entity entity)
488488
mLevelHints.getHint(mSessionId.mEpisode, mSessionId.mLevel);
489489
if (maybeHint)
490490
{
491-
showMessage(*maybeHint);
491+
mpEvents->emit(rigel::events::HintMachineMessage{*maybeHint});
492492
}
493493

494494
entity.remove<Interactable>();

src/ui/ingame_message_display.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,16 @@ IngameMessageDisplay::IngameMessageDisplay(
4444
}
4545

4646

47-
void IngameMessageDisplay::setMessage(std::string message)
47+
void IngameMessageDisplay::setMessage(
48+
std::string message,
49+
MessagePriority priority)
4850
{
49-
if (!message.empty())
51+
if (
52+
!message.empty() &&
53+
(priority >= mCurrentPriority || !std::holds_alternative<Printing>(mState)))
5054
{
5155
mMessage = std::move(message);
56+
mCurrentPriority = priority;
5257
mPrintedMessage.clear();
5358
mState = Printing{};
5459
}

src/ui/ingame_message_display.hpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,24 @@ class MenuElementRenderer;
3232
namespace rigel::ui
3333
{
3434

35+
enum class MessagePriority
36+
{
37+
Normal,
38+
HintMachineMessage,
39+
Menu
40+
};
41+
42+
3543
class IngameMessageDisplay
3644
{
3745
public:
3846
IngameMessageDisplay(
3947
IGameServiceProvider* pServiceProvider,
4048
MenuElementRenderer* pTextRenderer);
4149

42-
void setMessage(std::string message);
50+
void setMessage(
51+
std::string message,
52+
MessagePriority priority = MessagePriority::Normal);
4353

4454
void update();
4555
void render();
@@ -87,6 +97,7 @@ class IngameMessageDisplay
8797
std::string mMessage;
8898
// TODO: Use a string_view instead of a second string once upgraded to C++ 17
8999
std::string mPrintedMessage;
100+
MessagePriority mCurrentPriority = MessagePriority::Normal;
90101

91102
MenuElementRenderer* mpTextRenderer;
92103
IGameServiceProvider* mpServiceProvider;

0 commit comments

Comments
 (0)