* Handle the pause mode change so we send the right messages to the chat. * @param prev_mode The previous pause mode. * @param changed_mode The pause mode that got changed. */
| 350 | * @param changed_mode The pause mode that got changed. |
| 351 | */ |
| 352 | void NetworkHandlePauseChange(PauseModes prev_mode, PauseMode changed_mode) |
| 353 | { |
| 354 | if (!_networking) return; |
| 355 | |
| 356 | switch (changed_mode) { |
| 357 | case PauseMode::Normal: |
| 358 | case PauseMode::Join: |
| 359 | case PauseMode::GameScript: |
| 360 | case PauseMode::ActiveClients: |
| 361 | case PauseMode::LinkGraph: { |
| 362 | bool changed = _pause_mode.None() != prev_mode.None(); |
| 363 | bool paused = _pause_mode.Any(); |
| 364 | if (!paused && !changed) return; |
| 365 | |
| 366 | std::string str; |
| 367 | if (!changed) { |
| 368 | std::array<StringParameter, 5> params{}; |
| 369 | auto it = params.begin(); |
| 370 | if (_pause_mode.Test(PauseMode::Normal)) *it++ = STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL; |
| 371 | if (_pause_mode.Test(PauseMode::Join)) *it++ = STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS; |
| 372 | if (_pause_mode.Test(PauseMode::GameScript)) *it++ = STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT; |
| 373 | if (_pause_mode.Test(PauseMode::ActiveClients)) *it++ = STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS; |
| 374 | if (_pause_mode.Test(PauseMode::LinkGraph)) *it++ = STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH; |
| 375 | str = GetStringWithArgs(STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 + std::distance(params.begin(), it) - 1, {params.begin(), it}); |
| 376 | } else { |
| 377 | StringID reason; |
| 378 | switch (changed_mode) { |
| 379 | case PauseMode::Normal: reason = STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL; break; |
| 380 | case PauseMode::Join: reason = STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS; break; |
| 381 | case PauseMode::GameScript: reason = STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT; break; |
| 382 | case PauseMode::ActiveClients: reason = STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS; break; |
| 383 | case PauseMode::LinkGraph: reason = STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH; break; |
| 384 | default: NOT_REACHED(); |
| 385 | } |
| 386 | str = GetString(paused ? STR_NETWORK_SERVER_MESSAGE_GAME_PAUSED : STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED, reason); |
| 387 | } |
| 388 | |
| 389 | NetworkTextMessage(NETWORK_ACTION_SERVER_MESSAGE, CC_DEFAULT, false, "", str); |
| 390 | break; |
| 391 | } |
| 392 | |
| 393 | default: |
| 394 | return; |
| 395 | } |
| 396 | } |
| 397 | |
| 398 | |
| 399 | /** |
no test coverage detected