78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
"use strict";
|
|
|
|
const FpsOverlayView = (function(){
|
|
|
|
const FpsOverlayView = function(xgravity){
|
|
|
|
const self = this;
|
|
let view_element = null;
|
|
let label_element = null;
|
|
|
|
let frame_count = 0;
|
|
let accumulated_time = 0;
|
|
let last_fps = 60;
|
|
|
|
this.close = () => {
|
|
if(view_element && view_element.parentNode){
|
|
view_element.parentNode.removeChild(view_element);
|
|
view_element = null;
|
|
label_element = null;
|
|
}
|
|
};
|
|
|
|
this.tick = (delta_time) => {
|
|
const enabled = xgravity.settings.get("show_fps", null, false);
|
|
const is_game_active = xgravity.views.game
|
|
&& typeof xgravity.views.game.is_active === "function"
|
|
&& xgravity.views.game.is_active()
|
|
&& !xgravity.views.game.is_paused();
|
|
|
|
// Solo se muestra si está activado en ajustes Y hay partida activa no pausada
|
|
if(!enabled || !is_game_active){
|
|
if(view_element) self.close();
|
|
return;
|
|
}
|
|
|
|
if(!view_element){
|
|
self.go();
|
|
}
|
|
|
|
frame_count++;
|
|
accumulated_time += delta_time;
|
|
|
|
if(accumulated_time >= 0.25){
|
|
last_fps = Math.round(frame_count / accumulated_time);
|
|
frame_count = 0;
|
|
accumulated_time = 0;
|
|
|
|
if(label_element){
|
|
label_element.textContent = `${last_fps} FPS`;
|
|
|
|
if(last_fps >= 50){
|
|
label_element.style.color = "#38bdf8";
|
|
} else if(last_fps >= 30){
|
|
label_element.style.color = "#facc15";
|
|
} else {
|
|
label_element.style.color = "#f43f5e";
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
this.go = () => {
|
|
if(view_element && view_element.parentNode) return;
|
|
|
|
const nodes = xgravity.html(xgravity.item_self, [
|
|
"div", { class : "xg-fps-overlay" }, [
|
|
["span", { id : "xg_fps_counter" }, "60 FPS"]
|
|
]
|
|
]);
|
|
|
|
view_element = nodes[0];
|
|
label_element = view_element.querySelector("#xg_fps_counter");
|
|
};
|
|
|
|
};
|
|
|
|
return FpsOverlayView;
|
|
})(); |