Elaztek Developer Hub
Blamite Game Engine - blam!  00453.06.08.26.0624.blamite
The core library for the Blamite Game Engine.
director.hpp
Go to the documentation of this file.
1 #pragma once
2 
4 
5 #include <OGRE/OgreCamera.h>
6 #include <Strings/components/utils/math/math.h>
7 
9 
14 {
15 private:
16  bool allow_compat_editing = false;
17  float look_sensetivity = 0.25f;
18 
19 public:
20  void Draw()
21  {
22  if (!show)
23  {
24  return;
25  }
26 
27  if (ImGui::Begin("Director Debug", &show))
28  {
31 
32  if (director)
33  {
34  // Basic camera settings
35  {
36  ImGui::DragFloat3("camera pos", (float*)&director->camera_pos);
37  ImGui::DragFloat3("camera angle", (float*)&director->camera_angle);
38  ImGui::DragFloat("field of view", &director->fov);
39  }
40 
42 
43  // Advanced camera settings
44  {
45  ImGui::Checkbox("lock camera", &director->lock_camera);
46  ImGui::DragFloat("camera speed", &director->speed);
47 
48  ImGui::Checkbox("tick based camera looking", &director->tick_based_looking);
49  ImGui::DragFloat("look sensetivity (horizontal)", &director->look_sensetivity_horizontal);
50  ImGui::DragFloat("look sensetivity (vertical)", &director->look_sensetivity_vertical);
51  ImGui::Checkbox("persistent look motion", &director->persistent_look_motion);
53  Blam::UI::ImGUI::Widgets::ShowHelpMarker(ENGINE_TEXT("director_persistent_look_motion_help_text").c_str());
54 
55  ImGui::Checkbox("move acceleration", &director->move_acceleration);
56  ImGui::Checkbox("look acceleration", &director->look_acceleration);
57  ImGui::InputFloat("acceleration increment count", &director->accel_increment_count);
58 
59  ImGui::InputFloat("zoom increment count", &director->zoom_increment_count);
61  Blam::UI::ImGUI::Widgets::ShowHelpMarker(ENGINE_TEXT("director_zoom_increment_count_help_text").c_str());
62 
63  ImGui::Checkbox("pan-cam", &director->pancam);
65  Blam::UI::ImGUI::Widgets::ShowHelpMarker(ENGINE_TEXT("director_pancam_help_text").c_str());
66 
67  ImGui::Checkbox("pan-cam lock x/y", &director->pancam_lock_xy);
69  Blam::UI::ImGUI::Widgets::ShowHelpMarker(ENGINE_TEXT("director_camera_pancam_lock_xy_help_text").c_str());
70 
71  ImGui::Checkbox("camera bouncing", &director->camera_bouncing);
73  Blam::UI::ImGUI::Widgets::ShowHelpMarker(ENGINE_TEXT("director_camera_bouncing_help_text").c_str());
74 
75  ImGui::DragFloat("near clip distance", &director->near_clip_plane_distance, 1.0f, 0.001f);
77  Blam::UI::ImGUI::Widgets::ShowHelpMarker(ENGINE_TEXT("director_near_clip_help_text").c_str());
78 
79  ImGui::DragFloat("far clip distance", &director->far_clip_plane_distance);
81  Blam::UI::ImGUI::Widgets::ShowHelpMarker(ENGINE_TEXT("director_far_clip_help_text").c_str());
82 
83 
84  if (ImGui::CollapsingHeader("movement springiness"))
85  {
86  ImGui::Checkbox("enable movement spring", &director->enable_movement_spring);
87  ImGui::DragFloat("spring stiffness", &director->spring_stiffness, 1.0f, 0.001f);
88  ImGui::DragFloat("spring damping", &director->damping, 1.0f, 0.001f);
89  ImGui::DragFloat("movement spring scale", &director->movement_spring_scale, 1.0f, 0.001f);
90  }
91 
92  if (ImGui::CollapsingHeader("rotation springiness"))
93  {
94  ImGui::Checkbox("enable look spring", &director->enable_look_spring);
95  ImGui::DragFloat("look spring stiffness", &director->look_spring_stiffness, 1.0f, 0.001f);
96  ImGui::DragFloat("look damping", &director->look_damping, 1.0f, 0.001f);
97  ImGui::DragFloat("look accel rate", &director->look_accel_rate, 1.0f, 0.001f);
98  }
99 
100  if (ImGui::CollapsingHeader("zoom springiness"))
101  {
102  ImGui::Checkbox("enable zoom spring", &director->enable_zoom_spring);
103  ImGui::DragFloat("fov spring stiffness", &director->fov_spring_stiffness, 1.0f, 0.001f);
104  ImGui::DragFloat("fov damping", &director->fov_damping, 1.0f, 0.001f);
105  ImGui::DragFloat("fov spring scale", &director->fov_spring_scale, 1.0f, 0.001f);
106  }
107  }
108 
109  if (ImGui::CollapsingHeader("internal"))
110  {
111  ImGui::Checkbox("auto verify coords", &director->auto_verify_coords);
112  ImGui::SameLine();
113  Blam::UI::ImGUI::Widgets::ShowHelpMarker(ENGINE_TEXT("director_auto_verify_coords_help_text").c_str());
114 
115  ImGui::DragFloat3("camera front", (float*)&director->camera_front);
116  ImGui::DragFloat3("camera right", (float*)&director->camera_right);
117  //ImGui::DragFloat3("camera up", (float*)&director->camera_up);
118 
119  ImGui::Checkbox("auto calculate angle", &director->calculate_angle);
120  ImGui::DragFloat("horizontal angle", &director->horizontal_angle);
121  ImGui::DragFloat("vertical angle", &director->vertical_angle);
122  }
123 
124  if (ImGui::CollapsingHeader("deprecated"))
125  {
126  ImGui::Text("these settings are unused and will likely be removed in the future");
127 
128  ImGui::Checkbox("allow editing", &allow_compat_editing);
129  ImGui::SameLine();
130  Blam::UI::ImGUI::Widgets::ShowHelpMarker("enables compatiability editing of deprecated settings - this will try and apply the settings to their closest counterparts");
131 
132  if (allow_compat_editing)
133  {
134  ImGui::DragFloat("look sensetivity", &look_sensetivity);
135 
136  director->look_sensetivity_horizontal = look_sensetivity;
137  director->look_sensetivity_vertical = look_sensetivity;
138  }
139  else
140  {
141  ImGui::TextDisabled("look sensetivity");
142  }
143  }
144 
145  if (ImGui::CollapsingHeader("2d ortho"))
146  {
147  ImGui::Text("these settings are not directly tied to the director, but are instead used for calibrating the 2D orthographic camera, used for ui");
148 
149  Ogre::Camera* camera2 = Blam::Rendering::Get2DCamera();
150 
151  Ogre::Vector3 camera2_pos = camera2->getPosition();
152  Ogre::Vector3 camera2_angle = camera2->getRealDirection();
153  float fov = camera2->getFOVy().valueDegrees();
154 
155  float near_clip_distance = camera2->getNearClipDistance();
156  float far_clip_distance = camera2->getFarClipDistance();
157 
158  if (ImGui::DragFloat3("camera pos##ortho", (float*)&camera2_pos))
159  {
160  camera2->setPosition(camera2_pos);
161  }
162 
163  if (ImGui::DragFloat3("camera angle##ortho", (float*)&camera2_angle))
164  {
165  camera2->setDirection(camera2_angle);
166  }
167 
168  if (ImGui::DragFloat("field of view##ortho", (float*)&fov))
169  {
170  camera2->setFOVy(Ogre::Radian(BlamStrings::Utils::Math::FloatDegreesToRadians(fov)));
171  }
172 
173  if (ImGui::DragFloat("near clip distance##ortho", &near_clip_distance))
174  {
175  if (near_clip_distance > 0.0f)
176  {
177  camera2->setNearClipDistance(near_clip_distance);
178  }
179  }
180 
181  ImGui::SameLine();
182  Blam::UI::ImGUI::Widgets::ShowHelpMarker(ENGINE_TEXT("director_near_clip_help_text").c_str());
183 
184  if (ImGui::DragFloat("far clip distance##ortho", &far_clip_distance))
185  {
186  camera2->setFarClipDistance(far_clip_distance);
187  }
188 
189  ImGui::SameLine();
190  Blam::UI::ImGUI::Widgets::ShowHelpMarker(ENGINE_TEXT("director_far_clip_help_text").c_str());
191  }
192  }
193  else
194  {
195  ImGui::Text("director is not initialized");
196  }
197 
198  if (director_2d)
199  {
200  if (ImGui::CollapsingHeader("2d director"))
201  {
202  ImGui::DragFloat3("camera pos##2d", (float*)&director_2d->camera_pos);
203  ImGui::DragFloat3("camera direction##2d", (float*)&director_2d->camera_direction);
204  ImGui::DragFloat("zoom##2d", (float*)&director_2d->zoom);
205  ImGui::DragFloat("near clip distance##2d", (float*)&director_2d->near_clip_plane_distance);
206  ImGui::DragFloat("far clip distance##2d", (float*)&director_2d->far_clip_plane_distance);
207  ImGui::Checkbox("lock##2d", &director_2d->lock_camera);
208  }
209  }
210  else
211  {
212  ImGui::Text("2d director is not initialized");
213  }
214  }
215  ImGui::End();
216  }
217 };
BlamDirector::fov_damping
float fov_damping
Spring damping for camera zooming. Only used when enable_zoom_spring is true.
Definition: director.h:132
Blam::Director::GetCamera
BLAM BlamDirector * GetCamera()
Retrieves the director instance.
Definition: director.cpp:36
BlamDirector::fov
float fov
The camera's current field of view.
Definition: director.h:95
BlamDirector2D::zoom
float zoom
Definition: director.h:194
BlamDirector::far_clip_plane_distance
float far_clip_plane_distance
Definition: director.h:118
BlamImGuiWindow_DirectorTool
Class for the Director debug utility.
Definition: director.hpp:13
BlamDirector::camera_angle
BlamVector3 camera_angle
The current looking angle of the camera. X is yaw, Y is pitch, Z is roll (unused atm).
Definition: director.h:85
ImGui::Checkbox
IMGUI_API bool Checkbox(const char *label, bool *v)
Definition: imgui_widgets.cpp:974
BlamImGuiWindow::show
bool show
Controls whether or not the group should be shown. May not be used in all groups.
Definition: imgui.h:34
BlamDirector::fov_spring_scale
float fov_spring_scale
Scale factor to use when calculating zoom springiness. Only used when enable_zoom_spring is true.
Definition: director.h:133
BlamDirector::zoom_increment_count
float zoom_increment_count
The number of steps/increments to use when zooming in and out. Lower numbers will cause the camera to...
Definition: director.h:99
Blam::Director::GetCamera2D
BLAM BlamDirector2D * GetCamera2D()
Definition: director.cpp:69
ImGui::End
IMGUI_API void End()
Definition: imgui.cpp:6016
BlamDirector::near_clip_plane_distance
float near_clip_plane_distance
Definition: director.h:117
BlamDirector::look_accel_rate
float look_accel_rate
Acceleration rate to use when rotating camera. Only used when enable_look_spring is true.
Definition: director.h:128
director.h
Blam::Rendering::Get2DCamera
BLAM Ogre::Camera * Get2DCamera()
Retrieves the camera used to handle 2D rendering.
Definition: ogre.cpp:710
ImGui::SameLine
IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f)
Definition: imgui.cpp:7147
BlamDirector::enable_zoom_spring
bool enable_zoom_spring
Whether or not zoom springiness is enabled. Gives camera zooming a subtle "bounciness".
Definition: director.h:130
BlamDirector::vertical_angle
float vertical_angle
Definition: director.h:115
BlamImGuiWindow
Class representing an ImGUI window.
Definition: imgui.h:31
BlamDirector::camera_right
BlamVector3 camera_right
The calculated point representing the right of the camera.
Definition: director.h:89
BlamDirector::movement_spring_scale
float movement_spring_scale
Scale factor to use when calculating movement springiness. Only used when enable_movement_spring is t...
Definition: director.h:123
BlamDirector::calculate_angle
bool calculate_angle
Definition: director.h:113
ImGui::DragFloat
IMGUI_API bool DragFloat(const char *label, float *v, float v_speed=1.0f, float v_min=0.0f, float v_max=0.0f, const char *format="%.3f", float power=1.0f)
Definition: imgui_widgets.cpp:2164
BlamDirector::accel_increment_count
float accel_increment_count
The number of steps/increments to use when accelerating and decelerating. Lower numbers will cause th...
Definition: director.h:105
Blam::UI::ImGUI::Widgets::ShowHelpMarker
BLAM void ShowHelpMarker(const char *desc)
Shows a help indicator.
Definition: widgets.cpp:7
ImGui::Begin
IMGUI_API bool Begin(const char *name, bool *p_open=NULL, ImGuiWindowFlags flags=0)
Definition: imgui.cpp:5397
ImGui::CollapsingHeader
IMGUI_API bool CollapsingHeader(const char *label, ImGuiTreeNodeFlags flags=0)
Definition: imgui_widgets.cpp:5422
BlamDirector::horizontal_angle
float horizontal_angle
Definition: director.h:114
BlamImGuiWindow_DirectorTool::Draw
void Draw()
Draws the contents of the group.
Definition: director.hpp:20
ImGui::Text
IMGUI_API void Text(const char *fmt,...) IM_FMTARGS(1)
Definition: imgui_widgets.cpp:238
BlamDirector::move_acceleration
bool move_acceleration
Whether or not camera movements should use acceleration.
Definition: director.h:103
BlamDirector::look_spring_stiffness
float look_spring_stiffness
Spring stiffness for camera rotation. Only used when enable_look_spring is true.
Definition: director.h:126
BlamDirector2D::lock_camera
bool lock_camera
Whether or not the camera is locked. If locked, all keyboard/mouse input is ignored.
Definition: director.h:195
BlamDirector::damping
float damping
Spring damping for camera movement. Only used when enable_movement_spring is true.
Definition: director.h:122
BlamDirector::auto_verify_coords
bool auto_verify_coords
Whether or not camera_front and camera_right should be automatically calculated.
Definition: director.h:87
BlamDirector::speed
float speed
The camera's current speed.
Definition: director.h:98
ImGui::DragFloat3
IMGUI_API bool DragFloat3(const char *label, float v[3], float v_speed=1.0f, float v_min=0.0f, float v_max=0.0f, const char *format="%.3f", float power=1.0f)
Definition: imgui_widgets.cpp:2174
BlamDirector::lock_camera
bool lock_camera
Whether or not the camera is locked. If locked, all keyboard/mouse input is ignored.
Definition: director.h:100
BlamDirector::look_acceleration
bool look_acceleration
Whether or not camera looking should use acceleration.
Definition: director.h:104
BlamDirector
Class representing the Director.
Definition: director.h:27
BlamDirector::pancam_lock_xy
bool pancam_lock_xy
Whether or not the camera should be locked to X/Y axis when in pan-cam mode.
Definition: director.h:102
BlamDirector::camera_bouncing
bool camera_bouncing
Whether or not the camera should have a bounce/rubber effect when moving and looking around.
Definition: director.h:106
BlamDirector::tick_based_looking
bool tick_based_looking
Whether or not camera looking should be driven by the game tick.
Definition: director.h:111
BlamDirector::look_damping
float look_damping
Spring damping for camera rotation. Only used when enable_look_spring is true.
Definition: director.h:127
BlamDirector::persistent_look_motion
bool persistent_look_motion
Whether or not to use persistent camera look motion. Only applies when using tick based looking.
Definition: director.h:110
ENGINE_TEXT
#define ENGINE_TEXT(string_id)
Definition: engine_text.h:7
imgui.h
BlamDirector2D::camera_direction
BlamVector3 camera_direction
Definition: director.h:193
ImGui::Separator
IMGUI_API void Separator()
Definition: imgui_widgets.cpp:1284
BlamDirector::fov_spring_stiffness
float fov_spring_stiffness
Spring stiffness for camera zooming. Only used when enable_zoom_spring is true.
Definition: director.h:131
BlamDirector::spring_stiffness
float spring_stiffness
Spring stiffness for camera movement. Only used when enable_movement_spring is true.
Definition: director.h:121
camera2
Ogre::Camera * camera2
Definition: ogre.cpp:101
BlamDirector2D::far_clip_plane_distance
float far_clip_plane_distance
Definition: director.h:198
BlamDirector2D
Definition: director.h:184
BlamDirector::pancam
bool pancam
Whether or not the camera is currently in pan-cam mode. Pan-cam locks Z movement of the camera when n...
Definition: director.h:101
BlamDirector2D::near_clip_plane_distance
float near_clip_plane_distance
Definition: director.h:197
BlamDirector2D::camera_pos
BlamVector3 camera_pos
Definition: director.h:192
BlamDirector::enable_movement_spring
bool enable_movement_spring
Whether or not movement springiness is enabled. Gives camera movement a subtle "bounciness".
Definition: director.h:120
BlamDirector::camera_front
BlamVector3 camera_front
The calculated point representing the front of the camera.
Definition: director.h:88
ImGui::InputFloat
IMGUI_API bool InputFloat(const char *label, float *v, float step=0.0f, float step_fast=0.0f, const char *format="%.3f", ImGuiInputTextFlags flags=0)
Definition: imgui_widgets.cpp:2975
ImGui::TextDisabled
IMGUI_API void TextDisabled(const char *fmt,...) IM_FMTARGS(1)
Definition: imgui_widgets.cpp:272
BlamDirector::camera_pos
BlamVector3 camera_pos
The current position of the camera.
Definition: director.h:84
BlamDirector::enable_look_spring
bool enable_look_spring
Whether or not look springiness is enabled. Gives camera rotation a subtle "bounciness".
Definition: director.h:125
BlamDirector::look_sensetivity_vertical
float look_sensetivity_vertical
The camera's vertical look sensetivity.
Definition: director.h:108
BlamDirector::look_sensetivity_horizontal
float look_sensetivity_horizontal
The camera's horizontal look sensetivity.
Definition: director.h:109