81 ImVec2 view_size(0, 0);
82 ImVec2 view_padding(8, 8);
86 view_size.y = (rw->getWidth() * 0.55f) -
89 if (!terrn_size.isZeroLength())
91 view_size.x = (view_size.y / terrn_size.z) * terrn_size.x;
95 view_size.x = view_size.y;
100 view_size.y = rw->getWidth() * 0.2f;
101 view_size.x = view_size.y;
105 ImGuiWindowFlags flags = ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse;
108 ImGui::SetNextWindowSize(ImVec2((view_size.x + view_padding.x), (view_size.y + view_padding.y)));
115 ImGui::SetNextWindowPosCenter();
119 ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0,0,0,0));
120 ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(0,0,0,0));
122 float x = ImGui::GetIO().DisplaySize.x -
124 ImGui::SetNextWindowPos(ImVec2(
x, 100.f));
126 ImGui::Begin(
"SurveyMap",
nullptr, flags);
129 ImVec2 tl_screen_pos = ImGui::GetCursorScreenPos();
130 Ogre::Vector2 smallmap_center;
131 Ogre::Vector2 smallmap_size;
132 Ogre::Vector2 view_origin;
133 Ogre::Vector2 texcoords_top_left(0,0);
134 Ogre::Vector2 texcoords_bottom_right(1,1);
143 Ogre::Vector2 player_map_pos;
148 player_map_pos = (Vector2(actor_data.simbuf_pos.x, actor_data.simbuf_pos.z));
153 player_map_pos = (Vector2(scene_data.simbuf_character_pos.x, scene_data.simbuf_character_pos.z));
161 texcoords_top_left = (smallmap_center - (smallmap_size/2)) /
mTerrainSize;
162 texcoords_bottom_right = (smallmap_center + (smallmap_size/2)) /
mTerrainSize;
171 if (abs(cw_dist.x) <= 5 && abs(cw_dist.y) <= 5)
178 ImGui::BeginChild(
"map", ImVec2(0.f, view_size.y),
false);
182 ImGui::Image(
reinterpret_cast<ImTextureID
>(
mMapTexture->getHandle()), view_size);
186 ImDrawList* drawlist = ImGui::GetWindowDrawList();
188 ImVec2 p_min = ImGui::GetCursorScreenPos();
189 ImVec2 p_max = ImVec2(p_min.x + view_size.x, p_min.y + view_size.y);
190 ImVec2 p_offset = ImVec2(5.f, 5.f);
191 ImVec2 _min(p_min + p_offset);
192 ImVec2 _max(p_max + p_offset);
193 ImVec2 uv_min(texcoords_top_left.x, texcoords_top_left.y);
194 ImVec2 uv_max(texcoords_bottom_right.x, texcoords_bottom_right.y);
199 drawlist->AddCircle(ImVec2(p_min.x + view_size.x/2, p_min.y + view_size.y/2), view_size.x/2 - 2*p_offset.x, ImGui::GetColorU32(theme.
semitransparent_window_bg), 96, 20);
202 drawlist->AddCircularImage(
reinterpret_cast<ImTextureID
>(
mMapTexture->getHandle()), _min, _max, uv_min, uv_max, ImGui::GetColorU32(ImVec4(1,1,1,1)),
m_circle_radius);
205 ImGui::InvisibleButton(
"circle", view_size);
208 if (ImGui::IsItemClicked(0) || ImGui::IsItemClicked(1))
210 ImVec2 mouse_view_offset = (ImGui::GetMousePos() - tl_screen_pos) / view_size;
211 Vector2 mouse_map_pos;
214 mouse_map_pos = view_origin + Vector2(mouse_view_offset.x, mouse_view_offset.y) *
mTerrainSize;
218 mouse_map_pos = view_origin + (Vector2(mouse_view_offset.x, mouse_view_offset.y) * smallmap_size);
221 if (ImGui::IsItemClicked(1))
225 waypoint.
position = Ogre::Vector3(mouse_map_pos.x,
y, mouse_map_pos.y);
230 Ogre::Vector3* payload =
new Ogre::Vector3(mouse_map_pos.x, 0.f, mouse_map_pos.y);
234 else if (ImGui::IsItemClicked(2) && !w_adj)
238 else if (ImGui::IsItemHovered())
241 ImVec2 mouse_pos = ImGui::GetMousePos();
242 ImDrawList* drawlist = ImGui::GetWindowDrawList();
243 drawlist->AddCircleFilled(mouse_pos, 5, ImGui::GetColorU32(ImVec4(1,0,0,1)));
246 const char* title =
"Teleport/Waypoint";
247 ImVec2 text_pos(mouse_pos.x - (ImGui::CalcTextSize(title).x/2), mouse_pos.y - 25);
248 drawlist->AddText(text_pos, ImGui::GetColorU32(ImGui::GetStyle().Colors[ImGuiCol_Text]), title);
257 ImVec2 cw_dist = this->
DrawWaypoint(tl_screen_pos, view_size, view_origin, std::to_string(i), i);
259 if (abs(cw_dist.x) <= 5 && abs(cw_dist.y) <= 5)
261 if (ImGui::IsMouseClicked(0))
266 else if (ImGui::IsMouseReleased(0))
274 ImVec2 mouse_view_offset = (ImGui::GetMousePos() - tl_screen_pos) / view_size;
275 Vector2 mouse_map_pos;
278 mouse_map_pos = view_origin + Vector2(mouse_view_offset.x, mouse_view_offset.y) *
mTerrainSize;
282 mouse_map_pos = view_origin + (Vector2(mouse_view_offset.x, mouse_view_offset.y) * smallmap_size);
288 else if (abs(cw_dist.x) <= 5 && abs(cw_dist.y) <= 5 && ImGui::IsItemClicked(2))
301 bool visible = !((e.type ==
"checkpoint" && e.id != id) || (e.type ==
"racestart" &&
id != -1 && e.id !=
id));
306 this->
DrawMapIcon(e, tl_screen_pos, view_size, view_origin);
314 int truckstate = gfx_actor->GetActorState();
318 fileName <<
"icon_" << type_str <<
"_activated.dds";
320 fileName <<
"icon_" << type_str <<
"_networked.dds";
322 fileName <<
"icon_" << type_str <<
".dds";
324 auto& simbuf = gfx_actor->GetSimDataBuffer();
328 e.
pos = simbuf.simbuf_pos;
329 e.
rot_angle = Ogre::Radian(simbuf.simbuf_rotation);
335 e.
caption = simbuf.simbuf_net_username;
342 this->
DrawMapIcon(e, tl_screen_pos, view_size, view_origin);
348 auto& simbuf = gfx_character->xc_simbuf;
349 if (!simbuf.simbuf_actor_coupling)
353 e.
pos = simbuf.simbuf_character_pos;
354 e.
rot_angle = simbuf.simbuf_character_rot;
355 e.
filename =
"icon_person_activated.dds";
358 if (simbuf.simbuf_is_remote)
360 e.
filename =
"icon_person_networked.dds";
361 e.
caption = simbuf.simbuf_net_username;
368 this->
DrawMapIcon(e, tl_screen_pos, view_size, view_origin);
375 float orig_y = ImGui::GetCursorPosY();
382 ImGui::Image(
reinterpret_cast<ImTextureID
>(
m_left_mouse_button->getHandle()), ImVec2(28, 24));
384 ImGui::SetCursorPosY(ImGui::GetCursorPosY() + ImGui::GetStyle().ItemSpacing.y);
386 const char* text =
"Teleport";
389 text =
"Drag to adjust this waypoint";
394 ImGui::SetCursorPosY(orig_y);
397 ImGui::SetCursorPosY(ImGui::GetCursorPosY() + ImGui::GetStyle().ItemSpacing.y);
399 text =
"Set AI waypoint";
403 ImGui::SetCursorPosY(orig_y);
406 ImGui::SetCursorPosY(ImGui::GetCursorPosY() + ImGui::GetStyle().ItemSpacing.y);
408 text =
"Remove all AI waypoints";
411 text =
"Remove this waypoint";
416 ImGui::SetCursorPosY(orig_y);
419 ImGui::SetCursorPosY(ImGui::GetCursorPosY() + ImGui::GetStyle().ItemSpacing.y);
421 text =
"Zoom mini map";
430 ImGui::PopStyleColor(1);
434 ImGui::PopStyleColor(2);
437 ImGui::PopStyleVar(2);