diff --git a/src/tiempo.cpp b/src/tiempo.cpp index 2122e152..e0041b32 100644 --- a/src/tiempo.cpp +++ b/src/tiempo.cpp @@ -3,6 +3,18 @@ #include #include +std::string pad_with_zeroes(int n) { + assert(n >= 0); + if (n > 59) { + n = n % 60; + } + auto cadena = std::to_string(n); + if (cadena.length() == 1) { + cadena.insert(0, "0"); + } + return cadena; +} + /////////////////////////////////////////// // Tiempo ////////////////////////////////////////// @@ -27,9 +39,11 @@ Tiempo Tiempo::desde_segundos(double valor) { } std::string Tiempo::to_string() const { - const auto minutos = _ms / 60'000; - const auto segundos = _ms / 1000 % 60; - return std::to_string(minutos) + ":" + std::to_string(segundos); + const int segundos_brutos = _ms / 1000; + const auto minutos = segundos_brutos / 60; + const auto segundos = segundos_brutos % 60; + assert(segundos < 60); + return pad_with_zeroes(minutos) + ":" + pad_with_zeroes(segundos); } /////////////////////////////////////////// @@ -80,7 +94,8 @@ Tiempo obtener_tiempo_actual() { std::chrono::duration_cast(duracion).count( ) % 10'000'000; - return Tiempo::desde_milisegundos(milisegundos); + const static auto inicial = Tiempo::desde_milisegundos(milisegundos); + return Tiempo::desde_milisegundos(milisegundos) - inicial; }; /////////////////////////////////////////// diff --git a/src/vista/etiquetas/etiquetas_barra_estado.cpp b/src/vista/etiquetas/etiquetas_barra_estado.cpp index 4f62fcc8..4974eed4 100644 --- a/src/vista/etiquetas/etiquetas_barra_estado.cpp +++ b/src/vista/etiquetas/etiquetas_barra_estado.cpp @@ -15,21 +15,19 @@ EtiquetasBarraEstado::EtiquetasBarraEstado(const sf::Font &font) : font(font) { {medidas::MARGEN_IZQ_PANELES, medidas::FILA_BARRA_ESTADO} ); } + void EtiquetasBarraEstado::actualizar( const Tiempo &tiempo_real, const TiempoJuego &tiempo_juego ) { CadenaJuego cadena( "Tiempo Juego: {tiempo_juego} Tiempo Real: {tiempo_real}" ); - const auto tiempo_juego_str = tiempo_juego.to_string(); - const auto tiempo_real_str = tiempo_real.to_string(); const std::string str = - cadena.interpolar_por_clave("tiempo_juego", tiempo_juego_str) - .interpolar_por_clave("tiempo_real", tiempo_real_str); + cadena.interpolar_por_clave("tiempo_juego", tiempo_juego.to_string()) + .interpolar_por_clave("tiempo_real", tiempo_real.to_string()); etiqueta.setString(str); - - // TODO: implementar } + void EtiquetasBarraEstado::dibujar(sf::RenderWindow &ventana) const { ventana.draw(etiqueta); }