#include "ViewController.h" #include "ArtistVisibilityCommand.h" #include "Exception.h" #include "KeyboardCode.h" #include "MouseCode.h" #include "MuseumPauseCommand.h" #include "OpenFileGUICommand.h" #include "TileDecayCommand.h" #include "TimeTravelCommand.h" #include "View.h" #include "Museum.h" ViewController::ViewController(Museum & m, View & v) : museum(m), view(v) { this->cmd_base = new Command(this->museum, this->view, *this); } ViewController::~ViewController() { delete this->cmd_base; } void ViewController::update() { this->update_size(); this->update_tiles(); if (this->draw_artists) this->update_artists(); if (this->draw_pathfinding) this->update_pathfinding(); if (this->draw_quadtree) this->update_quadtree(); } void ViewController::update_size() { this->view.window_size( this->scale * this->museum.canvas.data.columns, this->scale * this->museum.canvas.data.rows ); } void ViewController::update_tiles() { for (unsigned y = 0; y < this->museum.canvas.data.rows; y++) { for (unsigned x = 0; x < this->museum.canvas.data.columns; x++) { Tile & tile = this->museum.canvas.get_tile(x, y); Rectangle rect = { .x = x * scale, .y = y * scale, .width = scale - line_width, .height = scale - line_width, }; this->view.fill_rect(rect, tile.color); } } } void ViewController::update_artists() { People & people = this->museum.people; for (Artist * artist : people.get_artists()) { Rectangle rect = { .x = static_cast(artist->data.x * scale), .y = static_cast(artist->data.y * scale), .width = artist_size, .height = artist_size, }; this->view.fill_rect(rect, artist->color); } } void ViewController::update_pathfinding() { } void ViewController::update_quadtree() { } void ViewController::ev_keydown(KeyboardCode key) { try { switch (key) { case KEY_SPACE: { MuseumPauseCommand(this->cmd_base).toggle(); break; } case KEY_ENTER: { TileDecayCommand(this->cmd_base).execute(get<0>(this->mouse_pos), get<1>(this->mouse_pos)); break; } case KEY_O: { OpenFileGUICommand(this->cmd_base).execute(); break; } case KEY_A: { ArtistVisibilityCommand(this->cmd_base).toggle(); break; } case KEY_LEFT: { TimeTravelCommand(this->cmd_base).backwards(); break; } case KEY_RIGHT: { TimeTravelCommand(this->cmd_base).forwards(); break; } default: break; } } catch (Exception & e) { printf("%s\n", e.what()); } } void ViewController::ev_mousedown(MouseCode button) { try { switch (button) { case MOUSE_LEFT: { // TODO: pathfinding start point break; } case MOUSE_RIGHT: { // TODO: pathfinding end point break; } default: break; } } catch (Exception & e) { printf("%s\n", e.what()); } } void ViewController::ev_mousemove(unsigned x, unsigned y) { this->mouse_pos = { static_cast(x) / static_cast(this->scale), static_cast(y) / static_cast(this->scale), }; }