Skip to content

Commit

Permalink
progress
Browse files Browse the repository at this point in the history
  • Loading branch information
Diego Rosario~ committed Aug 8, 2021
1 parent 4980a1e commit 4bc59fc
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 32 deletions.
34 changes: 24 additions & 10 deletions src/estado.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,31 @@ struct Estado {
ren.clear_with(cen::colors::light_coral);

const auto &vertex = grafo.get_vertices();

for (const Propiedad pelota : vertex) {
const auto color =
visit(overloaded{ // pattern matching: https://en.wikipedia.org/wiki/Pattern_matching
[](const auto arg) { return cen::colors::green; },
[](const Vivienda arg) { return cen::colors::blanched_almond; },
},
pelota.tipo); // retorna un color de acuerdo al tipo de cada vertice

ren.set_color(color); // actualiza color del renderer
ren.fill_circle(cen::point(pelota.x, pelota.y), 75); // (coord, radius)
const auto color = visit(
overloaded{
// pattern matching:
// https://en.wikipedia.org/wiki/Pattern_matching
[](const auto arg) { return cen::colors::green; },
[](const Vivienda arg) { return cen::colors::blanched_almond; },
},
pelota.tipo); // retorna un color de acuerdo al tipo de cada vertice

const auto &edges = grafo.get_aristas();

ren.set_color(color); // actualiza color del renderer
ren.fill_circle(cen::point(pelota.x, pelota.y), 75); // (coord, radius)
}

const auto &edges = grafo.get_aristas();

for (const auto edge : edges) {
const auto extremo1 = cen::point(edge.first.x, edge.first.y);
const auto extremo2 =
cen::point(edge.second.first.x, edge.second.first.y);

ren.set_color(cen::colors::forest_green);
ren.draw_line(extremo1, extremo2);
}

ren.present();
Expand Down
28 changes: 17 additions & 11 deletions src/grafo.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,13 @@ class Grafo { // grafo dirigido
public:
// encapsulamiento -> puede ser leido pero no alterado
const unordered_set<Propiedad> &get_vertices() const { return vertices; }

const unordered_multimap<Propiedad, Arista> &get_aristas() const {
return aristas;
}

bool annadir_vertice(const Propiedad &prop) {
// retorna falso si la insercion falla -> no permite 2 elementos con el mismo hash
// retorna falso si la insercion falla -> no permite 2 elementos con el
// mismo hash
return this->vertices.insert(prop).second;
}

Expand All @@ -43,12 +46,13 @@ class Grafo { // grafo dirigido
const auto conx = conexiones(key);

for (auto iterador = conx.first; iterador != conx.second; iterador++) {
const int value = visit(overloaded{
[](auto arg) { return 0; },
[](Vivienda arg) { return arg.residentes; },
},
iterador->second.first.tipo) *
(iterador->second.second); // residentes * ponderacion de arista
const int value =
visit(overloaded{
[](auto arg) { return 0; },
[](Vivienda arg) { return arg.residentes; },
},
iterador->second.first.tipo) *
(iterador->second.second); // residentes * ponderacion de arista

result += value;
}
Expand All @@ -59,9 +63,11 @@ class Grafo { // grafo dirigido
Grafo initGrafo() {
Grafo grafo;

grafo.annadir_vertice(Propiedad("DFDF", 400, 400));
grafo.annadir_vertice(Propiedad("dfdfd", 900, 400));
grafo.annadir_vertice(Propiedad("nanan",100,100,Comercial()));
grafo.annadir_vertice(Propiedad("DFDF", 100, 100));
grafo.annadir_vertice(Propiedad("dfdfd", 700, 100));
grafo.annadir_vertice(Propiedad("nanan", 390, 510));

grafo.annadir_vertice(Propiedad("nanadn", 390, 250, Comercial()));

return grafo;
}
17 changes: 9 additions & 8 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@

using event_dispatcher =
cen::event_dispatcher<cen::quit_event, cen::window_event,
cen::keyboard_event, cen::mouse_button_event>;
// observer -> recibe un evento mensaje el cual devuelve un comportamiento asignado

cen::keyboard_event, cen::mouse_button_event>;
// observer -> recibe un evento mensaje el cual devuelve un comportamiento
// asignado

inline void mouse_button(const cen::mouse_button_event &event) {
cen::log::info("mouse_button_event");
Expand All @@ -28,23 +28,24 @@ class game final {
m_dispatcher.bind<cen::window_event>().to<&window>();
m_dispatcher.bind<cen::mouse_button_event>().to<&mouse_button>();
m_dispatcher.bind<cen::keyboard_event>().to<&keyboard>();
// bind -> asigna una función para cada evento
// bind -> asigna una función para cada evento
}

void run() {
ventana().show();

while (m_running) {
m_dispatcher.poll(); // recibe eventos y los pasa al dispatcher (*)
estado.draw(renderizador()); // recibe un renderer y ejecuta comandos de dibujado
estado.update(); // actualiza el estado del programa
m_dispatcher.poll(); // recibe eventos y los pasa al dispatcher (*)
estado.draw(
renderizador()); // recibe un renderer y ejecuta comandos de dibujado
estado.update(); // actualiza el estado del programa
}

ventana().hide();
}

private:
// ATRIBUTOS DE CLASE
// ATRIBUTOS DE CLASE
std::pair<cen::window, cen::renderer> motor = cen::make_window_and_renderer();
cen::window &ventana() { return get<0>(motor); }
cen::renderer &renderizador() { return get<1>(motor); }
Expand Down
10 changes: 7 additions & 3 deletions src/propiedad.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include <string>
#include <variant> // TIPO que puede contener 2 TIPOS
#include <variant> // TIPO que puede contener 2 TIPOS

// Metaprogramacion y Programacion generica
template <class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
Expand All @@ -11,9 +11,13 @@ struct Vivienda {
struct Comercial {
int apertura;
int cierre;

int aforo;
};

using Tipo = std::variant<Vivienda, Comercial>; // https://en.wikipedia.org/wiki/Tagged_union
using Tipo =
std::variant<Vivienda,
Comercial>; // https://en.wikipedia.org/wiki/Tagged_union

struct Propiedad {
float x;
Expand All @@ -28,7 +32,7 @@ struct Propiedad {
Propiedad() = default;
};

// Sobrecarga
// Sobrecarga
namespace std {
template <> struct hash<Propiedad> {
size_t operator()(const Propiedad &x) const {
Expand Down

0 comments on commit 4bc59fc

Please sign in to comment.