"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; })();