XGravity/Public/ecma/Views/GameOverView.ecma.js

107 lines
4.5 KiB
JavaScript

"use strict";
const GameOverView = (function(){
const GameOverView = function(xgravity){
const self = this;
let view_element = null;
this.close = () => {
if(view_element && view_element.parentNode){
view_element.parentNode.removeChild(view_element);
view_element = null;
}
};
this.go = (stats = {}) => {
self.close();
const score = stats.score || 0;
const score_str = score.toString().padStart(8, "0");
const reason = stats.reason || "mothership_destroyed";
const diff_id = stats.difficulty || "average";
const spawned = stats.total_spawned || 0;
const destroyed = stats.total_destroyed || 0;
const shield_kills = stats.shield_kills || 0;
const clear_rate = spawned > 0 ? ((destroyed / spawned) * 100).toFixed(1) : "0.0";
const reason_text = reason === "all_drones_lost"
? "DEFEAT: ALL DRONES LOST IN ACTION"
: "CRITICAL: MOTHERSHIP HULL BREACHED";
const action_buttons = [
[
"button", {
class : "xg-btn xg-btn-resume",
"data-i18n" : "btn_retry",
onclick : () => {
self.close();
if(xgravity.views.game){
xgravity.views.game.go();
}
}
}
],
[
"button", {
class : "xg-btn",
"data-i18n" : "btn_main_menu",
onclick : () => {
self.close();
if(xgravity.views.game){
xgravity.views.game.stop();
}
if(xgravity.views.main_menu){
xgravity.views.main_menu.go();
}
}
}
]
];
const nodes = xgravity.html(xgravity.item_self, [
"div", { class : "xg-view xg-game-over-view" }, [
["h1", { class : "xg-title", "data-i18n" : "game_over_title" }],
["div", { class : "xg-game-over-reason" }, [
["span", { class : "xg-badge-danger" }, reason_text]
]],
["div", { class : "xg-menu-list xg-stats-card" }, [
["div", { class : "xg-stat-row xg-stat-score" }, [
["span", { class : "xg-stat-label", "data-i18n" : "stat_final_score" }],
["span", { class : "xg-stat-value xg-val-score" }, `[ ${score_str} ]`]
]],
["div", { class : "xg-stat-row" }, [
["span", { class : "xg-stat-label", "data-i18n" : "stat_difficulty" }],
["span", { class : "xg-stat-value" }, diff_id.toUpperCase()]
]],
["div", { class : "xg-stat-row" }, [
["span", { class : "xg-stat-label", "data-i18n" : "stat_enemies_spawned" }],
["span", { class : "xg-stat-value" }, `${spawned}`]
]],
["div", { class : "xg-stat-row" }, [
["span", { class : "xg-stat-label", "data-i18n" : "stat_enemies_destroyed" }],
["span", { class : "xg-stat-value" }, `${destroyed}`]
]],
["div", { class : "xg-stat-row" }, [
["span", { class : "xg-stat-label", "data-i18n" : "stat_shield_kills" }],
["span", { class : "xg-stat-value" }, `${shield_kills}`]
]],
["div", { class : "xg-stat-row" }, [
["span", { class : "xg-stat-label", "data-i18n" : "stat_clear_rate" }],
["span", { class : "xg-stat-value" }, `${clear_rate}%`]
]]
]],
["div", { class : "xg-menu-list" }, action_buttons]
]
]);
view_element = nodes[0];
xgravity.i18n.update();
};
};
return GameOverView;
})();