Skip to content

Commit

Permalink
fix issue with tiempos_preparacion
Browse files Browse the repository at this point in the history
Add get_or() function template.
  • Loading branch information
autosquash committed Jan 5, 2024
1 parent d390745 commit 0f2d225
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 8 deletions.
18 changes: 11 additions & 7 deletions src/modelo/encargos.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
#include "encargos.h"
#include "../templates/helpers.h"
#include "dominio.h"
#include <cassert>

using dominio::TipoPizza;

const auto default_time = sf::seconds(20.0);

// En segundos
const std::map<TipoPizza, sf::Time> tiempos_preparacion = {
{TipoPizza::Margarita, sf::seconds(2.5)},
Expand All @@ -15,24 +19,24 @@ const std::map<TipoPizza, sf::Time> tiempos_preparacion = {
* tiempo actual.
*/
TiempoPreparacion calcular_tiempo_preparacion( //
const TipoPizza tipo, const sf::Time &tiempo_actual
const TipoPizza tp, const sf::Time &tiempo_actual
) {
auto total = tiempos_preparacion.at(tipo);
auto total = get_or(tiempos_preparacion, tp, default_time);
return TiempoPreparacion{tiempo_actual + total, total};
}

EncargoACocina::EncargoACocina(
const TipoPizza tipo, const sf::Time &tiempo_actual
const TipoPizza tp, const sf::Time &tiempo_actual
)
: tipo(tipo),
tiempo_preparacion(calcular_tiempo_preparacion(tipo, tiempo_actual)) {}
: tipo(tp),
tiempo_preparacion(calcular_tiempo_preparacion(tp, tiempo_actual)) {}

// Definicion metodos Encargos

int Encargos::del_tipo(TipoPizza tipo) const {
int Encargos::del_tipo(TipoPizza tp) const {
int contador = 0;
for (auto &encargo : _datos) {
if (encargo.tipo == tipo) {
if (encargo.tipo == tp) {
contador++;
}
}
Expand Down
3 changes: 3 additions & 0 deletions src/modelo_amplio/realizador.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#include "../estado_nivel.h"
#include "../general.h"
#include <cassert>
#include <iostream>

using NuevaFase = std::optional<FaseNivel>;

Expand All @@ -12,7 +13,9 @@ NuevaFase Realizador::encargar_pizza( //
const dominio::TipoPizza tp
) {
assert(estado.fase_actual == FaseNivel::Activa);
std::cout << "antes de anadir encargo" << std::endl;
estado.estado_modelo.anadir_encargo(tp);
std::cout << "despues de anadir encargo" << std::endl;
return std::nullopt;
}

Expand Down
10 changes: 9 additions & 1 deletion src/nivel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <SFML/System/Time.hpp>
#include <SFML/Window/Event.hpp>
#include <cassert>
#include <iostream>
#include <memory>
#include <optional>

Expand Down Expand Up @@ -43,11 +44,15 @@ std::optional<FaseNivel> Nivel::_procesa_click(
const auto comando = controlador_clicks->procesa_click(
globales, botones, fase_actual, mouse_pos
);
std::cout << "click procesado" << std::endl;
if (!comando) {
return std::nullopt;
}
assert(modelo_amplio.has_value());
return modelo_amplio.value().aplica_comando(comando.value());
std::cout << "Antes de aplicar comando" << std::endl;
auto nueva_fase = modelo_amplio.value().aplica_comando(comando.value());
std::cout << "comando aplicado" << std::endl;
return nueva_fase;
}

EnlaceVista Nivel::_crear_enlace_vista( //
Expand Down Expand Up @@ -89,6 +94,7 @@ std::optional<FaseNivel> Nivel::_procesarEvento(
}
break;
case sf::Event::MouseButtonPressed:
std::cout << "antes d e procesar click" << std::endl;
return _procesa_click(botones, estado.fase_actual);
default:
/* Eventos ignorados */
Expand Down Expand Up @@ -166,9 +172,11 @@ AccionGeneral Nivel::ejecutar() {
while (globales.window.isOpen()) {
sf::Event event;
while (globales.window.pollEvent(event)) {
std::cout << "antes de procesar evento" << std::endl;
auto siguiente_fase = _procesarEvento( //
event, enlace_vista.vista->botones, estado
);
std::cout << "despues de procesar evento" << std::endl;
if (!siguiente_fase.has_value()) {
continue;
}
Expand Down
10 changes: 10 additions & 0 deletions src/templates/helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,13 @@ template <typename Key, typename Value>
bool has_key(const std::map<Key, Value> &mapeo, Key clave_a_buscar) {
return mapeo.find(clave_a_buscar) != mapeo.end();
}

template <typename K, typename V>
V get_or(const std::map<K, V> &m, const K &key, const V &defaultValue) {
typename std::map<K, V>::const_iterator it = m.find(key);
if (it == m.end()) {
return defaultValue;
} else {
return it->second;
}
}
1 change: 1 addition & 0 deletions src/vista/botones_app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ namespace {

// Lambda para crear boton data
const auto crear_boton_data = [](dominio::TipoPizza tp) {
assert(has_key(tipo_pizza_to_string, tp));
const std::string pizza_str = tipo_pizza_to_string.at(tp);
return BotonData{
pizza_str, //
Expand Down
2 changes: 2 additions & 0 deletions src/vista/presentador.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
#include "presentador.h"
#include "../modelo/dominio.h"
#include "../modelo/modelo.h"
#include "../templates/helpers.h"

namespace presentador {
std::string crea_linea_completitud_pizza(
const dominio::TipoPizza tp, int parte, int todo
) {
assert(has_key(tipo_pizza_to_string, tp));
const auto nombre_pizza = tipo_pizza_to_string.at(tp);
std::string s = ( //
nombre_pizza + ": " + //
Expand Down
3 changes: 3 additions & 0 deletions src/vista/vista.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "vista.h"
#include "../estado_nivel.h"
#include "../general.h"
#include "../templates/helpers.h"
#include "basicos_vista.h"
#include "grid.h"
#include "vista_data.h"
Expand All @@ -23,6 +24,7 @@ namespace {
const modelo::PizzasAContadores &contadores
) {
for (auto &[tp, contadores_tp] : contadores) {
assert(has_key(botones_despachar, tp));
auto &boton_despachar = botones_despachar.at(tp);
boton_despachar.activacion_condicional(
contadores_tp.preparadas > 0
Expand Down Expand Up @@ -98,6 +100,7 @@ namespace impl {
) {
VistaPizzasToStrings textos_preparadas;
for (auto &[tp, contadores_tp] : contadores) {
assert(has_key(tipo_pizza_to_string, tp));
auto &nombre_pizza = tipo_pizza_to_string.at(tp);
std::string linea =
nombre_pizza + ": " + std::to_string(contadores_tp.preparadas);
Expand Down

0 comments on commit 0f2d225

Please sign in to comment.