Skip to content

Commit 89f9cf8

Browse files
committed
feat(GameState/Transition setup) : moving data that we need from leveltransition to gameState files to not changing state or stopping our network
1 parent 41850ad commit 89f9cf8

4 files changed

Lines changed: 26 additions & 22 deletions

File tree

client/include/GameState.hpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ namespace RType {
113113
void initializeBossHealthBar();
114114
void destroyBossHealthBar();
115115
void renderGameOverOverlay();
116+
void renderLevelTransition();
116117
void triggerGameOverIfNeeded();
117118
void enterResultsScreen();
118119

@@ -152,6 +153,10 @@ namespace RType {
152153
void CreatePlayerNameLabel(RType::ECS::Entity playerEntity, const std::string& playerName, float x, float y);
153154
void UpdatePlayerNameLabelPosition(RType::ECS::Entity playerEntity, float x, float y);
154155
void DestroyPlayerNameLabel(RType::ECS::Entity playerEntity);
156+
157+
// Level transition
158+
void UpdateLevelTransition(float dt);
159+
void LoadNextLevel();
155160
private:
156161
GameStateMachine& m_machine;
157162
GameContext& m_context;
@@ -237,14 +242,23 @@ namespace RType {
237242
std::unordered_map<uint32_t, uint8_t> m_bulletFlagsMap; // Track bullet flags to detect type changes
238243
RType::ECS::Entity m_localPlayerEntity = RType::ECS::NULL_ENTITY; // Local player entity mirrored from server
239244

240-
// Level progression tracking
245+
// Level progression tracking with visual transition
246+
enum class TransitionPhase {
247+
NONE,
248+
FADE_OUT,
249+
LOADING,
250+
FADE_IN
251+
};
252+
241253
struct LevelProgressionState {
242-
bool bossSpawned = false;
243254
bool bossDefeated = false;
244255
bool levelComplete = false;
245256
float transitionTimer = 0.0f;
246257
int currentLevelNumber = 1;
258+
int nextLevelNumber = 2;
247259
int totalLevels = 3;
260+
TransitionPhase transitionPhase = TransitionPhase::NONE;
261+
float fadeAlpha = 0.0f;
248262
};
249263
LevelProgressionState m_levelProgress;
250264

client/src/GameState.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@
1111
#include "game/GameStateNetwork.cpp"
1212
#include "game/GameStateUpdate.cpp"
1313
#include "game/GameStateHelpers.cpp"
14+
#include "game/GameStateTransition.cpp"

client/src/game/GameStateNetwork.cpp

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
*/
77

88
#include "../../include/GameState.hpp"
9-
#include "../../include/LevelTransitionState.hpp"
109

1110
#include "ECS/Components/TextLabel.hpp"
1211
#include "ECS/Component.hpp"
@@ -816,31 +815,19 @@ namespace RType {
816815
}
817816

818817
void InGameState::OnLevelComplete(uint8_t completedLevel, uint8_t nextLevel) {
819-
Core::Logger::Info("[InGameState] Level {} complete! Next level: {}",
818+
Core::Logger::Info("[InGameState] Level {} complete! Starting transition to level {}",
820819
static_cast<int>(completedLevel),
821820
static_cast<int>(nextLevel));
822821

822+
m_levelProgress.transitionPhase = TransitionPhase::FADE_OUT;
823+
m_levelProgress.transitionTimer = 0.0f;
824+
m_levelProgress.fadeAlpha = 0.0f;
823825
m_levelProgress.levelComplete = true;
824826
m_levelProgress.bossDefeated = true;
827+
m_levelProgress.currentLevelNumber = static_cast<int>(completedLevel);
828+
m_levelProgress.nextLevelNumber = static_cast<int>(nextLevel);
825829

826-
if (m_context.networkClient) {
827-
Core::Logger::Info("[InGameState] Stopping network client for transition");
828-
m_context.networkClient->Stop();
829-
}
830-
831-
std::string nextLevelPath = "";
832-
if (nextLevel > 0) {
833-
nextLevelPath = "assets/levels/level" + std::to_string(nextLevel) + ".json";
834-
}
835-
836-
Core::Logger::Info("[InGameState] Transitioning to level transition screen");
837-
m_machine.ChangeState(std::make_unique<LevelTransitionState>(
838-
m_machine,
839-
m_context,
840-
static_cast<int>(completedLevel),
841-
m_playerScore,
842-
nextLevelPath
843-
));
830+
Core::Logger::Info("[InGameState] Transition started - staying in GameState, network stays active");
844831
}
845832

846833
}

client/src/game/GameStateUpdate.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ namespace RType {
116116
}
117117

118118
void InGameState::Update(float dt) {
119+
UpdateLevelTransition(dt);
120+
119121
if (m_context.networkClient) {
120122
m_context.networkClient->ReceivePackets();
121123
} else {

0 commit comments

Comments
 (0)