Added help and about, minor improvements
This commit is contained in:
1 parent
18674efd8e
commit
e5296a41b9
32 files changed
+1855
-54
No files matched your search
+78
-4
@@ -17,12 +17,14 @@ namespace ZL {
|
||||
|
||||
void MenuManager::setupMenu()
|
||||
{
|
||||
mainMenuRoot = loadUiFromFile("resources/config/main_menu.json", renderer, CONST_ZIP_FILE);
|
||||
mainMenuRoot = loadUiFromFile("resources/config/main_menu.json", renderer, CONST_ZIP_FILE);
|
||||
aboutMenuRoot = loadUiFromFile("resources/config/about.json", renderer, CONST_ZIP_FILE);
|
||||
shipSelectionRoot = loadUiFromFile("resources/config/ship_selection_menu.json", renderer, CONST_ZIP_FILE);
|
||||
connectingRoot = loadUiFromFile("resources/config/connecting.json", renderer, CONST_ZIP_FILE);
|
||||
connectionFailedRoot= loadUiFromFile("resources/config/connection_failed.json", renderer, CONST_ZIP_FILE);
|
||||
gameplayRoot = loadUiFromFile("resources/config/ui.json", renderer, CONST_ZIP_FILE);
|
||||
gameOverRoot = loadUiFromFile("resources/config/game_over.json", renderer, CONST_ZIP_FILE);
|
||||
helpScreenRoot = loadUiFromFile("resources/config/ui_with_help.json", renderer, CONST_ZIP_FILE);
|
||||
connectionLostRoot = loadUiFromFile("resources/config/connection_lost.json", renderer, CONST_ZIP_FILE);
|
||||
|
||||
enterMainMenu();
|
||||
@@ -32,6 +34,7 @@ namespace ZL {
|
||||
{
|
||||
return state == GameState::Gameplay
|
||||
|| state == GameState::GameOver
|
||||
|| state == GameState::HelpScreen
|
||||
|| state == GameState::ConnectionLost;
|
||||
}
|
||||
|
||||
@@ -51,6 +54,20 @@ namespace ZL {
|
||||
uiManager.setButtonCallback("multiplayerButton", [this](const std::string&) {
|
||||
enterShipSelectionMulti();
|
||||
});
|
||||
|
||||
uiManager.setButtonCallback("aboutButton", [this](const std::string&) {
|
||||
enterAboutMenu();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
void MenuManager::enterAboutMenu()
|
||||
{
|
||||
state = GameState::AboutMenu;
|
||||
uiManager.replaceRoot(aboutMenuRoot);
|
||||
uiManager.setButtonCallback("aboutBackButton", [this](const std::string&) {
|
||||
enterMainMenu();
|
||||
});
|
||||
}
|
||||
|
||||
// ── State: ShipSelectionSingle ───────────────────────────────────────────
|
||||
@@ -190,8 +207,53 @@ namespace ZL {
|
||||
state = GameState::Gameplay;
|
||||
uiManager.replaceRoot(gameplayRoot);
|
||||
|
||||
uiManager.findButton("minusButton")->state = ButtonState::Disabled;
|
||||
if (Environment::shipState.shipType == 1)
|
||||
{
|
||||
uiManager.findButton("shootButton")->state = ButtonState::Disabled;
|
||||
uiManager.findButton("shootButton2")->state = ButtonState::Disabled;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Environment::shipState.velocity < 0.1)
|
||||
{
|
||||
uiManager.findButton("minusButton")->state = ButtonState::Disabled;
|
||||
uiManager.findButton("plusButton")->state = ButtonState::Normal;
|
||||
uiManager.findButton("shootButton")->state = ButtonState::Normal;
|
||||
uiManager.findButton("shootButton2")->state = ButtonState::Normal;
|
||||
}
|
||||
else if (Environment::shipState.velocity >= 0.1 && Environment::shipState.velocity <= 200)
|
||||
{
|
||||
uiManager.findButton("minusButton")->state = ButtonState::Normal;
|
||||
uiManager.findButton("plusButton")->state = ButtonState::Normal;
|
||||
uiManager.findButton("shootButton")->state = ButtonState::Normal;
|
||||
uiManager.findButton("shootButton2")->state = ButtonState::Normal;
|
||||
}
|
||||
else if (Environment::shipState.velocity > 200 && Environment::shipState.velocity < 400 - 0.1)
|
||||
{
|
||||
uiManager.findButton("minusButton")->state = ButtonState::Normal;
|
||||
uiManager.findButton("plusButton")->state = ButtonState::Normal;
|
||||
uiManager.findButton("shootButton")->state = ButtonState::Disabled;
|
||||
uiManager.findButton("shootButton2")->state = ButtonState::Disabled;
|
||||
}
|
||||
else if (Environment::shipState.velocity >= 400 - 0.1)
|
||||
{
|
||||
uiManager.findButton("minusButton")->state = ButtonState::Normal;
|
||||
uiManager.findButton("plusButton")->state = ButtonState::Disabled;
|
||||
uiManager.findButton("shootButton")->state = ButtonState::Disabled;
|
||||
uiManager.findButton("shootButton2")->state = ButtonState::Disabled;
|
||||
}
|
||||
}
|
||||
|
||||
if (forceSetupSpaceUICallback)
|
||||
{
|
||||
forceSetupSpaceUICallback();
|
||||
}
|
||||
|
||||
if (auto btn = uiManager.findButton("takeButton")) btn->state = ButtonState::Disabled;
|
||||
if (auto btn = uiManager.findButton("showPlayersButton"))
|
||||
{
|
||||
btn->state = ButtonState::Disabled;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
@@ -244,13 +306,15 @@ namespace ZL {
|
||||
if (onShowPlayersPressed) onShowPlayersPressed();
|
||||
});
|
||||
|
||||
//inverseMouseButton
|
||||
|
||||
uiManager.setButtonPressCallback("inverseMouseButton", [this](const std::string&) {
|
||||
inverseVertical = !inverseVertical;
|
||||
std::cout << "Inverse mouse: " << (inverseVertical ? "ON" : "OFF") << std::endl;
|
||||
});
|
||||
|
||||
uiManager.setButtonCallback("infoButton", [this](const std::string&) {
|
||||
//if (onShowPlayersPressed) onShowPlayersPressed();
|
||||
enterHelp();
|
||||
});
|
||||
|
||||
|
||||
/*
|
||||
@@ -281,6 +345,16 @@ namespace ZL {
|
||||
});
|
||||
}
|
||||
|
||||
void MenuManager::enterHelp()
|
||||
{
|
||||
state = GameState::HelpScreen;
|
||||
uiManager.replaceRoot(helpScreenRoot);
|
||||
|
||||
uiManager.setButtonCallback("infoButtonUnderlying_help", [this](const std::string&) {
|
||||
enterGameplay();
|
||||
});
|
||||
}
|
||||
|
||||
// ── State: ConnectionLost ─────────────────────────────────────────────────
|
||||
|
||||
void MenuManager::enterConnectionLost()
|
||||
|
||||
@@ -10,12 +10,14 @@ namespace ZL {
|
||||
|
||||
enum class GameState {
|
||||
MainMenu,
|
||||
AboutMenu,
|
||||
ShipSelectionSingle,
|
||||
ShipSelectionMulti,
|
||||
Connecting,
|
||||
ConnectionFailed,
|
||||
Gameplay,
|
||||
GameOver,
|
||||
HelpScreen,
|
||||
ConnectionLost
|
||||
};
|
||||
|
||||
@@ -25,11 +27,13 @@ namespace ZL {
|
||||
|
||||
// Pre-loaded UI roots (loaded once in setupMenu)
|
||||
std::shared_ptr<UiNode> mainMenuRoot;
|
||||
std::shared_ptr<UiNode> aboutMenuRoot;
|
||||
std::shared_ptr<UiNode> shipSelectionRoot;
|
||||
std::shared_ptr<UiNode> connectingRoot;
|
||||
std::shared_ptr<UiNode> connectionFailedRoot;
|
||||
std::shared_ptr<UiNode> gameplayRoot;
|
||||
std::shared_ptr<UiNode> gameOverRoot;
|
||||
std::shared_ptr<UiNode> helpScreenRoot;
|
||||
std::shared_ptr<UiNode> connectionLostRoot;
|
||||
|
||||
// Stored for multiplayer retry
|
||||
@@ -40,12 +44,14 @@ namespace ZL {
|
||||
|
||||
// State transition methods
|
||||
void enterMainMenu();
|
||||
void enterAboutMenu();
|
||||
void enterShipSelectionSingle();
|
||||
void enterShipSelectionMulti();
|
||||
void enterConnecting();
|
||||
void enterConnectionFailed();
|
||||
void enterGameplay();
|
||||
void enterGameOver(int score);
|
||||
void enterHelp();
|
||||
void enterConnectionLost();
|
||||
|
||||
public:
|
||||
@@ -74,6 +80,8 @@ namespace ZL {
|
||||
std::function<void(const std::string&, int)> onSingleplayerPressed;
|
||||
std::function<void(const std::string&, int)> onMultiplayerPressed;
|
||||
std::function<void()> onShowPlayersPressed;
|
||||
|
||||
std::function<void()> forceSetupSpaceUICallback;
|
||||
};
|
||||
|
||||
} // namespace ZL
|
||||
+44
-16
@@ -273,30 +273,50 @@ namespace ZL
|
||||
Environment::zoom = DEFAULT_ZOOM;
|
||||
Environment::tapDownHold = false;
|
||||
playerScore = 0;
|
||||
if (menuManager.uiManager.findButton("minusButton"))
|
||||
{
|
||||
menuManager.uiManager.findButton("minusButton")->state = ButtonState::Disabled;
|
||||
}
|
||||
if (menuManager.uiManager.findButton("plusButton"))
|
||||
{
|
||||
menuManager.uiManager.findButton("plusButton")->state = ButtonState::Normal;
|
||||
}
|
||||
if (Environment::shipState.shipType == 0)
|
||||
{
|
||||
if (menuManager.uiManager.findButton("shootButton"))
|
||||
|
||||
mainThreadHandler.EnqueueMainThreadTask([this]() {
|
||||
if (menuManager.uiManager.findButton("minusButton"))
|
||||
{
|
||||
menuManager.uiManager.findButton("shootButton")->state = ButtonState::Normal;
|
||||
menuManager.uiManager.findButton("minusButton")->state = ButtonState::Disabled;
|
||||
}
|
||||
if (menuManager.uiManager.findButton("shootButton2"))
|
||||
if (menuManager.uiManager.findButton("plusButton"))
|
||||
{
|
||||
menuManager.uiManager.findButton("shootButton2")->state = ButtonState::Normal;
|
||||
menuManager.uiManager.findButton("plusButton")->state = ButtonState::Normal;
|
||||
}
|
||||
}
|
||||
if (Environment::shipState.shipType == 0)
|
||||
{
|
||||
if (menuManager.uiManager.findButton("shootButton"))
|
||||
{
|
||||
menuManager.uiManager.findButton("shootButton")->state = ButtonState::Normal;
|
||||
}
|
||||
if (menuManager.uiManager.findButton("shootButton2"))
|
||||
{
|
||||
menuManager.uiManager.findButton("shootButton2")->state = ButtonState::Normal;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
void Space::setup() {
|
||||
void Space::updateShowPlayersButtonState()
|
||||
{
|
||||
bool hasAlivePlayers = false;
|
||||
for (auto const& [id, _] : remotePlayerStates) {
|
||||
if (!deadRemotePlayers.count(id)) {
|
||||
hasAlivePlayers = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (hasAlivePlayers == showPlayersButtonEnabled) return;
|
||||
showPlayersButtonEnabled = hasAlivePlayers;
|
||||
auto btn = menuManager.uiManager.findButton("showPlayersButton");
|
||||
if (!btn) return;
|
||||
btn->state = hasAlivePlayers ? ButtonState::Normal : ButtonState::Disabled;
|
||||
}
|
||||
|
||||
|
||||
void Space::setup() {
|
||||
|
||||
menuManager.onRestartPressed = [this]() {
|
||||
resetPlayerState();
|
||||
|
||||
@@ -359,6 +379,12 @@ namespace ZL
|
||||
}
|
||||
};
|
||||
|
||||
menuManager.forceSetupSpaceUICallback = [this]() {
|
||||
this->nearPickupBox = false;
|
||||
this->showPlayersButtonEnabled = false;
|
||||
|
||||
};
|
||||
|
||||
bool cfgLoaded = sparkEmitter.loadFromJsonFile("resources/config/spark_config.json", renderer, CONST_ZIP_FILE);
|
||||
bool cfgLoaded2 = sparkEmitterCargo.loadFromJsonFile("resources/config/spark_config_cargo.json", renderer, CONST_ZIP_FILE);
|
||||
sparkEmitter.setIsActive(false);
|
||||
@@ -1695,6 +1721,7 @@ namespace ZL
|
||||
remotePlayerStates[id] = playerState;
|
||||
}
|
||||
|
||||
updateShowPlayersButtonState();
|
||||
updateSparkEmitters(static_cast<float>(delta));
|
||||
|
||||
for (auto& p : projectiles) {
|
||||
@@ -2017,6 +2044,7 @@ namespace ZL
|
||||
}
|
||||
|
||||
rebuildPlayerListIfVisible();
|
||||
updateShowPlayersButtonState();
|
||||
auto boxDestructions = networkClient->getPendingBoxDestructions();
|
||||
if (!boxDestructions.empty()) {
|
||||
std::cout << "Game: Received " << boxDestructions.size() << " box destruction events" << std::endl;
|
||||
|
||||
+3
-1
@@ -113,7 +113,7 @@ namespace ZL {
|
||||
const uint64_t explosionDurationMs = 500;
|
||||
|
||||
bool serverBoxesApplied = false;
|
||||
bool nearPickupBox = false;
|
||||
bool nearPickupBox = false;
|
||||
|
||||
static constexpr float MAX_DIST_SQ = 10000.f * 10000.f;
|
||||
static constexpr float FADE_START = 6000.f;
|
||||
@@ -149,6 +149,8 @@ namespace ZL {
|
||||
|
||||
void resetPlayerState();
|
||||
void clearTextRendererCache();
|
||||
void updateShowPlayersButtonState();
|
||||
bool showPlayersButtonEnabled = false;
|
||||
|
||||
// Player list overlay
|
||||
void buildAndShowPlayerList();
|
||||
|
||||
@@ -98,12 +98,12 @@ namespace ZL {
|
||||
|
||||
stoneToBake = planetStones.inflateOne(0, 0.75);
|
||||
|
||||
|
||||
/*
|
||||
campPlatform.data = LoadFromTextFile02("resources/platform1.txt", CONST_ZIP_FILE);
|
||||
campPlatform.RefreshVBO();
|
||||
|
||||
campPlatformTexture = std::make_unique<Texture>(CreateTextureDataFromPng("resources/platform_base.png", CONST_ZIP_FILE));
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user