Elaztek Developer Hub
Blamite Game Engine - blam!  00398.09.22.23.2015.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 
52  std::map<BlamDirection, float> move_accelerations = {
53  std::pair<BlamDirection, float>(BlamDirection::Forward, 0.0f),
54  std::pair<BlamDirection, float>(BlamDirection::Backward, 0.0f),
55  std::pair<BlamDirection, float>(BlamDirection::Left, 0.0f),
56  std::pair<BlamDirection, float>(BlamDirection::Right, 0.0f),
57  std::pair<BlamDirection, float>(BlamDirection::Up, 0.0f),
58  std::pair<BlamDirection, float>(BlamDirection::Down, 0.0f)
59  };
60 
61  std::map<BlamDirection, float> look_accelerations = {
62  std::pair<BlamDirection, float>(BlamDirection::Up, 0.0f),
63  std::pair<BlamDirection, float>(BlamDirection::Down, 0.0f),
64  std::pair<BlamDirection, float>(BlamDirection::Left, 0.0f),
65  std::pair<BlamDirection, float>(BlamDirection::Right, 0.0f)
66  };
67 
68  float accel_increment = 0.0f;
69 
70  int move_finished_tick = -1;
71  bool bounce_needed = false;
72  bool currently_bouncing = false;
73  bool bounceback_done = false;
74  bool bounceforward_done = false;
75 
76 public:
77  BlamVector3 camera_pos = BlamVector3();
78  BlamVector3 camera_angle = BlamVector3();
79 
80  bool auto_verify_coords = true;
81  BlamVector3 camera_front = BlamVector3();
82  BlamVector3 camera_right = BlamVector3();
83 
84  bool mouse_captured = false;
85  float fov = 70.0f;
86  float fov_normal = 70.0f;
87  float fov_zoomed = 20.0f;
88  float speed = 1.0f;
89  //float look_sensetivity = 0.25f; //!< The camera's look sensetivity.
90  float zoom_increment_count = 30;
91  bool lock_camera = false;
92  bool pancam = true;
93  bool pancam_lock_xy = false;
94  bool move_acceleration = true;
95  bool look_acceleration = false;
96  float accel_increment_count = 30;
97  bool camera_bouncing = false;
98  bool zoomed = false;
99  float look_sensetivity_vertical = 0.35f;
101  bool persistent_look_motion = false;
102  bool tick_based_looking = false;
103 
104  bool calculate_angle = true;
105  float horizontal_angle = 0.0f;
106  float vertical_angle = 0.0f;
107 
109  float far_clip_plane_distance = 100.0f;
110 
114  BlamDirector();
115 
119  ~BlamDirector();
120 
121  void OnNewFrameEvent(NewFrameEvent* event);
122  void OnTickEvent(TickEvent* event);
123  void OnMouseMoveEvent(MouseMoveEvent* event);
124  void OnMouseClickEvent(MouseClickEvent* event);
125  void OnKeyPressEvent(KeyPressEvent* event);
126 
139  void MoveCamera(BlamDirection direction, float acceleration);
140 
148  void ValidateCameraCoords();
149 
155  void SetCameraSpeed(float _speed);
156 };
157 
161 namespace Blam::Director
162 {
166  BLAM void PrepareCamera();
167 
171  BLAM void ShutdownCamera();
172 
179 }
Blam::Director::GetCamera
BLAM BlamDirector * GetCamera()
Retrieves the director instance.
Definition: director.cpp:31
tag_block::entry_size
int entry_size
The size of each block entry.
Definition: tags.h:179
BlamDirector::OnTickEvent
void OnTickEvent(TickEvent *event)
Definition: BlamDirectorCamera.cpp:84
tag_io.h
BlamDirector::mouse_captured
bool mouse_captured
Whether or not the mouse is currently being captured by the camera.
Definition: director.h:84
BlamDirector::BlamDirector
BlamDirector()
Initializes the camera.
Definition: BlamDirectorCamera.cpp:17
BLAM
#define BLAM
Definition: director.h:10
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:181
Blam::Logger::LogEvent
BLAM void LogEvent(std::string message)
Logs a message to the log and/or console.
Definition: aliases.cpp:142
BlamDirector::fov
float fov
The camera's current field of view.
Definition: director.h:85
BlamDirector::far_clip_plane_distance
float far_clip_plane_distance
Definition: director.h:109
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:78
logger.h
ValidateDynamicTagFolders
void ValidateDynamicTagFolders()
Definition: tags.cpp:29
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:90
keyboard.h
Blam::Content::Tags::GetLoadedTags
BLAM std::vector< BlamTagData * > * GetLoadedTags()
Retrieves the list of loaded tag data.
Definition: tags.cpp:151
BlamTagData::path
char path[256]
The tag's path.
Definition: tags.h:84
world.h
SDLK_r
@ SDLK_r
Definition: SdlEmulationLayer.h:448
BlamDirector::OnKeyPressEvent
void OnKeyPressEvent(KeyPressEvent *event)
Definition: BlamDirectorCamera.cpp:442
BlamDirector::near_clip_plane_distance
float near_clip_plane_distance
Definition: director.h:108
BlamDirector::OnNewFrameEvent
void OnNewFrameEvent(NewFrameEvent *event)
Definition: BlamDirectorCamera.cpp:32
BlamDirector::fov_normal
float fov_normal
The camera's default field of view.
Definition: director.h:86
Blam::Content::Tags::GetTagClass
BLAM_EXT_API BlamTagClass * GetTagClass(std::string id)
Retrieves a tag class that matches the given string.
Definition: tagclass.cpp:64
director.h
USER_DATA_PATH
#define USER_DATA_PATH(path)
Macro to quickly access a user data folder.
Definition: config.h:43
SDLK_f
@ SDLK_f
Definition: SdlEmulationLayer.h:436
BlamDirector::vertical_angle
float vertical_angle
Definition: director.h:106
Blam::Input::IsMouseButtonDown
BLAM bool IsMouseButtonDown(uint8_t button)
Definition: mouse.cpp:60
Blam::Director::PrepareCamera
BLAM void PrepareCamera()
Prepares the director for use.
Definition: director.cpp:5
BlamDirector::camera_right
BlamVector3 camera_right
The calculated point representing the right of the camera.
Definition: director.h:82
Blam::GetEngineHookState
BLAM bool GetEngineHookState()
Retrieves the engine's hook state.
Definition: blam_api.cpp:17
Blam::Content::Tags::GetRegisteredTagClasses
BLAM_EXT_API std::vector< BlamTagClass * > * GetRegisteredTagClasses()
Retrieves the list of all registered tag classes.
Definition: tagclass.cpp:82
BlamDirector::calculate_angle
bool calculate_angle
Definition: director.h:104
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:96
Blam::Director
Namespace for things related to the debug camera (director).
Definition: director.h:161
loaded_tags
std::vector< BlamTagData * > loaded_tags
Definition: tags.cpp:14
SDLK_d
@ SDLK_d
Definition: SdlEmulationLayer.h:434
BlamDirector::horizontal_angle
float horizontal_angle
Definition: director.h:105
BlamTagData::SetTagPath
bool SetTagPath(std::string new_path)
Updates the tag path.
Definition: BlamTagData.cpp:31
BlamTagClass::ShowImPropertyEditor
void ShowImPropertyEditor()
Shows a series of ImGUI controls used to modify tag data with a simple UI.
Definition: BlamTagClass.cpp:12
tag_block::entry_count
int entry_count
The number of entries within the tag block.
Definition: tags.h:182
BlamDirector::move_acceleration
bool move_acceleration
Whether or not camera movements should use acceleration.
Definition: director.h:94
SDLK_LSHIFT
@ SDLK_LSHIFT
Definition: SdlEmulationLayer.h:608
tag_reference
Structure representing a tag reference.
Definition: tags.h:215
BlamTagClass::class_name_long
std::string class_name_long
The longer class name. Typically shown alongside short name for user-friendliness.
Definition: tags.h:134
Blam::Director::ShutdownCamera
BLAM void ShutdownCamera()
Destroys the director and cleans up any data related to it.
Definition: director.cpp:26
BlamDirector::auto_verify_coords
bool auto_verify_coords
Whether or not camera_front and camera_right should be automatically calculated.
Definition: director.h:80
BlamDirector::speed
float speed
The camera's current speed.
Definition: director.h:88
Blam::Content::Tags::GetTagData
BLAM BlamTagData * GetTagData(std::string tag_path)
Retrieves information for a given tag.
Definition: tags.cpp:80
Blam::Content::Tags::ResolveAllTagReferences
BLAM void ResolveAllTagReferences()
Attempts to resolve all tag references within all loaded tags.
Definition: tags.cpp:72
it
ARPHIC PUBLIC LICENSE Ltd Yung Chi Taiwan All rights reserved except as specified below Everyone is permitted to copy and distribute verbatim copies of this license but changing it is forbidden Preamble The licenses for most software are designed to take away your freedom to share and change it By the ARPHIC PUBLIC LICENSE specifically permits and encourages you to use this provided that you give the recipients all the rights that we gave you and make sure they can get the modifications of this software Legal Terms Font means the TrueType fonts AR PL Mingti2L AR PL KaitiM AR PL KaitiM and the derivatives of those fonts created through any modification including modifying reordering converting changing font or adding deleting some characters in from glyph table PL means Public License Copyright Holder means whoever is named in the copyright or copyrights for the Font You means the or person redistributing or modifying the Font Freely Available means that you have the freedom to copy or modify the Font as well as redistribute copies of the Font under the same conditions you not price If you you can charge for this service Copying &Distribution You may copy and distribute verbatim copies of this Font in any without provided that you retain this license including modifying reordering converting changing font or adding deleting some characters in from glyph and copy and distribute such modifications under the terms of Section provided that the following conditions are such as by offering access to copy the modifications from a designated or distributing the modifications on a medium customarily used for software interchange c If the modified fonts normally reads commands interactively when you must cause it
Definition: ARPHICPL.TXT:36
BlamDirector::lock_camera
bool lock_camera
Whether or not the camera is locked. If locked, all keyboard/mouse input is ignored.
Definition: director.h:91
ReleaseTagSectionData
void ReleaseTagSectionData(char *address, int size)
Releases a tag data section.
Definition: tags.cpp:101
BlamDirector::look_acceleration
bool look_acceleration
Whether or not camera looking should use acceleration.
Definition: director.h:95
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:93
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:222
BlamDirector::zoomed
bool zoomed
Whether or not the camera is currently zoomed in.
Definition: director.h:98
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:97
registered_classes
std::vector< BlamTagClass * > registered_classes
List of all registered tag classes.
Definition: tagclass.cpp:62
Blam::Content::Tags::RegisterCreatedTag
BLAM bool RegisterCreatedTag(void *tag, std::string tag_class)
Registers a tag created in memory, making it available throughout the engine.
Definition: tags.cpp:41
data_reference::data_address
void * data_address
The address of the referenced data.
Definition: tags.h:265
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:102
Blam::Input::IsKeyDown
BLAM bool IsKeyDown(SDL_Keycode key)
Definition: keyboard.cpp:204
Blam::Content::Tags::LoadReferencedTags
BLAM void LoadReferencedTags(std::string tag_path)
Attempts to resolve any tag references within a given tag.
Definition: tag_io.cpp:58
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:101
data_reference
Structure representing a data reference.
Definition: tags.h:261
blam_api.h
BlamTagClass::tag_size
int tag_size
The size of the tag's data. Used on loading/writing tag files.
Definition: tags.h:139
core.h
Blam::Logger::LogEventForce
BLAM void LogEventForce(std::string message)
Forcibly logs a message to the log and/or console.
Definition: aliases.cpp:274
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:804
Blam::Content::Tags::CleanupTagData
BLAM void CleanupTagData()
Releases all memory used by tags.
Definition: tags.cpp:130
BlamTagData::address
void * address
The address pointing to the start of the tag's data.
Definition: tags.h:71
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
tags.h
BlamTagData::origin
TagOrigin origin
The origin of the tag.
Definition: tags.h:86
SDLK_a
@ SDLK_a
Definition: SdlEmulationLayer.h:431
TagOrigin::BinaryFile
@ BinaryFile
Indicates the tag originated from a binary file.
BlamTagData
Class used to contain and access tag data.
Definition: tags.h:68
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:92
BlamDirector::OnMouseClickEvent
void OnMouseClickEvent(MouseClickEvent *event)
Definition: BlamDirectorCamera.cpp:427
BlamTagClass::SetMemoryLocation
void SetMemoryLocation(void *address)
Sets the address and size of the tag that this class should be applied to.
Definition: BlamTagClass.cpp:20
BlamDirector::ValidateCameraCoords
void ValidateCameraCoords()
If auto_verify_coords is set to true, this will verify all camera coordinates.
Definition: BlamDirectorCamera.cpp:742
tag_reference::tagref_address
void * tagref_address
The address of the tagref data.
Definition: tags.h:221
BlamUserDataFolder::Tags
@ Tags
Directory storing user-created tags. Defaults to {DataRoot}/tags/.
ImGui::NewFrame
IMGUI_API void NewFrame()
Definition: imgui.cpp:3689
BlamDirector::OnMouseMoveEvent
void OnMouseMoveEvent(MouseMoveEvent *event)
Definition: BlamDirectorCamera.cpp:355
BlamTagData::size
int size
The size of the tag's data in memory.
Definition: tags.h:72
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:81
BlamDirector::camera_pos
BlamVector3 camera_pos
The current position of the camera.
Definition: director.h:77
BlamDirector::fov_zoomed
float fov_zoomed
The camera's field of view while zoomed in.
Definition: director.h:87
BlamTagClass
Class representing a tag class.
Definition: tags.h:131
BlamDirector::look_sensetivity_vertical
float look_sensetivity_vertical
The camera's vertical look sensetivity.
Definition: director.h:99
BlamDirector::~BlamDirector
~BlamDirector()
Destroys the camera.
Definition: BlamDirectorCamera.cpp:27
BlamDirector::MoveCamera
void MoveCamera(BlamDirection direction, float acceleration)
Moves the camera one "step" in the given direction.
Definition: BlamDirectorCamera.cpp:457
Blam::GetMainWindowHandle
BLAM SDL_Window * GetMainWindowHandle()
Retrieves the main window handle of the application, when using SDL.
Definition: main.cpp:729
BlamDirector::look_sensetivity_horizontal
float look_sensetivity_horizontal
The camera's horizontal look sensetivity.
Definition: director.h:100
BlamTagData::tag_class
std::string tag_class
The tag's short class name.
Definition: tags.h:85