107 lines
4.5 KiB
JavaScript
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;
|
|
})(); |