Skip to content

Commit

Permalink
Extrae Nivel::procesa_click
Browse files Browse the repository at this point in the history
  • Loading branch information
autosquash committed Oct 14, 2023
1 parent a523e35 commit 836ce07
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 51 deletions.
5 changes: 3 additions & 2 deletions src/juego.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@ int juego() {
if (res == AccionGeneral::Reiniciar) {
reiniciar = true;
break;
} else if (res == AccionGeneral::Salir)
} else if (res == AccionGeneral::Salir) {
globales.window.close();
break;
else {
} else {
assert(res == AccionGeneral::SiguienteNivel);
}
}
Expand Down
100 changes: 51 additions & 49 deletions src/nivel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,7 @@ Nivel::Nivel(
std::optional<FaseNivel> Nivel::procesarEvento(
sf::Event evento, const Botones &botones, Estado &estado
) {
// std::cout << "procesando evento" << std::endl;
auto &ventana = globales.window;
// Cierre de ventana
if (evento.type == sf::Event::Closed) {
ventana.close();
return FaseNivel::Saliendo;
Expand All @@ -38,60 +36,64 @@ std::optional<FaseNivel> Nivel::procesarEvento(
ventana.setView(sf::View(visibleArea));
}

// Pulsación botón
else if (evento.type == sf::Event::MouseButtonPressed) {
const sf::Vector2i mouse_pos = sf::Mouse::getPosition(ventana);
auto pulsado = [this, &mouse_pos](const BotonConTexto &boton) {
return this->globales.detecta_colision(boton, mouse_pos);
};
return procesa_click(botones, estado, mouse_pos);
}
return std::nullopt;
};

// Fijos
if (pulsado(botones.generales.salir)) {
ventana.close();
return FaseNivel::Saliendo;
} else if (pulsado(botones.generales.reiniciar)) {
return FaseNivel::Reiniciando;
} else if (pulsado(botones.generales.alternar_grid)) {
assert(MODO_DESARROLLO);
estado.mostrando_grid = !estado.mostrando_grid;
}
// Dependientes del estado
switch (estado.fase_actual) {
case FaseNivel::MostrandoInstrucciones:
if (pulsado(botones.empezar)) {
return FaseNivel::Activa;
}
break;
case FaseNivel::Activa:
{
const auto tipos_pizza_disponibles =
estado.control_pizzas.get_tipos_disponibles();
bool despacho = false;
for (const auto &tp : tipos_pizza_disponibles) {
if (pulsado(botones.encargar.at(tp))) {
auto encargo =
EncargoACocina(tp, obtener_tiempo_actual());
estado.encargos.anadir(encargo);
return std::nullopt;
}
if (pulsado(botones.despachar.at(tp))) {
estado.control_pizzas.procesar_despacho(tp);
despacho = true;
break;
}
std::optional<FaseNivel> Nivel::procesa_click(
const Botones &botones, Estado &estado, const sf::Vector2i &mouse_pos
) {
auto pulsado = [this, &mouse_pos](const BotonConTexto &boton) {
return this->globales.detecta_colision(boton, mouse_pos);
};

// Fijos
if (pulsado(botones.generales.salir)) {
return FaseNivel::Saliendo;
} else if (pulsado(botones.generales.reiniciar)) {
return FaseNivel::Reiniciando;
} else if (pulsado(botones.generales.alternar_grid)) {
assert(MODO_DESARROLLO);
estado.mostrando_grid = !estado.mostrando_grid;
}
// Dependientes del estado
switch (estado.fase_actual) {
case FaseNivel::MostrandoInstrucciones:
if (pulsado(botones.empezar)) {
return FaseNivel::Activa;
}
break;
case FaseNivel::Activa:
{
const auto tipos_pizza_disponibles =
estado.control_pizzas.get_tipos_disponibles();
bool despacho = false;
for (const auto &tp : tipos_pizza_disponibles) {
if (pulsado(botones.encargar.at(tp))) {
auto encargo =
EncargoACocina(tp, obtener_tiempo_actual());
estado.encargos.anadir(encargo);
return std::nullopt;
}
if (despacho &&
!estado.control_pizzas.faltan_pedidos_por_cubrir()) {
return FaseNivel::EsperaAntesDeResultado;
if (pulsado(botones.despachar.at(tp))) {
estado.control_pizzas.procesar_despacho(tp);
despacho = true;
break;
}
}
break;
default:
break;
}
if (despacho &&
!estado.control_pizzas.faltan_pedidos_por_cubrir()) {
return FaseNivel::EsperaAntesDeResultado;
}
}
break;
default:
break;
}
return std::nullopt;
};
}

/* Procesa un cambio de fase reciente */
void Nivel::procesa_cambio_de_fase(
Expand Down
3 changes: 3 additions & 0 deletions src/nivel.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ struct Nivel {
Timer &timer_espera_antes_de_resultado, //
FaseNivel fase_previa //
);
std::optional<FaseNivel> procesa_click(
const Botones &botones, Estado &estado, const sf::Vector2i &mouse_pos
);

public:
Globales &globales;
Expand Down

0 comments on commit 836ce07

Please sign in to comment.