mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-03-22 15:05:03 +01:00
ai alert mode
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user