hugoruscitti/pilas

View on GitHub
pilasengine/fps.py

Summary

Maintainability
D
1 day
Test Coverage
# -*- encoding: utf-8 -*-
# pilas engine: un motor para hacer videojuegos
#
# Copyright 2010-2014 - Hugo Ruscitti
# License: LGPLv3 (see http://www.gnu.org/licenses/lgpl.html)
#
# Website - http://www.pilas-engine.com.ar
from PyQt4 import QtCore


class FPS(object):
    """Representa un controlador de tiempo para el mainloop de pilas."""

    def __init__(self, fps):
        """Inicia el administrador de cuadros por segundo.

        :param fps: Cantidad de cuadros por segundo esperados.
        """
        self.cuadros_por_segundo = "??"
        self.frecuencia = 1000.0 / fps
        self.timer = QtCore.QTime()
        self.timer.start()
        self.siguiente = self.timer.elapsed() + self.frecuencia
        self.cuadros = 0
        self.ultimo_reporte_fps = 0
        self.cuadros_por_segundo_numerico = 0

    def actualizar(self):
        actual = self.timer.elapsed()

        if actual > self.siguiente:
            cantidad = 0

            while actual > self.siguiente:
                self.siguiente += self.frecuencia
                cantidad += 1
                self._procesar_fps(actual)

            if cantidad > 10:
                cantidad = 10

            self.cuadros += 1
            return cantidad
        else:
            # wait
            return 0

    def _procesar_fps(self, actual):
        if actual - self.ultimo_reporte_fps > 1000.0:
            self.ultimo_reporte_fps += 1000.0
            self.cuadros_por_segundo = str(self.cuadros)
            self.cuadros_por_segundo_numerico = self.cuadros
            self.cuadros = 0

    def obtener_cuadros_por_segundo(self):
        "Retorna la cantidad de cuadros por segundo."
        return self.cuadros_por_segundo