ai alert mode

This commit is contained in:
milek7
2019-04-10 10:45:22 +02:00
parent ef3a66dc0b
commit 7261fe9fbd
9 changed files with 172 additions and 14 deletions

View File

@@ -317,6 +317,10 @@ void ui::handle_map_object_click(ui_panel &parent, std::shared_ptr<map::map_obje
{
parent.register_popup(std::make_unique<obstacle_remove_window>(parent, std::move(obstacle)));
}
else if (auto obstacle = std::dynamic_pointer_cast<map::vehicle>(obj))
{
parent.register_popup(std::make_unique<vehicle_click_window>(parent, std::move(obstacle)));
}
}
void ui::handle_map_object_hover(std::shared_ptr<map::map_object> &obj)
@@ -538,3 +542,29 @@ void ui::obstacle_remove_window::render_content()
ImGui::CloseCurrentPopup();
}
}
ui::vehicle_click_window::vehicle_click_window(ui_panel &panel, std::shared_ptr<map::vehicle> &&obstacle)
: popup(panel), m_obstacle(obstacle) { }
void ui::vehicle_click_window::render_content()
{
std::string name = m_obstacle->name + "%" + "SetSignal";
if (ImGui::Button(u8"wyłącz")) {
m_relay.post(user_command::sendaicommand, 0.0, 0.0, GLFW_PRESS, 0, glm::vec3(), &name);
ImGui::CloseCurrentPopup();
}
if (ImGui::Button(u8"Pc6")) {
std::string name = m_obstacle->name + "%" + "SetSignal";
m_relay.post(user_command::sendaicommand, Signal_Pc6, 1.0, GLFW_PRESS, 0, glm::vec3(), &name);
ImGui::CloseCurrentPopup();
}
if (ImGui::Button(u8"A1")) {
std::string name = m_obstacle->name + "%" + "SetSignal";
m_relay.post(user_command::sendaicommand, Signal_A1, 1.0, GLFW_PRESS, 0, glm::vec3(), &name);
ImGui::CloseCurrentPopup();
}
}

View File

@@ -65,6 +65,17 @@ class obstacle_remove_window : public popup
virtual void render_content() override;
};
class vehicle_click_window : public popup
{
std::shared_ptr<map::vehicle> m_obstacle;
command_relay m_relay;
public:
vehicle_click_window(ui_panel &panel, std::shared_ptr<map::vehicle> &&obstacle);
virtual void render_content() override;
};
class map_panel : public ui_panel
{
std::unique_ptr<gl::program> m_track_shader;

View File

@@ -1,5 +1,7 @@
#include "stdafx.h"
#include "widgets/map_objects.h"
#include "simulation.h"
#include "DynObj.h"
map::objects map::Objects;
@@ -27,5 +29,28 @@ map::sorted_object_list map::objects::find_in_range(glm::vec3 from, float distan
}
}
for (TDynamicObject *dynobj : simulation::Vehicles.sequence()) {
if (!dynobj->Controller || dynobj->Prev())
continue;
glm::vec3 entry_location = dynobj->GetPosition();
glm::vec3 search_point = from;
if (glm::isnan(from.y))
{
entry_location.y = 0.0f;
search_point.y = 0.0f;
}
float dist = glm::distance2(entry_location, search_point);
if (dist < max_distance2)
{
auto entry = std::make_shared<map::vehicle>();
entry->dynobj = dynobj;
entry->name = dynobj->name();
items.emplace(dist, std::move(entry));
}
}
return items;
}

View File

@@ -59,6 +59,12 @@ struct obstacle : public map_object
}
};
// vehicle wrapper for map display
struct vehicle : public map_object
{
TDynamicObject *dynobj = nullptr;
};
struct objects
{
std::vector<std::shared_ptr<map_object>> entries;