Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
autosquash committed Jan 9, 2024
1 parent f72da53 commit 7fe1a0e
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 33 deletions.
2 changes: 1 addition & 1 deletion src/nivel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ AccionGeneral Nivel::ejecutar() {
auto &control_pizzas = estado.estado_modelo.control_pizzas;
auto &contadores = control_pizzas.contadores;

const auto enlace_vista = _crear_enlace_vista(control_pizzas);
auto enlace_vista = _crear_enlace_vista(control_pizzas);
assert(!contadores.empty());
auto &gestor_tiempo_juego = estado.estado_modelo.gestor_tiempo;

Expand Down
43 changes: 42 additions & 1 deletion src/vista/enlace_vista.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,45 @@
#include "enlace_vista.h"
#include "../estado_nivel.h"
#include "../templates/helpers.h"
#include "vista.h"
#include <cassert>

namespace {
/*
* Preparara la activacion o desactivacion de cada boton despachar
* dependiendo de si hay pizzas preparadas de ese tipo.
*/
void obtener_activacion_botones_dependiendo_de_si_hay_preparadas(
const modelo::PizzasAContadores &contadores,
ActivacionBotones &activacion_botones
) {
for (auto &[tp, contadores_tp] : contadores) {
activacion_botones.despachar.emplace(
tp, contadores_tp.preparadas > 0
);
}
}

} // namespace

/* Actualiza el estado de los botones en funcion de varios factores */
void EnlaceVista::_actualizar_estado_botones(const Estado &estado) {
const auto &control_pizzas = estado.estado_modelo.control_pizzas;
// Botones despachar
const modelo::PizzasAContadores &contadores = control_pizzas.contadores;
ActivacionBotones activacion_botones;
obtener_activacion_botones_dependiendo_de_si_hay_preparadas(
contadores, activacion_botones
);

// Botones encargar
constexpr int maximo = modelo_info::MAXIMO_PIZZAS_EN_PREPARACION;
const int en_preparacion = estado.estado_modelo.encargos.total();
assert(en_preparacion <= maximo);
const bool se_pueden_preparar_mas = en_preparacion < maximo;
activacion_botones.encargar = se_pueden_preparar_mas;
vista->activar_botones_condicionalmente(activacion_botones);
}

void EnlaceVista::on_cambio_a_fase_activa() const {
vista->mostrar_elementos_fase_activa();
Expand All @@ -17,6 +57,7 @@ void EnlaceVista::actualizarIU(
sf::RenderTarget &(target), //
const Estado &estado, //
const sf::Time &tiempo_real_actual //
) const {
) {
_actualizar_estado_botones(estado);
vista->actualizarIU(target, estado, tiempo_real_actual);
}
6 changes: 4 additions & 2 deletions src/vista/enlace_vista.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ namespace sf {
class EnlaceVista {
// TODO: hacer vista privado
// TODO: implementar los metodos que faltan
private:
void _actualizar_estado_botones(const Estado &estado);

public:
std::shared_ptr<Vista> vista;
Expand All @@ -22,8 +24,8 @@ class EnlaceVista {
void on_cambio_a_fase_espera_antes_de_resultado() const;
void esconder_paneles() const;
void actualizarIU(
sf::RenderTarget &(target), //
sf::RenderTarget &(target), //
const Estado &estado, //
const sf::Time &tiempo_real_actual //
) const;
);
};
43 changes: 14 additions & 29 deletions src/vista/vista.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,39 +16,16 @@ using dominio::TiposDePizza;

namespace {
/*
* Activa o desactiva cada boton despachar dependiendo de si hay pizzas
* preparadas de ese tipo.
* Activa o desactiva cada boton despachar segun proceda.
*/
void activar_botones_despachar_si_hay_preparadas(
void activar_botones_despachar_si_procede(
TipoPizzaToBoton &botones_despachar,
const modelo::PizzasAContadores &contadores
const ActivacionBotones &activacion_botones
) {
for (auto &[tp, contadores_tp] : contadores) {
for (auto &[tp, debe_estar_activo] : activacion_botones.despachar) {
assert(has_key(botones_despachar, tp));
auto &boton_despachar = botones_despachar.at(tp);
boton_despachar.activacion_condicional(
contadores_tp.preparadas > 0
);
}
}

/* Actualiza el estado de los botones en funcion de varios factores */
void actualizar_estado_botones(BotonesApp &botones, const Estado &estado) {
const auto &control_pizzas = estado.estado_modelo.control_pizzas;
// Botones despachar
const modelo::PizzasAContadores &contadores = control_pizzas.contadores;
activar_botones_despachar_si_hay_preparadas(
botones.despachar, contadores
);

// Botones encargar
constexpr int maximo = modelo_info::MAXIMO_PIZZAS_EN_PREPARACION;
const int en_preparacion = estado.estado_modelo.encargos.total();
assert(en_preparacion <= maximo);
const bool se_pueden_preparar_mas = en_preparacion < maximo;

for (auto &[_, boton] : botones.encargar) {
boton.activacion_condicional(se_pueden_preparar_mas);
boton_despachar.activacion_condicional(debe_estar_activo);
}
}

Expand Down Expand Up @@ -161,7 +138,6 @@ void Vista::actualizarIU( //
const Estado &estado, //
const sf::Time &tiempo_real_actual //
) {
actualizar_estado_botones(botones, estado);

// Limpia la target y empieza a pintar los componentes visuales
target.clear(colores::COLOR_FONDO);
Expand Down Expand Up @@ -191,3 +167,12 @@ void Vista::mostrar_elementos_fase_activa() {
void Vista::esconder_botones_gestion_pizzeria() { //
botones.mostrar_botones_nivel(false);
}

void Vista::activar_botones_condicionalmente(
const ActivacionBotones &activacion_botones
) {
activar_botones_despachar_si_procede(botones.despachar, activacion_botones);
for (auto &[_, boton] : botones.encargar) {
boton.activacion_condicional(activacion_botones.encargar);
}
}
9 changes: 9 additions & 0 deletions src/vista/vista.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ namespace impl {
);
} // namespace impl

// ActivacionBotones
struct ActivacionBotones {
bool encargar;
std::map<dominio::TipoPizza, bool> despachar;
};

///// Vista /////

class Vista : public ObjetoConFont {
Expand Down Expand Up @@ -47,4 +53,7 @@ class Vista : public ObjetoConFont {
);
void mostrar_elementos_fase_activa();
void esconder_botones_gestion_pizzeria();
void activar_botones_condicionalmente(
const ActivacionBotones &activacion_botones //
);
};

0 comments on commit 7fe1a0e

Please sign in to comment.