Add nb of segments in footer + minor changes

This commit is contained in:
Beu 2021-08-21 10:33:22 +02:00
parent 0c77ae466a
commit db5169bff3

View File

@ -38,7 +38,7 @@
#Setting S_RoundsPerMap -1 as _("Number of rounds per map") ///< Number of round to play on one map before going to the next one #Setting S_RoundsPerMap -1 as _("Number of rounds per map") ///< Number of round to play on one map before going to the next one
#Setting S_MapsPerMatch -1 as _("Number of maps per match") ///< Number of maps to play before finishing the match #Setting S_MapsPerMatch -1 as _("Number of maps per match") ///< Number of maps to play before finishing the match
#Setting S_UseTieBreak True as _("Use tie-break") ///< Continue to play the map until the tie is broken #Setting S_UseTieBreak True as _("Use tie-break") ///< Continue to play the map until the tie is broken
#Setting S_SegmentsPerRounds 5 as "Number of segment to end the round" #Setting S_SegmentsPerRound 5 as "Number of segment to end the round"
#Setting S_RoundWaitingScreenDuration 20 as _("Round waiting screen duration") //< Maximum time spent waiting for players at the beginning of each round #Setting S_RoundWaitingScreenDuration 20 as _("Round waiting screen duration") //< Maximum time spent waiting for players at the beginning of each round
#Setting S_PointsRepartition "" as _("Custom points distribution") //< comma separated points distribution. eg: "10,6,4,3,2,1" #Setting S_PointsRepartition "" as _("Custom points distribution") //< comma separated points distribution. eg: "10,6,4,3,2,1"
@ -208,6 +208,7 @@ StateMgr::Yield();
declare Integer Server_PointsLimit; declare Integer Server_PointsLimit;
declare Integer Server_RoundsPerMap; declare Integer Server_RoundsPerMap;
declare Integer Server_MapsPerMatch; declare Integer Server_MapsPerMatch;
declare Integer Server_SegmentsPerRound;
*** ***
***Match_StartServer*** ***Match_StartServer***
@ -241,6 +242,7 @@ WarmUp::SetAvailability(False); // (Impossible at the moment https://forum.nadeo
Server_PointsLimit = S_PointsLimit - 1; Server_PointsLimit = S_PointsLimit - 1;
Server_RoundsPerMap = S_RoundsPerMap - 1; Server_RoundsPerMap = S_RoundsPerMap - 1;
Server_MapsPerMatch = S_MapsPerMatch - 1; Server_MapsPerMatch = S_MapsPerMatch - 1;
Server_SegmentsPerRound = S_SegmentsPerRound - 1;
*** ***
***Match_InitMap*** ***Match_InitMap***
@ -248,7 +250,7 @@ Server_MapsPerMatch = S_MapsPerMatch - 1;
declare Integer Map_ValidRoundsNb; declare Integer Map_ValidRoundsNb;
declare Boolean Map_Skipped; declare Boolean Map_Skipped;
UpdateScoresTableFooter(S_PointsLimit, S_RoundsPerMap, S_MapsPerMatch, Map_ValidRoundsNb); UpdateScoresTableFooter(S_PointsLimit, S_RoundsPerMap, S_MapsPerMatch, Map_ValidRoundsNb, S_SegmentsPerRound);
declare CMapLandmark[] Map_Starts; declare CMapLandmark[] Map_Starts;
declare Integer Map_NextEmptyArmorCheckTime; declare Integer Map_NextEmptyArmorCheckTime;
@ -361,7 +363,7 @@ if (Pause::IsActive()) {
MB_Yield(); //< Yield to wait for everyone to be ready MB_Yield(); //< Yield to wait for everyone to be ready
StartTime = Now + Race::C_SpawnDuration; StartTime = Now + Race::C_SpawnDuration;
UpdateScoresTableFooter(S_PointsLimit, S_RoundsPerMap, S_MapsPerMatch, Map_ValidRoundsNb); UpdateScoresTableFooter(S_PointsLimit, S_RoundsPerMap, S_MapsPerMatch, Map_ValidRoundsNb, S_SegmentsPerRound);
StateMgr::ForcePlayersStates([StateMgr::C_State_Playing]); StateMgr::ForcePlayersStates([StateMgr::C_State_Playing]);
// Spawn players for the race // Spawn players for the race
@ -424,7 +426,7 @@ foreach (Event in RacePendingEvents) {
if (Event.Player != Null) { if (Event.Player != Null) {
if (Event.IsEndRace) { if (Event.IsEndRace) {
declare Integer CurrentSegment for Event.Player.Score = 1; declare Integer CurrentSegment for Event.Player.Score = 1;
if (CurrentSegment < S_SegmentsPerRounds) { // TODO Try to keep CP diff a the bottom of the screen if (CurrentSegment < S_SegmentsPerRound) { // TODO Try to keep CP diff a the bottom of the screen
CurrentSegment = CurrentSegment + 1; CurrentSegment = CurrentSegment + 1;
Race::StopSkipScoresTable(Event.Player); Race::StopSkipScoresTable(Event.Player);
declare Boolean ModeRounds_CanSpawn for Event.Player.Score = Rounds_Settings_CanSpawnDefault; declare Boolean ModeRounds_CanSpawn for Event.Player.Score = Rounds_Settings_CanSpawnDefault;
@ -456,7 +458,7 @@ foreach (Event in PendingEvents) {
} }
// Spawn players // Spawn players
if (PlayersNbDead > 0) { //< Check for unspawned players only if at least one player is unspawned if (Players.count > 0 && PlayersNbAlive <= 0) { //< Check for unspawned players only if at least one player is unspawned
declare Boolean NoOneCanPlay = True; declare Boolean NoOneCanPlay = True;
foreach (Player in Players) { foreach (Player in Players) {
declare Boolean ModeRounds_CanSpawn for Player.Score = Rounds_Settings_CanSpawnDefault; declare Boolean ModeRounds_CanSpawn for Player.Score = Rounds_Settings_CanSpawnDefault;
@ -477,20 +479,26 @@ if (PlayersNbDead > 0) { //< Check for unspawned players only if at least one pl
} }
} }
} }
if (NoOneCanPlay && PlayersNbAlive <= 0) MB_StopRound(); if (NoOneCanPlay && PlayersNbAlive <= 0) {
MB_StopRound();
Round_Skipped = False;
}
} }
// Server info change // Server info change
if ( if (
Server_PointsLimit != S_PointsLimit || Server_PointsLimit != S_PointsLimit ||
Server_RoundsPerMap != S_RoundsPerMap || Server_RoundsPerMap != S_RoundsPerMap ||
Server_MapsPerMatch != S_MapsPerMatch Server_MapsPerMatch != S_MapsPerMatch ||
Server_SegmentsPerRound != S_SegmentsPerRound
) { ) {
Server_PointsLimit = S_PointsLimit; Server_PointsLimit = S_PointsLimit;
Server_RoundsPerMap = S_RoundsPerMap; Server_RoundsPerMap = S_RoundsPerMap;
Server_MapsPerMatch = S_MapsPerMatch; Server_MapsPerMatch = S_MapsPerMatch;
Server_SegmentsPerRound = S_SegmentsPerRound;
UpdateScoresTableFooter(S_PointsLimit, S_RoundsPerMap, S_MapsPerMatch, Map_ValidRoundsNb); UpdateScoresTableFooter(S_PointsLimit, S_RoundsPerMap, S_MapsPerMatch, Map_ValidRoundsNb, S_SegmentsPerRound);
} }
*** ***
@ -557,7 +565,8 @@ Scores::SetPlayerWinner(Scores::GetBestPlayer(Scores::C_Sort_MatchPoints));
* @param _MapsPerMatch The number of maps per match * @param _MapsPerMatch The number of maps per match
* @param _ValidRoundsNb Number of valid rounds played * @param _ValidRoundsNb Number of valid rounds played
*/ */
Void UpdateScoresTableFooter(Integer _PointsLimit, Integer _RoundsPerMap, Integer _MapsPerMatch, Integer _ValidRoundsNb) { Void UpdateScoresTableFooter(Integer _PointsLimit, Integer _RoundsPerMap, Integer _MapsPerMatch, Integer _ValidRoundsNb, Integer _SegmentsPerRound) {
log("UpdateScoresTableFooter");
declare Text[] Parts; declare Text[] Parts;
declare Text Message = ""; declare Text Message = "";
if (_PointsLimit > 0) { if (_PointsLimit > 0) {
@ -578,12 +587,18 @@ Void UpdateScoresTableFooter(Integer _PointsLimit, Integer _RoundsPerMap, Intege
//L16N [Rounds] Number of maps played during the match. //L16N [Rounds] Number of maps played during the match.
Parts.add(_("Maps : ")); Parts.add(_("Maps : "));
} }
if (_SegmentsPerRound != 5) {
if (Parts.count > 0) Message ^= " | ";
Message ^= """%{{{Parts.count + 1}}}{{{_SegmentsPerRound}}}""";
Parts.add("Segments : ");
}
switch (Parts.count) { switch (Parts.count) {
case 0: UIModules_ScoresTable::SetFooterInfo(Message); case 0: UIModules_ScoresTable::SetFooterInfo(Message);
case 1: UIModules_ScoresTable::SetFooterInfo(TL::Compose(Message, Parts[0])); case 1: UIModules_ScoresTable::SetFooterInfo(TL::Compose(Message, Parts[0]));
case 2: UIModules_ScoresTable::SetFooterInfo(TL::Compose(Message, Parts[0], Parts[1])); case 2: UIModules_ScoresTable::SetFooterInfo(TL::Compose(Message, Parts[0], Parts[1]));
case 3: UIModules_ScoresTable::SetFooterInfo(TL::Compose(Message, Parts[0], Parts[1], Parts[2])); case 3: UIModules_ScoresTable::SetFooterInfo(TL::Compose(Message, Parts[0], Parts[1], Parts[2]));
case 4: UIModules_ScoresTable::SetFooterInfo(TL::Compose(Message, Parts[0], Parts[1], Parts[2], Parts[3]));
} }
} }