Mountain  1.0.0
Simple C++ 2D Game Framework
imgui_utils.hpp
1 #pragma once
2 
3 #include "Mountain/core.hpp"
4 
5 #include <Maths/vector2.hpp>
6 
7 #include <ImGui/imgui.h>
8 
10 
11 namespace Mountain::ImGuiUtils
12 {
13  MOUNTAIN_API void GridPlotting(std::string_view label, Vector2* value, float_t min = -1.f, float_t max = 1.f);
14 
15  MOUNTAIN_API void DirectionVector(std::string_view label, Vector2* value);
16 
17  MOUNTAIN_API void DirectionVector(std::string_view label, Vector2* value, Vector2 expected);
18 
19  template <typename T>
20  bool_t Optional(
21  std::optional<T>* value,
22  const std::type_identity_t<T>& defaultValue,
23  std::type_identity_t<T> nullValue,
24  const std::type_identity_t<std::function<bool_t(T& value)>>& displayFunction
25  );
26 
27  MOUNTAIN_API bool ComboEaser(const std::string& label, Easing::Easer* v, ImGuiComboFlags flags = ImGuiComboFlags_None);
28 
29  MOUNTAIN_API void ShowInputsWindow();
30 
31  MOUNTAIN_API void ShowFileManager();
32 
33  MOUNTAIN_API void ShowResourceManager();
34 
35  MOUNTAIN_API void PushSeparatorText(const char_t* label);
36 
37  MOUNTAIN_API void PopSeparatorText();
38 
39  MOUNTAIN_API bool_t PushCollapsingHeader(const char_t* label, ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_None);
40 
41  MOUNTAIN_API void PopCollapsingHeader();
42 
45  MOUNTAIN_API void SetNextItemWidthAvail();
46 
47  MOUNTAIN_API void ShowPerformanceMonitoring();
48 }
49 
50 // ReSharper disable CppInconsistentNaming
51 namespace ImGui
52 {
53  MOUNTAIN_API bool DragAngle(
54  const char* label,
55  float* v_rad,
56  float v_speed = 1,
57  float v_degrees_min = -360,
58  float v_degrees_max = +360,
59  const char* format = "%.3f",
60  ImGuiSliderFlags flags = 0
61  );
62 
63  template <Mountain::Concepts::EnumT T>
64  bool ComboEnum(const char* label, T* v, ImGuiComboFlags flags = ImGuiComboFlags_None);
65 }
66 // ReSharper restore CppInconsistentNaming
67 
68 #include "Mountain/utils/imgui_utils.inl"
Defines general utility functions.