#include "viewer.hpp" Viewer::Viewer() { world_.reset(new World); world_->init_standalone(); } Viewer::~Viewer() { } int64_t Viewer::get_player_id() { return 1; } void Viewer::update_view() { // Get ready to delete views that aren't in use. // for (auto pair : anim_view_) { pair.second.set_updated(false); } // Update the player's AnimView first. // Tangible *player = world_->tangible_get(1); AnimView *player_view = &anim_view_[1]; player_view->update_from(player->anim_queue_); // Find out where's the center of the world. // std::string plane = player_view->get_plane(); util::XYZ xyz = player_view->get_xyz(); // Get a list of everything near the player. // tangibles_ = world_->scan_radius(plane, xyz.x, xyz.y, 100.0); // Update AnimViews for every tangible near the player. // for (int64_t id : tangibles_) { Tangible *tan = world_->tangible_get(id); assert (tan != nullptr); anim_view_[id].update_from(tan->anim_queue_); } // Delete any AnimView that was not updated. // for (auto iter = anim_view_.begin(); iter != anim_view_.end(); ) { if (iter->second.updated()) { iter++; } else { iter = anim_view_.erase(iter); } } } const std::vector &Viewer::get_tangibles_near_player() { return tangibles_; } AnimView *Viewer::get_animation_view(int64_t id) { auto iter = anim_view_.find(id); if (iter == anim_view_.end()) { return nullptr; } else { return &iter->second; } } // Get the menu of the specified tangible. // std::vector Viewer::get_menu(int64_t id) { std::vector result; result.push_back("north"); result.push_back("south"); result.push_back("east"); result.push_back("west"); result.push_back("build"); result.push_back("destroy"); return result; } void Viewer::choose_menu_item(int64_t id, const std::string &item) { } void Viewer::advance_clock() { };