/**
* This class will display the progress of the map loading by animating a progress bar.
* Optionally it displays the current stage of the loading screen.
*/
class ProgressBar
{
constructor()
{
this.progressbar_right = Engine.GetGUIObjectByName("progressbar_right");
this.progressbar_right_width = this.progressbar_right.size.right - this.progressbar_right.size.left;
this.progressbar = Engine.GetGUIObjectByName("progressbar");
this.progressbar.onGameLoadProgress = this.onGameLoadProgress.bind(this);
this.progressBarSize = this.progressbar.size.right - this.progressbar.size.left - this.progressbar_right_width / 2;
this.progressText = Engine.GetGUIObjectByName("progressText");
this.showDescription = Engine.ConfigDB_GetValue("user", this.ConfigKey) == "true";
this.percentArgs = !this.showDescription && {};
}
onGameLoadProgress(progression, description)
{
// Make the progessbar finish a little early so that the player can see it finish
if (progression >= 100)
return;
// Show 100 when it is really 99
let progress = progression + 1;
this.progressbar.progress = progress;
if (this.showDescription)
this.progressText.caption = description;
else
{
this.percentArgs.percentage = progress;
this.progressText.caption = sprintf(this.CaptionFormat, this.percentArgs);
}
let increment = Math.round(progress * this.progressBarSize / 100);
let size = this.progressbar_right.size;
size.left = increment;
size.right = increment + this.progressbar_right_width;
this.progressbar_right.size = size;
}
}
ProgressBar.prototype.CaptionFormat =
translateWithContext("loading screen progress", "%(percentage)s%%");
ProgressBar.prototype.ConfigKey =
"gui.loadingscreen.progressdescription";