Elaztek Developer Hub
Blamite Game Engine - blam!  00453.06.08.26.0624.blamite
The core library for the Blamite Game Engine.
director.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <Strings/components/classes/events/events.h>
5 
6 #include <vector>
7 #include <map>
8 
9 #ifndef BLAM
10 #define BLAM
11 #endif
12 
27 class BlamDirector : BlamEventListener
28 {
29 private:
30  bool mouse_capture_state_changed = false;
31  int current_speed_index = 0;
32 
38  std::vector<float> camera_speeds = {
39  1.000000f,
40  5.000000f,
41  20.00000f,
42  40.000000f,
43  100.000000f
44  };
45 
46  int viewport_center_x = 0;
47  int viewport_center_y = 0;
48 
49  bool zoom_state_changed = false;
50  float zoom_increment = 0.0f;
51 
55  std::map<BlamDirection, float> move_accelerations = {
56  std::pair<BlamDirection, float>(BlamDirection::Forward, 0.0f),
57  std::pair<BlamDirection, float>(BlamDirection::Backward, 0.0f),
58  std::pair<BlamDirection, float>(BlamDirection::Left, 0.0f),
59  std::pair<BlamDirection, float>(BlamDirection::Right, 0.0f),
60  std::pair<BlamDirection, float>(BlamDirection::Up, 0.0f),
61  std::pair<BlamDirection, float>(BlamDirection::Down, 0.0f)
62  };
63 
64  std::map<BlamDirection, float> look_accelerations = {
65  std::pair<BlamDirection, float>(BlamDirection::Up, 0.0f),
66  std::pair<BlamDirection, float>(BlamDirection::Down, 0.0f),
67  std::pair<BlamDirection, float>(BlamDirection::Left, 0.0f),
68  std::pair<BlamDirection, float>(BlamDirection::Right, 0.0f)
69  };
70 
71  float accel_increment = 0.0f;
72 
73  BlamVector3 camera_velocity = BlamVector3();
74  BlamVector3 camera_coast_velocity = BlamVector3();
75  BlamVector3 camera_spring_velocity = BlamVector3();
76  BlamVector2 look_input_accumulator = BlamVector2();
77  BlamVector2 look_velocity = BlamVector2();
78  BlamVector2 look_coast_velocity = BlamVector2();
79  BlamVector2 look_spring_velocity = BlamVector2();
80  bool look_was_turning = false;
81  float fov_spring_velocity = 0.0f;
82 
83 public:
84  BlamVector3 camera_pos = BlamVector3();
85  BlamVector3 camera_angle = BlamVector3();
86 
87  bool auto_verify_coords = true;
88  BlamVector3 camera_front = BlamVector3();
89  BlamVector3 camera_right = BlamVector3();
90 
91  bool mouse_capture_ready = false;
93 
94  bool mouse_captured = false;
95  float fov = 70.0f;
96  float fov_normal = 70.0f;
97  float fov_zoomed = 20.0f;
98  float speed = 1.0f;
99  float zoom_increment_count = 30;
100  bool lock_camera = false;
101  bool pancam = true;
102  bool pancam_lock_xy = false;
103  bool move_acceleration = true;
104  bool look_acceleration = false;
106  bool camera_bouncing = true;
107  bool zoomed = false;
110  bool persistent_look_motion = false;
111  bool tick_based_looking = false;
112 
113  bool calculate_angle = true;
114  float horizontal_angle = 0.0f;
115  float vertical_angle = 0.0f;
116 
118  float far_clip_plane_distance = 100.0f;
119 
121  float spring_stiffness = 0.3f;
122  float damping = 0.6f;
123  float movement_spring_scale = 1.0f;
124 
125  bool enable_look_spring = true;
126  float look_spring_stiffness = 0.3f;
127  float look_damping = 0.6f;
128  float look_accel_rate = 0.3f;
129 
130  bool enable_zoom_spring = true;
131  float fov_spring_stiffness = 0.05f;
132  float fov_damping = 0.8f;
133  float fov_spring_scale = 0.45f;
134 
138  BlamDirector();
139 
143  ~BlamDirector();
144 
145  void OnNewFrameEvent(NewFrameEvent* event) override;
146  void OnTickEvent(TickEvent* event) override;
147  void OnMouseMoveEvent(MouseMoveEvent* event) override;
148  void OnMouseClickEvent(MouseClickEvent* event) override;
149  void OnKeyPressEvent(KeyPressEvent* event) override;
150 
163  BlamVector3 MoveCamera(BlamDirection direction, float acceleration);
164 
172  void ValidateCameraCoords();
173 
174  void CalculateCameraAngles();
175 
181  void SetCameraSpeed(float _speed);
182 };
183 
184 class BlamDirector2D : BlamEventListener
185 {
186 private:
187  BlamVector3 click_start_camera_pos = BlamVector3();
188  BlamVector2 click_start_point = BlamVector2();
189  bool clicking = false;
190 
191 public:
192  BlamVector3 camera_pos = BlamVector3();
193  BlamVector3 camera_direction = { 0, 0, 1 };
194  float zoom = 0.0f;
195  bool lock_camera = false;
196 
197  float near_clip_plane_distance = 0.000001f;
198  float far_clip_plane_distance = 100000.0f;
199 
200  BlamDirector2D();
201 
202  void OnMouseMoveEvent(MouseMoveEvent* event) override;
203  void OnMouseClickEvent(MouseClickEvent* event) override;
204  void OnMouseUnclickEvent(MouseUnclickEvent* event) override;
205  void OnKeyPressEvent(KeyPressEvent* event) override;
206  void OnMouseWheelEvent(MouseWheelEvent* event) override;
207 };
208 
212 namespace Blam::Director
213 {
217  BLAM void PrepareCamera();
218 
222  BLAM void ShutdownCamera();
223 
230 
231  BLAM void SetCamera2DMode(bool use_2d, bool copy_from_last = false);
232 
234 
235  BLAM bool Use2DCamera();
236 }
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
tag_block::entry_size
int entry_size
The size of each block entry.
Definition: tags.h:253
Blam::World::GetWorldState
BLAM BlamWorldState * GetWorldState()
Retrieves the current world state.
Definition: world.cpp:56
BlamDirector::OnMouseMoveEvent
void OnMouseMoveEvent(MouseMoveEvent *event) override
Definition: BlamDirectorCamera.cpp:428
tag_io.h
BlamDirector::mouse_captured
bool mouse_captured
Whether or not the mouse is currently being captured by the camera.
Definition: director.h:94
BlamDirector::BlamDirector
BlamDirector()
Initializes the camera.
Definition: BlamDirectorCamera.cpp:19
BLAM
#define BLAM
Definition: director.h:10
BlamDirector::OnTickEvent
void OnTickEvent(TickEvent *event) override
Definition: BlamDirectorCamera.cpp:97
SDLK_w
@ SDLK_w
Definition: SdlEmulationLayer.h:453
tag_block::entry_data_address
void * entry_data_address
The address of the blocks' entry data.
Definition: tags.h:255
Blam::Logger::LogEvent
BLAM void LogEvent(std::string message)
Logs a message to the log and/or console.
Definition: aliases.cpp:130
BlamDirector2D::OnMouseClickEvent
void OnMouseClickEvent(MouseClickEvent *event) override
Definition: BlamDirector2D.cpp:42
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
tag_block< void >
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
Blam::Input::GetMousePosition
BLAM BlamVector2 GetMousePosition()
Definition: mouse.cpp:101
logger.h
Blam::Content::Tags::CreateTag
BLAM bool CreateTag(std::string tag_class, BlamTagData **tag_data)
Creates a new tag in memory, making it available throughout the engine.
Definition: tags.cpp:41
BlamDirector::OnKeyPressEvent
void OnKeyPressEvent(KeyPressEvent *event) override
Definition: BlamDirectorCamera.cpp:575
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
ValidateDynamicTagFolders
void ValidateDynamicTagFolders()
Definition: tags.cpp:29
BlamDirector2D::OnKeyPressEvent
void OnKeyPressEvent(KeyPressEvent *event) override
Definition: BlamDirector2D.cpp:61
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
keyboard.h
Blam::Director::Use2DCamera
BLAM bool Use2DCamera()
Definition: director.cpp:74
Blam::Content::Tags::GetLoadedTags
BLAM std::vector< BlamTagData * > * GetLoadedTags()
Retrieves the list of loaded tag data.
Definition: tags.cpp:157
BlamDirector::mouse_capture_ready
bool mouse_capture_ready
Whether or not the mouse is ready to be captured.
Definition: director.h:91
world.h
Blam::Director::GetCamera2D
BLAM BlamDirector2D * GetCamera2D()
Definition: director.cpp:69
SDLK_r
@ SDLK_r
Definition: SdlEmulationLayer.h:448
BlamDirector::near_clip_plane_distance
float near_clip_plane_distance
Definition: director.h:117
UsingBgfx
bool UsingBgfx()
Definition: bgfx.cpp:63
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
BlamDirector::fov_normal
float fov_normal
The camera's default field of view.
Definition: director.h:96
Blam::Content::Tags::GetTagClass
BLAM_EXT_API BlamTagClass * GetTagClass(std::string id)
Retrieves a tag class that matches the given string.
Definition: tagclass.cpp:72
director.h
camera
Definition: camera.h:24
BlamDirector::MoveCamera
BlamVector3 MoveCamera(BlamDirection direction, float acceleration)
Moves the camera one "step" in the given direction.
Definition: BlamDirectorCamera.cpp:590
USER_DATA_PATH
#define USER_DATA_PATH(path)
Macro to quickly access a user data folder.
Definition: config.h:41
rendering.h
SDLK_f
@ SDLK_f
Definition: SdlEmulationLayer.h:436
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
Blam::Input::IsMouseButtonDown
BLAM bool IsMouseButtonDown(uint8_t button)
Checks if a given mouse button is down.
Definition: mouse.cpp:88
Blam::Director::PrepareCamera
BLAM void PrepareCamera()
Prepares the director for use.
Definition: director.cpp:7
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
Blam::Content::Tags::GetRegisteredTagClasses
BLAM_EXT_API std::vector< BlamTagClass * > * GetRegisteredTagClasses()
Retrieves the list of all registered tag classes.
Definition: tagclass.cpp:90
BlamDirector::calculate_angle
bool calculate_angle
Definition: director.h:113
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::Director
Namespace for things related to the debug camera (director).
Definition: director.h:212
camera_2d
BlamDirector2D * camera_2d
Definition: director.cpp:4
loaded_tags
std::vector< BlamTagData * > loaded_tags
Definition: tags.cpp:14
SDLK_d
@ SDLK_d
Definition: SdlEmulationLayer.h:434
BlamDirector::OnNewFrameEvent
void OnNewFrameEvent(NewFrameEvent *event) override
Definition: BlamDirectorCamera.cpp:34
BlamDirector::horizontal_angle
float horizontal_angle
Definition: director.h:114
BlamTagClass::ShowImPropertyEditor
void ShowImPropertyEditor()
Shows a series of ImGUI controls used to modify tag data with a simple UI.
Definition: BlamTagClass.cpp:13
tag_block::entry_count
int entry_count
The number of entries within the tag block.
Definition: tags.h:256
BlamDirector::move_acceleration
bool move_acceleration
Whether or not camera movements should use acceleration.
Definition: director.h:103
SDLK_LSHIFT
@ SDLK_LSHIFT
Definition: SdlEmulationLayer.h:608
BlamDirector2D::OnMouseWheelEvent
void OnMouseWheelEvent(MouseWheelEvent *event) override
Definition: BlamDirector2D.cpp:66
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
tag_reference
Structure representing a tag reference.
Definition: tags.h:289
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
BlamTagClass::class_name_long
std::string class_name_long
The longer class name. Typically shown alongside short name for user-friendliness.
Definition: tags.h:205
Blam::Director::ShutdownCamera
BLAM void ShutdownCamera()
Destroys the director and cleans up any data related to it.
Definition: director.cpp:31
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
Blam::Content::Tags::GetTagData
BLAM BlamTagData * GetTagData(std::string tag_path)
Retrieves information for a given tag.
Definition: tags.cpp:81
Blam::Content::Tags::ResolveAllTagReferences
BLAM void ResolveAllTagReferences()
Attempts to resolve all tag references within all loaded tags.
Definition: tags.cpp:73
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
BlamDirector2D::OnMouseUnclickEvent
void OnMouseUnclickEvent(MouseUnclickEvent *event) override
Definition: BlamDirector2D.cpp:52
ReleaseTagSectionData
void ReleaseTagSectionData(char *address, int size)
Releases a tag data section.
Definition: tags.cpp:107
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
TagOrigin::Memory
@ Memory
Indicates the tag originated from the engine's memory.
engine_definitions.h
tag_reference::data_is_tag
bool data_is_tag
Whether or not tagref_address points to tag data, or the tag's path.
Definition: tags.h:296
BlamDirector::zoomed
bool zoomed
Whether or not the camera is currently zoomed in.
Definition: director.h:107
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
registered_classes
std::vector< BlamTagClass * > registered_classes
List of all registered tag classes.
Definition: tagclass.cpp:70
data_reference::data_address
void * data_address
The address of the referenced data.
Definition: tags.h:346
last_created_tag
int last_created_tag
Definition: tags.cpp:15
BlamDirector::tick_based_looking
bool tick_based_looking
Whether or not camera looking should be driven by the game tick.
Definition: director.h:111
Blam::Input::IsKeyDown
BLAM bool IsKeyDown(SDL_Keycode key)
Checks if a given key is down.
Definition: keyboard.cpp:144
Blam::Content::Tags::LoadReferencedTags
BLAM void LoadReferencedTags(std::string tag_path)
Adds an additional folder to search when attempting to load a tag.
Definition: tag_io.cpp:60
Blam::API::v1::Hooking::GetEngineHookState
BLAM_EXT_API bool GetEngineHookState()
Retrieves the engine's hook state.
Definition: hooking.cpp:14
BlamDirector::look_damping
float look_damping
Spring damping for camera rotation. Only used when enable_look_spring is true.
Definition: director.h:127
camera
BlamDirector * camera
Definition: director.cpp:3
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
data_reference
Structure representing a data reference.
Definition: tags.h:342
BlamTagClass::tag_size
int tag_size
The size of the tag's data. Used on loading/writing tag files.
Definition: tags.h:210
Blam::Logger::LogEventForce
BLAM void LogEventForce(std::string message)
Forcibly logs a message to the log and/or console.
Definition: aliases.cpp:262
BlamDirector::OnMouseClickEvent
void OnMouseClickEvent(MouseClickEvent *event) override
Definition: BlamDirectorCamera.cpp:560
BlamDirector::SetCameraSpeed
void SetCameraSpeed(float _speed)
Sets the camera's speed, while also sending a log message indicating that the speed has been changed.
Definition: BlamDirectorCamera.cpp:967
Blam::Content::Tags::CleanupTagData
BLAM void CleanupTagData()
Releases all memory used by tags.
Definition: tags.cpp:136
BlamTagData::address
void * address
The address pointing to the start of the tag's data.
Definition: tags.h:132
BlamDirector2D::camera_direction
BlamVector3 camera_direction
Definition: director.h:193
Blam::Content::Tags::ShowImPropertyEditor
BLAM void ShowImPropertyEditor(void *tag, std::string tag_class)
Shows an ImGUI editor for a given tag.
Definition: tags.cpp:17
tagclass.h
config.h
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
tags.h
BlamTagData::origin
TagOrigin origin
The origin of the tag.
Definition: tags.h:147
SDLK_a
@ SDLK_a
Definition: SdlEmulationLayer.h:431
BlamDirector::spring_stiffness
float spring_stiffness
Spring stiffness for camera movement. Only used when enable_movement_spring is true.
Definition: director.h:121
TagOrigin::BinaryFile
@ BinaryFile
Indicates the tag originated from a binary file.
BlamTagData
Class used to contain and access tag data.
Definition: tags.h:125
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
BlamTagClass::SetMemoryLocation
void SetMemoryLocation(void *address)
Sets the address and size of the tag that this class should be applied to.
Definition: BlamTagClass.cpp:21
BlamDirector::ValidateCameraCoords
void ValidateCameraCoords()
If auto_verify_coords is set to true, this will verify all camera coordinates.
Definition: BlamDirectorCamera.cpp:902
BlamDirector2D::camera_pos
BlamVector3 camera_pos
Definition: director.h:192
tag_reference::tagref_address
void * tagref_address
The address of the tagref data.
Definition: tags.h:295
use_2d_camera
bool use_2d_camera
Definition: director.cpp:5
BlamUserDataFolder::Tags
@ Tags
Directory storing user-created tags. Defaults to {DataRoot}/tags/.
ImGui::NewFrame
IMGUI_API void NewFrame()
Definition: imgui.cpp:3689
Blam::Director::SetCamera2DMode
BLAM void SetCamera2DMode(bool use_2d, bool copy_from_last=false)
Definition: director.cpp:41
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
BlamTagData::size
int size
The size of the tag's data in memory.
Definition: tags.h:133
SDLK_s
@ SDLK_s
Definition: SdlEmulationLayer.h:449
BlamDirector::camera_front
BlamVector3 camera_front
The calculated point representing the front of the camera.
Definition: director.h:88
BlamDirector::mouse_capture_delay_ticks
int mouse_capture_delay_ticks
The remaining number of game ticks to wait before truly capturing the mouse.
Definition: director.h:92
BlamDirector::camera_pos
BlamVector3 camera_pos
The current position of the camera.
Definition: director.h:84
BlamDirector::fov_zoomed
float fov_zoomed
The camera's field of view while zoomed in.
Definition: director.h:97
BlamDirector::CalculateCameraAngles
void CalculateCameraAngles()
Definition: BlamDirectorCamera.cpp:934
BlamTagClass
Class representing a tag class.
Definition: tags.h:202
BlamDirector::look_sensetivity_vertical
float look_sensetivity_vertical
The camera's vertical look sensetivity.
Definition: director.h:108
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::~BlamDirector
~BlamDirector()
Destroys the camera.
Definition: BlamDirectorCamera.cpp:29
BlamDirector2D::OnMouseMoveEvent
void OnMouseMoveEvent(MouseMoveEvent *event) override
Definition: BlamDirector2D.cpp:23
Blam::GetMainWindowHandle
BLAM SDL_Window * GetMainWindowHandle()
Retrieves the main window handle of the application, when using SDL.
Definition: main.cpp:629
BlamDirector2D::BlamDirector2D
BlamDirector2D()
Definition: BlamDirector2D.cpp:13
api.h
Blam::Input::SetMouseHidden
BLAM void SetMouseHidden(bool hide)
Definition: mouse.cpp:169
BlamDirector::look_sensetivity_horizontal
float look_sensetivity_horizontal
The camera's horizontal look sensetivity.
Definition: director.h:109