aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorheavydemon21 <nielsstunnebrink1@gmail.com>2024-12-06 20:09:09 +0100
committerheavydemon21 <nielsstunnebrink1@gmail.com>2024-12-06 20:09:09 +0100
commit81de5e68ba6cf5cd8bc64c3fc0eecef84c417b61 (patch)
tree144b0e9efecd4c10d6d79a17b4bf571336d45961
parent5eedba3a070c3a7a4f27ae3ec7dd41812695f7e9 (diff)
parentfdb4c99e139a264d4e15e6913a3756fc6cccb2f2 (diff)
Merge branch 'master' into niels/decoupling_pixel_and_pos
-rw-r--r--src/crepe/Collider.h2
-rw-r--r--src/crepe/Component.h2
-rw-r--r--src/crepe/api/Animator.cpp6
-rw-r--r--src/crepe/api/Animator.h58
-rw-r--r--src/crepe/api/AssetManager.h6
-rw-r--r--src/crepe/api/BoxCollider.h2
-rw-r--r--src/crepe/api/Button.h6
-rw-r--r--src/crepe/api/CMakeLists.txt4
-rw-r--r--src/crepe/api/CircleCollider.h2
-rw-r--r--src/crepe/api/Config.h5
-rw-r--r--src/crepe/api/EventHandler.h34
-rw-r--r--src/crepe/api/GameObject.h12
-rw-r--r--src/crepe/api/Metadata.h2
-rw-r--r--src/crepe/api/Rigidbody.h28
-rw-r--r--src/crepe/api/Scene.h4
-rw-r--r--src/crepe/api/Script.h2
-rw-r--r--src/crepe/api/Sprite.h38
-rw-r--r--src/crepe/api/Transform.h2
-rw-r--r--src/crepe/facade/SDLContext.h28
-rw-r--r--src/crepe/facade/Sound.h2
-rw-r--r--src/crepe/manager/ComponentManager.h30
-rw-r--r--src/crepe/manager/EventManager.h28
-rw-r--r--src/crepe/system/CollisionSystem.h65
-rw-r--r--src/crepe/system/ParticleSystem.h10
-rw-r--r--src/crepe/system/PhysicsSystem.h4
-rw-r--r--src/crepe/system/RenderSystem.cpp3
-rw-r--r--src/crepe/system/RenderSystem.h8
-rw-r--r--src/crepe/system/ScriptSystem.h2
-rw-r--r--src/test/Profiling.cpp25
29 files changed, 200 insertions, 220 deletions
diff --git a/src/crepe/Collider.h b/src/crepe/Collider.h
index a08a68e..42ccfd4 100644
--- a/src/crepe/Collider.h
+++ b/src/crepe/Collider.h
@@ -15,7 +15,7 @@ public:
*
* The `offset` defines the positional shift applied to the collider relative to the position of the rigidbody it is attached to.
* This allows the collider to be placed at a different position than the rigidbody.
- *
+ *
*/
vec2 offset;
};
diff --git a/src/crepe/Component.h b/src/crepe/Component.h
index dc17721..c30419d 100644
--- a/src/crepe/Component.h
+++ b/src/crepe/Component.h
@@ -8,7 +8,7 @@ class ComponentManager;
/**
* \brief Base class for all components
- *
+ *
* This class is the base class for all components. It provides a common interface for all
* components.
*/
diff --git a/src/crepe/api/Animator.cpp b/src/crepe/api/Animator.cpp
index 154135f..b8a91dc 100644
--- a/src/crepe/api/Animator.cpp
+++ b/src/crepe/api/Animator.cpp
@@ -7,10 +7,10 @@
using namespace crepe;
-Animator::Animator(uint32_t id, Sprite & ss, unsigned int max_row, unsigned int max_col,
- const Animator::Data & data)
+Animator::Animator(game_object_id_t id, Sprite & spritesheet, unsigned int max_row,
+ unsigned int max_col, const Animator::Data & data)
: Component(id),
- spritesheet(ss),
+ spritesheet(spritesheet),
max_rows(max_row),
max_columns(max_col),
data(data) {
diff --git a/src/crepe/api/Animator.h b/src/crepe/api/Animator.h
index 23d29f6..7c850b8 100644
--- a/src/crepe/api/Animator.h
+++ b/src/crepe/api/Animator.h
@@ -1,10 +1,9 @@
#pragma once
-#include <sys/types.h>
+#include "../types.h"
#include "Component.h"
#include "Sprite.h"
-#include "types.h"
namespace crepe {
@@ -21,55 +20,31 @@ class SDLContext;
class Animator : public Component {
public:
struct Data {
-
//! frames per second for animation
unsigned int fps = 1;
-
//! The current col being animated.
unsigned int col = 0;
-
//! The current row being animated.
unsigned int row = 0;
-
//! should the animation loop
bool looping = false;
-
//! starting frame for cycling
unsigned int cycle_start = 0;
-
- //! end frame for cycling (-1 --> use last frame)
+ //! end frame for cycling (-1 = use last frame)
int cycle_end = -1;
-
- //! offset in pixels.
- // TODO implement
- unsigned int white_space = 0;
};
public:
- /**
- * \brief Animator will repeat the animation
- *
- */
+ //! Animator will repeat the animation
void loop();
-
- /**
- * \brief starts the animation
- *
- */
+ //! starts the animation
void play();
- /**
- * \brief pauses the animation
- *
- * sets the active false
- *
- */
+ //! pauses the animation
void pause();
-
/**
* \brief stops the animation
*
* sets the active on false and resets all the current rows and columns
- *
*/
void stop();
/**
@@ -81,8 +56,8 @@ public:
/**
* \brief set the range in the row
*
- * \param start of row animation
- * \param end of row animation
+ * \param start of row animation
+ * \param end of row animation
*/
void set_cycle_range(int start, int end);
/**
@@ -91,11 +66,7 @@ public:
* \param col animation column
*/
void set_anim(int col);
-
- /**
- * \brief will go to the next animaiton of current row
- *
- */
+ //! will go to the next animaiton of current row
void next_anim();
public:
@@ -103,7 +74,7 @@ public:
* \brief Constructs an Animator object that will control animations for a sprite sheet.
*
* \param id The unique identifier for the component, typically assigned automatically.
- * \param ss the reference to the spritesheet
+ * \param spritesheet the reference to the spritesheet
* \param max_row maximum of rows inside the given spritesheet
* \param max_col maximum of columns inside the given spritesheet
* \param data extra animation data for more control
@@ -111,25 +82,22 @@ public:
* This constructor sets up the Animator with the given parameters, and initializes the
* animation system.
*/
- Animator(game_object_id_t id, Sprite & ss, unsigned int max_row, unsigned int max_col,
- const Animator::Data & data);
+ Animator(game_object_id_t id, Sprite & spritesheet, unsigned int max_row,
+ unsigned int max_col, const Animator::Data & data);
~Animator(); // dbg_trace
public:
//! The maximum number of columns in the sprite sheet.
const unsigned int max_columns;
-
//! The maximum number of rows in the sprite sheet.
const unsigned int max_rows;
-
Animator::Data data;
private:
//! A reference to the Sprite sheet containing.
Sprite & spritesheet;
-
- // uses the spritesheet
+ //! Uses the spritesheet
friend AnimatorSystem;
};
+
} // namespace crepe
-//
diff --git a/src/crepe/api/AssetManager.h b/src/crepe/api/AssetManager.h
index fee6780..3b1cc4b 100644
--- a/src/crepe/api/AssetManager.h
+++ b/src/crepe/api/AssetManager.h
@@ -9,7 +9,7 @@ namespace crepe {
/**
* \brief The AssetManager is responsible for storing and managing assets over multiple scenes.
- *
+ *
* The AssetManager ensures that assets are loaded once and can be accessed across different
* scenes. It caches assets to avoid reloading them every time a scene is loaded. Assets are
* retained in memory until the AssetManager is destroyed, at which point the cached assets are
@@ -46,9 +46,9 @@ public:
* \param reload If true, the asset will be reloaded from the file, even if it is already
* cached.
* \tparam T The type of asset to cache (e.g., texture, sound, etc.).
- *
+ *
* \return A shared pointer to the cached asset.
- *
+ *
* This template function caches the asset at the given file path. If the asset is already
* cached and `reload` is false, the existing cached version will be returned. Otherwise, the
* asset will be reloaded and added to the cache.
diff --git a/src/crepe/api/BoxCollider.h b/src/crepe/api/BoxCollider.h
index 89e43d8..1ac4d46 100644
--- a/src/crepe/api/BoxCollider.h
+++ b/src/crepe/api/BoxCollider.h
@@ -8,7 +8,7 @@ namespace crepe {
/**
* \brief A class representing a box-shaped collider.
- *
+ *
* This class is used for collision detection with other colliders (e.g., CircleCollider).
*/
class BoxCollider : public Collider {
diff --git a/src/crepe/api/Button.h b/src/crepe/api/Button.h
index 26e7526..61b18d7 100644
--- a/src/crepe/api/Button.h
+++ b/src/crepe/api/Button.h
@@ -11,7 +11,7 @@ class Button : public UIObject {
public:
/**
* \brief Constructs a Button with the specified game object ID and dimensions.
- *
+ *
* \param id The unique ID of the game object associated with this button.
* \param dimensions The width and height of the UIObject
* \param offset The offset relative this GameObjects Transform
@@ -23,7 +23,7 @@ public:
/**
* \brief Indicates if the button is a toggle button (can be pressed and released).
- *
+ *
* A toggle button allows for a pressed/released state, whereas a regular button
* typically only has an on-click state.
*/
@@ -31,7 +31,7 @@ public:
// TODO: create separate toggle button class
/**
* \brief The callback function to be executed when the button is clicked.
- *
+ *
* This function is invoked whenever the button is clicked. It can be set to any
* function that matches the signature `void()`.
*/
diff --git a/src/crepe/api/CMakeLists.txt b/src/crepe/api/CMakeLists.txt
index b2e3df8..593c4e6 100644
--- a/src/crepe/api/CMakeLists.txt
+++ b/src/crepe/api/CMakeLists.txt
@@ -39,8 +39,8 @@ target_sources(crepe PUBLIC FILE_SET HEADERS FILES
Vector2.h
Vector2.hpp
Color.h
- Texture.h
- AssetManager.h
+ Texture.h
+ AssetManager.h
AssetManager.hpp
Scene.h
Metadata.h
diff --git a/src/crepe/api/CircleCollider.h b/src/crepe/api/CircleCollider.h
index ebd1cb2..c7bf66e 100644
--- a/src/crepe/api/CircleCollider.h
+++ b/src/crepe/api/CircleCollider.h
@@ -8,7 +8,7 @@ namespace crepe {
/**
* \brief A class representing a circle-shaped collider.
- *
+ *
* This class is used for collision detection with other colliders (e.g., BoxCollider).
*/
class CircleCollider : public Collider {
diff --git a/src/crepe/api/Config.h b/src/crepe/api/Config.h
index f1bca62..a9745c3 100644
--- a/src/crepe/api/Config.h
+++ b/src/crepe/api/Config.h
@@ -1,8 +1,10 @@
#pragma once
+#include <string>
+
#include "../util/Log.h"
+
#include "types.h"
-#include <string>
namespace crepe {
@@ -69,7 +71,6 @@ public:
//! default screen size in pixels
ivec2 default_size = {1280, 720};
std::string window_title = "Jetpack joyride clone";
-
} window_settings;
//! Asset loading options
diff --git a/src/crepe/api/EventHandler.h b/src/crepe/api/EventHandler.h
index 7bdd9a3..7bb501b 100644
--- a/src/crepe/api/EventHandler.h
+++ b/src/crepe/api/EventHandler.h
@@ -8,12 +8,12 @@
namespace crepe {
/**
* \brief A type alias for an event handler function.
- *
- * The EventHandler is a std::function that takes an EventType reference and returns a boolean value
+ *
+ * The EventHandler is a std::function that takes an EventType reference and returns a boolean value
* indicating whether the event is handled.
- *
+ *
* \tparam EventType The type of event this handler will handle.
- *
+ *
* Returning \c false from an event handler results in the event being propogated to other listeners for the same event type, while returning \c true stops propogation altogether.
*/
template <typename EventType>
@@ -22,7 +22,7 @@ using EventHandler = std::function<bool(const EventType & e)>;
/**
* \class IEventHandlerWrapper
* \brief An abstract base class for event handler wrappers.
- *
+ *
* This class provides the interface for handling events. Derived classes must implement the
* `call()` method to process events
*/
@@ -35,9 +35,9 @@ public:
/**
* \brief Executes the handler with the given event.
- *
+ *
* This method calls the `call()` method of the derived class, passing the event to the handler.
- *
+ *
* \param e The event to be processed.
* \return A boolean value indicating whether the event is handled.
*/
@@ -46,9 +46,9 @@ public:
private:
/**
* \brief The method responsible for handling the event.
- *
+ *
* This method is implemented by derived classes to process the event.
- *
+ *
* \param e The event to be processed.
* \return A boolean value indicating whether the event is handled.
*/
@@ -58,11 +58,11 @@ private:
/**
* \class EventHandlerWrapper
* \brief A wrapper for event handler functions.
- *
- * This class wraps an event handler function of a specific event type. It implements the
- * `call()` and `get_type()` methods to allow the handler to be executed and its type to be
+ *
+ * This class wraps an event handler function of a specific event type. It implements the
+ * `call()` and `get_type()` methods to allow the handler to be executed and its type to be
* queried.
- *
+ *
* \tparam EventType The type of event this handler will handle.
*/
template <typename EventType>
@@ -70,9 +70,9 @@ class EventHandlerWrapper : public IEventHandlerWrapper {
public:
/**
* \brief Constructs an EventHandlerWrapper with a given handler.
- *
+ *
* The constructor takes an event handler function and stores it in the wrapper.
- *
+ *
* \param handler The event handler function.
*/
explicit EventHandlerWrapper(const EventHandler<EventType> & handler);
@@ -80,9 +80,9 @@ public:
private:
/**
* \brief Calls the stored event handler with the event.
- *
+ *
* This method casts the event to the appropriate type and calls the handler.
- *
+ *
* \param e The event to be handled.
* \return A boolean value indicating whether the event is handled.
*/
diff --git a/src/crepe/api/GameObject.h b/src/crepe/api/GameObject.h
index 4cd2bc0..ff80f49 100644
--- a/src/crepe/api/GameObject.h
+++ b/src/crepe/api/GameObject.h
@@ -10,7 +10,7 @@ class ComponentManager;
/**
* \brief Represents a GameObject
- *
+ *
* This class represents a GameObject. The GameObject class is only used as an interface for
* the game programmer. The actual implementation is done in the ComponentManager.
*/
@@ -19,7 +19,7 @@ private:
/**
* This constructor creates a new GameObject. It creates a new Transform and Metadata
* component and adds them to the ComponentManager.
- *
+ *
* \param component_manager Reference to component_manager
* \param id The id of the GameObject
* \param name The name of the GameObject
@@ -37,20 +37,20 @@ private:
public:
/**
* \brief Set the parent of this GameObject
- *
+ *
* This method sets the parent of this GameObject. It sets the parent in the Metadata
* component of this GameObject and adds this GameObject to the children list of the parent
* GameObject.
- *
+ *
* \param parent The parent GameObject
*/
void set_parent(const GameObject & parent);
/**
* \brief Add a component to the GameObject
- *
+ *
* This method adds a component to the GameObject. It forwards the arguments to the
* ComponentManager.
- *
+ *
* \tparam T The type of the component
* \tparam Args The types of the arguments
* \param args The arguments to create the component
diff --git a/src/crepe/api/Metadata.h b/src/crepe/api/Metadata.h
index 235d42f..f404703 100644
--- a/src/crepe/api/Metadata.h
+++ b/src/crepe/api/Metadata.h
@@ -9,7 +9,7 @@ namespace crepe {
/**
* \brief Metadata component
- *
+ *
* This class represents the Metadata component. It stores the name, tag, parent and children
* of a GameObject.
*/
diff --git a/src/crepe/api/Rigidbody.h b/src/crepe/api/Rigidbody.h
index 8265ba5..40c6bf1 100644
--- a/src/crepe/api/Rigidbody.h
+++ b/src/crepe/api/Rigidbody.h
@@ -11,7 +11,7 @@ namespace crepe {
/**
* \brief Rigidbody class
- *
+ *
* This class is used by the physics sytem and collision system. It configures how to system
* interact with the gameobject for movement and collisions.
*/
@@ -19,7 +19,7 @@ class Rigidbody : public Component {
public:
/**
* \brief BodyType enum
- *
+ *
* This enum provides three bodytypes the physics sytem and collision system use.
*/
enum class BodyType {
@@ -32,7 +32,7 @@ public:
};
/**
* \brief PhysicsConstraints to constrain movement
- *
+ *
* This struct configures the movement constraint for this object. If a constraint is enabled
* the systems will not move the object.
*/
@@ -46,9 +46,9 @@ public:
};
public:
- /**
+ /**
* \brief struct for Rigidbody data
- *
+ *
* This struct holds the data for the Rigidbody.
*/
struct Data {
@@ -59,7 +59,7 @@ public:
*
* The `gravity_scale` controls how much gravity affects the object. It is a multiplier applied to the default
* gravity force, allowing for fine-grained control over how the object responds to gravity.
- *
+ *
*/
float gravity_scale = 0;
@@ -108,7 +108,7 @@ public:
* The `PhysicsConstraints` struct defines the constraints that restrict an object's movement
* in certain directions or prevent rotation. These constraints effect only the physics system
* to prevent the object from moving or rotating in specified ways.
- *
+ *
*/
PhysicsConstraints constraints;
@@ -128,7 +128,7 @@ public:
* The `offset` defines a positional shift applied to all colliders associated with the object, relative to the object's
* transform position. This allows for the colliders to be placed at a different position than the object's actual
* position, without modifying the object's transform itself.
- *
+ *
*/
vec2 offset;
@@ -136,14 +136,14 @@ public:
* \brief Defines the collision layers of a GameObject.
*
* The `collision_layers` specifies the layers that the GameObject will collide with.
- * Each element represents a layer ID, and the GameObject will only detect
+ * Each element represents a layer ID, and the GameObject will only detect
* collisions with other GameObjects that belong to these layers.
*/
std::set<int> collision_layers;
};
public:
- /**
+ /**
* \param game_object_id id of the gameobject the rigibody is added to.
* \param data struct to configure the rigidbody.
*/
@@ -152,15 +152,15 @@ public:
Data data;
public:
- /**
+ /**
* \brief add a linear force to the Rigidbody.
- *
+ *
* \param force Vector2 that is added to the linear force.
*/
void add_force_linear(const vec2 & force);
- /**
+ /**
* \brief add a angular force to the Rigidbody.
- *
+ *
* \param force Vector2 that is added to the angular force.
*/
void add_force_angular(float force);
diff --git a/src/crepe/api/Scene.h b/src/crepe/api/Scene.h
index 9f1e8ce..ba9bb76 100644
--- a/src/crepe/api/Scene.h
+++ b/src/crepe/api/Scene.h
@@ -12,7 +12,7 @@ class ComponentManager;
/**
* \brief Represents a Scene
- *
+ *
* This class represents a Scene. The Scene class is only used as an interface for the game
* programmer.
*/
@@ -41,7 +41,7 @@ public:
protected:
/**
* \name Late references
- *
+ *
* These references are set by SceneManager immediately after calling the constructor of Scene.
*
* \note Scene must have a constructor without arguments so the game programmer doesn't need to
diff --git a/src/crepe/api/Script.h b/src/crepe/api/Script.h
index d1be1dc..d99ab0e 100644
--- a/src/crepe/api/Script.h
+++ b/src/crepe/api/Script.h
@@ -20,7 +20,7 @@ class ComponentManager;
* This class is used as a base class for user-defined scripts that can be added to game
* objects using the \c BehaviorScript component.
*
- * \info Additional *events* (like Unity's OnDisable and OnEnable) should be implemented as
+ * \note Additional *events* (like Unity's OnDisable and OnEnable) should be implemented as
* member or lambda methods in derivative user script classes and registered in \c init().
*
* \warning Concrete scripts are allowed do create a custom constructor, but the utility
diff --git a/src/crepe/api/Sprite.h b/src/crepe/api/Sprite.h
index ea8104c..dbf41e4 100644
--- a/src/crepe/api/Sprite.h
+++ b/src/crepe/api/Sprite.h
@@ -31,11 +31,10 @@ public:
//! Sprite data that does not have to be set in the constructor
struct Data {
/**
- * \color tint of the sprite
+ * \brief Sprite tint (multiplied)
*
- * the default value is white because of the color multiplier.
- * this means that the orginal image will be shown. if color is BLACK for example
- * then it turns the image black because of the Color channels being 0.
+ * The sprite texture's pixels are multiplied by this color before being displayed
+ * (including alpha channel for transparency).
*/
Color color = Color::WHITE;
@@ -49,15 +48,15 @@ public:
const int order_in_layer = 0;
/**
- * \size width and height of the sprite in game units
- *
- * - if height is filled in and not width it will multiply width by aspect_ratio.
- * - if width is filled in and not height it will multiply height by aspect_ratio.
- * - if neither is filled it will not show sprite because size will be zero
- * - if both are filled will it use the width and height without making sure the aspect_ratio
- * is correct
- */
- vec2 size;
+ * \brief width and height of the sprite in game units
+ *
+ * - if exclusively width is specified, the height is calculated using the texture's aspect
+ * ratio
+ * - if exclusively height is specified, the width is calculated using the texture's aspect
+ * ratio
+ * - if both are specified the texture is streched to fit the specified size
+ */
+ vec2 size = {0, 0};
//! independent sprite angle. rotating clockwise direction in degrees
float angle_offset = 0;
@@ -71,7 +70,6 @@ public:
public:
/**
- * \brief Constructs a Sprite with specified parameters.
* \param game_id Unique identifier for the game object this sprite belongs to.
* \param texture asset of the image
* \param ctx all the sprite data
@@ -86,12 +84,12 @@ public:
private:
/**
- * \aspect_ratio ratio of the img
- *
- * - This will multiply one of \c size variable if it is 0.
- * - Will be adjusted if \c Animator component is added to an GameObject
- * that is why this value cannot be const.
- */
+ * \brief ratio of the img
+ *
+ * - This will multiply one of \c size variable if it is 0.
+ * - Will be adjusted if \c Animator component is added to an GameObject that is why this
+ * value cannot be const.
+ */
float aspect_ratio;
//! Reads the mask of sprite
diff --git a/src/crepe/api/Transform.h b/src/crepe/api/Transform.h
index 3ef0fb5..7ee6d65 100644
--- a/src/crepe/api/Transform.h
+++ b/src/crepe/api/Transform.h
@@ -7,7 +7,7 @@ namespace crepe {
/**
* \brief Transform component
- *
+ *
* This class represents the Transform component. It stores the position, rotation and scale of
* a GameObject.
*/
diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h
index 81a8a34..e232511 100644
--- a/src/crepe/facade/SDLContext.h
+++ b/src/crepe/facade/SDLContext.h
@@ -25,7 +25,7 @@ class InputSystem;
/**
* \class SDLContext
* \brief Facade for the SDL library
- *
+ *
* SDLContext is a singleton that handles the SDL window and renderer, provides methods for
* event handling, and rendering to the screen. It is never used directly by the user
*/
@@ -38,16 +38,16 @@ public:
vec2 zoomed_viewport;
/**
- * \render_scale scaling factor
+ * \brief scaling factor
*
* depending on the black bars type will the scaling be different.
- * - lettorboxing --> scaling on the y-as
- * - pillarboxing --> scaling on the x-as
+ * - letterboxing --> scaling on the y-as
+ * - pillarboxing --> scaling on the x-as
*/
vec2 render_scale;
/**
- * \bar_size size of calculated black bars
+ * \brief size of calculated black bars
*
* depending on the black bars type will the size be different
* - lettorboxing --> {0, bar_height}
@@ -108,21 +108,21 @@ private:
friend class InputSystem;
/**
* \brief Retrieves a list of all events from the SDL context.
- *
+ *
* This method retrieves all the events from the SDL context that are currently
* available. It is primarily used by the InputSystem to process various
* input events such as mouse clicks, mouse movements, and keyboard presses.
- *
+ *
* \return Events that occurred since last call to `get_events()`
*/
std::vector<SDLContext::EventData> get_events();
/**
* \brief Converts an SDL key code to the custom Keycode type.
- *
+ *
* This method maps an SDL key code to the corresponding `Keycode` enum value,
* which is used internally by the system to identify the keys.
- *
+ *
* \param sdl_key The SDL key code to convert.
* \return The corresponding `Keycode` value or `Keycode::NONE` if the key is unrecognized.
*/
@@ -130,10 +130,10 @@ private:
/**
* \brief Converts an SDL mouse button code to the custom MouseButton type.
- *
- * This method maps an SDL mouse button code to the corresponding `MouseButton`
+ *
+ * This method maps an SDL mouse button code to the corresponding `MouseButton`
* enum value, which is used internally by the system to identify mouse buttons.
- *
+ *
* \param sdl_button The SDL mouse button code to convert.
* \return The corresponding `MouseButton` value or `MouseButton::NONE` if the key is unrecognized
*/
@@ -233,14 +233,14 @@ private:
* \param pos the pos in world units
* \param cam the camera of the current scene
* \param cam_pos the current postion of the camera
- * \param img_scale the image multiplier for increasing img size
+ * \param img_scale the image multiplier for increasing img size
* \return sdl rectangle to draw a dst image to draw on the screen
*/
SDL_FRect get_dst_rect(const DestinationRectangleData & data) const;
/**
* \brief Set an additional color value multiplied into render copy operations.
*
- * \param texture the given texture to adjust
+ * \param texture the given texture to adjust
* \param color the color data for the texture
*/
void set_color_texture(const Texture & texture, const Color & color);
diff --git a/src/crepe/facade/Sound.h b/src/crepe/facade/Sound.h
index 4c68f32..ee43d94 100644
--- a/src/crepe/facade/Sound.h
+++ b/src/crepe/facade/Sound.h
@@ -35,7 +35,7 @@ public:
void play();
/**
* \brief Reset playhead position
- *
+ *
* Resets the playhead position so that calling \c play() after this function makes it play
* from the start of the sample. If the sound is not paused before calling this function,
* this function will stop playback.
diff --git a/src/crepe/manager/ComponentManager.h b/src/crepe/manager/ComponentManager.h
index ad37586..44429d9 100644
--- a/src/crepe/manager/ComponentManager.h
+++ b/src/crepe/manager/ComponentManager.h
@@ -16,7 +16,7 @@ class GameObject;
/**
* \brief Manages all components
- *
+ *
* This class manages all components. It provides methods to add, delete and get components.
*/
class ComponentManager : public Manager {
@@ -56,10 +56,10 @@ protected:
friend class GameObject;
/**
* \brief Add a component to the ComponentManager
- *
+ *
* This method adds a component to the ComponentManager. The component is created with the
* given arguments and added to the ComponentManager.
- *
+ *
* \tparam T The type of the component
* \tparam Args The types of the arguments
* \param id The id of the GameObject this component belongs to
@@ -70,9 +70,9 @@ protected:
T & add_component(game_object_id_t id, Args &&... args);
/**
* \brief Delete all components of a specific type and id
- *
+ *
* This method deletes all components of a specific type and id.
- *
+ *
* \tparam T The type of the component
* \param id The id of the GameObject this component belongs to
*/
@@ -80,24 +80,24 @@ protected:
void delete_components_by_id(game_object_id_t id);
/**
* \brief Delete all components of a specific type
- *
+ *
* This method deletes all components of a specific type.
- *
+ *
* \tparam T The type of the component
*/
template <typename T>
void delete_components();
/**
* \brief Delete all components of a specific id
- *
+ *
* This method deletes all components of a specific id.
- *
+ *
* \param id The id of the GameObject this component belongs to
*/
void delete_all_components_of_id(game_object_id_t id);
/**
* \brief Delete all components
- *
+ *
* This method deletes all components.
*/
void delete_all_components();
@@ -115,9 +115,9 @@ protected:
public:
/**
* \brief Get all components of a specific type and id
- *
+ *
* This method gets all components of a specific type and id.
- *
+ *
* \tparam T The type of the component
* \param id The id of the GameObject this component belongs to
* \return A vector of all components of the specific type and id
@@ -126,9 +126,9 @@ public:
RefVector<T> get_components_by_id(game_object_id_t id) const;
/**
* \brief Get all components of a specific type
- *
+ *
* This method gets all components of a specific type.
- *
+ *
* \tparam T The type of the component
* \return A vector of all components of the specific type
*/
@@ -138,7 +138,7 @@ public:
private:
/**
* \brief The components
- *
+ *
* This unordered_map stores all components. The key is the type of the component and the
* value is a vector of vectors of unique pointers to the components.
*
diff --git a/src/crepe/manager/EventManager.h b/src/crepe/manager/EventManager.h
index d634f54..ba5e98b 100644
--- a/src/crepe/manager/EventManager.h
+++ b/src/crepe/manager/EventManager.h
@@ -24,7 +24,7 @@ typedef size_t event_channel_t;
/**
* \class EventManager
* \brief Manages event subscriptions, triggers, and queues, enabling decoupled event handling.
- *
+ *
* The `EventManager` acts as a centralized event system. It allows for registering callbacks
* for specific event types, triggering events synchronously, queueing events for later
* processing, and managing subscriptions via unique identifiers.
@@ -35,20 +35,20 @@ public:
/**
* \brief Get the singleton instance of the EventManager.
- *
+ *
* This method returns the unique instance of the EventManager, creating it if it
* doesn't already exist. Ensures only one instance is active in the program.
- *
+ *
* \return Reference to the singleton instance of the EventManager.
*/
static EventManager & get_instance();
/**
* \brief Subscribe to a specific event type.
- *
+ *
* Registers a callback for a given event type and optional channel. Each callback
* is assigned a unique subscription ID that can be used for later unsubscription.
- *
+ *
* \tparam EventType The type of the event to subscribe to.
* \param callback The callback function to be invoked when the event is triggered.
* \param channel The channel number to subscribe to (default is CHANNEL_ALL, which listens to all channels).
@@ -60,18 +60,18 @@ public:
/**
* \brief Unsubscribe a previously registered callback.
- *
+ *
* Removes a callback from the subscription list based on its unique subscription ID.
- *
+ *
* \param event_id The unique subscription ID of the callback to remove.
*/
void unsubscribe(subscription_t event_id);
/**
* \brief Trigger an event immediately.
- *
+ *
* Synchronously invokes all registered callbacks for the given event type on the specified channel.
- *
+ *
* \tparam EventType The type of the event to trigger.
* \param event The event instance to pass to the callbacks.
* \param channel The channel to trigger the event on (default is CHANNEL_ALL, which triggers on all channels).
@@ -81,9 +81,9 @@ public:
/**
* \brief Queue an event for later processing.
- *
+ *
* Adds an event to the event queue to be processed during the next call to `dispatch_events`.
- *
+ *
* \tparam EventType The type of the event to queue.
* \param event The event instance to queue.
* \param channel The channel to associate with the event (default is CHANNEL_ALL).
@@ -93,7 +93,7 @@ public:
/**
* \brief Process all queued events.
- *
+ *
* Iterates through the event queue and triggers callbacks for each queued event.
* Events are removed from the queue once processed.
*/
@@ -101,7 +101,7 @@ public:
/**
* \brief Clear all subscriptions.
- *
+ *
* Removes all registered event handlers and clears the subscription list.
*/
void clear();
@@ -109,7 +109,7 @@ public:
private:
/**
* \brief Default constructor for the EventManager.
- *
+ *
* Constructor is private to enforce the singleton pattern.
*/
EventManager() = default;
diff --git a/src/crepe/system/CollisionSystem.h b/src/crepe/system/CollisionSystem.h
index 7e893c8..5b136c6 100644
--- a/src/crepe/system/CollisionSystem.h
+++ b/src/crepe/system/CollisionSystem.h
@@ -37,7 +37,7 @@ private:
/**
* \brief A structure to store the collision data of a single collider.
- *
+ *
* This structure all components and id that are for needed within this system when calculating or handeling collisions.
* The transform and rigidbody are mostly needed for location and rotation.
* In rigidbody additional info is written about what the body of the object is,
@@ -65,7 +65,7 @@ private:
public:
/**
* \brief Structure representing detailed collision information between two colliders.
- *
+ *
* Includes information about the colliding objects and the resolution data for handling the collision.
*/
struct CollisionInfo {
@@ -90,9 +90,9 @@ public:
private:
/**
* \brief Determines the type of collider pair from two colliders.
- *
+ *
* Uses std::holds_alternative to identify the types of the provided colliders.
- *
+ *
* \param collider1 First collider variant (BoxCollider or CircleCollider).
* \param collider2 Second collider variant (BoxCollider or CircleCollider).
* \return The combined type of the two colliders.
@@ -102,9 +102,9 @@ private:
/**
* \brief Calculates the current position of a collider.
- *
+ *
* Combines the Collider offset, Transform position, and Rigidbody offset to compute the position of the collider.
- *
+ *
* \param collider_offset The offset of the collider.
* \param transform The Transform of the associated game object.
* \param rigidbody The Rigidbody of the associated game object.
@@ -116,9 +116,9 @@ private:
private:
/**
* \brief Handles collision resolution between two colliders.
- *
+ *
* Processes collision data and adjusts objects to resolve collisions and/or calls the user oncollision script function.
- *
+ *
* \param data1 Collision data for the first collider.
* \param data2 Collision data for the second collider.
*/
@@ -126,9 +126,9 @@ private:
/**
* \brief Resolves collision between two colliders and calculates the movement required.
- *
+ *
* Determines the displacement and direction needed to separate colliders based on their types.
- *
+ *
* \param data1 Collision data for the first collider.
* \param data2 Collision data for the second collider.
* \param type The type of collider pair.
@@ -140,9 +140,9 @@ private:
/**
* \brief Calculates the resolution vector for two BoxColliders.
- *
+ *
* Computes the displacement required to separate two overlapping BoxColliders.
- *
+ *
* \param box_collider1 The first BoxCollider.
* \param box_collider2 The second BoxCollider.
* \param position1 The position of the first BoxCollider.
@@ -155,13 +155,13 @@ private:
/**
* \brief Calculates the resolution vector for two CircleCollider.
- *
+ *
* Computes the displacement required to separate two overlapping CircleCollider.
- *
+ *
* \param circle_collider1 The first CircleCollider.
* \param circle_collider2 The second CircleCollider.
- * \param position1 The position of the first CircleCollider.
- * \param position2 The position of the second CircleCollider.
+ * \param final_position1 The position of the first CircleCollider.
+ * \param final_position2 The position of the second CircleCollider.
* \return The resolution vector for the collision.
*/
vec2 get_circle_circle_resolution(const CircleCollider & circle_collider1,
@@ -171,14 +171,13 @@ private:
/**
* \brief Calculates the resolution vector for two CircleCollider.
- *
+ *
* Computes the displacement required to separate two overlapping CircleCollider.
- *
+ *
* \param circle_collider The first CircleCollider.
* \param box_collider The second CircleCollider.
* \param circle_position The position of the CircleCollider.
* \param box_position The position of the BoxCollider.
- * \param inverse Inverted true if box circle collision, false if circle box collision (inverts the direction).
* \return The resolution vector for the collision.
*/
vec2 get_circle_box_resolution(const CircleCollider & circle_collider,
@@ -188,18 +187,18 @@ private:
/**
* \brief Determines the appropriate collision handler for a collision.
- *
+ *
* Decides the correct resolution process based on the dynamic or static nature of the colliders involved.
- *
+ *
* \param info Collision information containing data about both colliders.
*/
void determine_collision_handler(CollisionInfo & info);
/**
* \brief Handles collisions involving static objects.
- *
+ *
* Resolves collisions by adjusting positions and modifying velocities if bounce is enabled.
- *
+ *
* \param info Collision information containing data about both colliders.
*/
void static_collision_handler(CollisionInfo & info);
@@ -207,9 +206,9 @@ private:
private:
/**
* \brief Checks for collisions between colliders.
- *
+ *
* Identifies collisions and generates pairs of colliding objects for further processing.
- *
+ *
* \param colliders A collection of all active colliders.
* \return A list of collision pairs with their associated data.
*/
@@ -218,13 +217,13 @@ private:
/**
* \brief Checks if two collision layers have at least one common layer.
- *
+ *
* This function checks if there is any overlapping layer between the two inputs.
- * It compares each layer from the first input to see
- * if it exists in the second input. If at least one common layer is found,
- * the function returns true, indicating that the two colliders share a common
+ * It compares each layer from the first input to see
+ * if it exists in the second input. If at least one common layer is found,
+ * the function returns true, indicating that the two colliders share a common
* collision layer.
- *
+ *
* \param layers1 all collision layers for the first collider.
* \param layers2 all collision layers for the second collider.
* \return Returns true if there is at least one common layer, false otherwise.
@@ -234,9 +233,9 @@ private:
/**
* \brief Checks for collision between two colliders.
- *
+ *
* Calls the appropriate collision detection function based on the collider types.
- *
+ *
* \param first_info Collision data for the first collider.
* \param second_info Collision data for the second collider.
* \param type The type of collider pair.
@@ -248,7 +247,7 @@ private:
/**
* \brief Detects collisions between two BoxColliders.
- *
+ *
* \param box1 The first BoxCollider.
* \param box2 The second BoxCollider.
* \param transform1 Transform of the first object.
diff --git a/src/crepe/system/ParticleSystem.h b/src/crepe/system/ParticleSystem.h
index c647284..068f01c 100644
--- a/src/crepe/system/ParticleSystem.h
+++ b/src/crepe/system/ParticleSystem.h
@@ -25,7 +25,7 @@ public:
private:
/**
* \brief Emits a particle from the specified emitter based on its emission properties.
- *
+ *
* \param emitter Reference to the ParticleEmitter.
* \param transform Const reference to the Transform component associated with the emitter.
*/
@@ -34,7 +34,7 @@ private:
/**
* \brief Calculates the number of times particles should be emitted based on emission rate
* and update count.
- *
+ *
* \param count Current update count.
* \param emission Emission rate.
* \return The number of particles to emit.
@@ -44,7 +44,7 @@ private:
/**
* \brief Checks whether particles are within the emitter’s boundary, resets or stops
* particles if they exit.
- *
+ *
* \param emitter Reference to the ParticleEmitter.
* \param transform Const reference to the Transform component associated with the emitter.
*/
@@ -52,7 +52,7 @@ private:
/**
* \brief Generates a random angle for particle emission within the specified range.
- *
+ *
* \param min_angle Minimum emission angle in degrees.
* \param max_angle Maximum emission angle in degrees.
* \return Random angle in degrees.
@@ -61,7 +61,7 @@ private:
/**
* \brief Generates a random speed for particle emission within the specified range.
- *
+ *
* \param min_speed Minimum emission speed.
* \param max_speed Maximum emission speed.
* \return Random speed.
diff --git a/src/crepe/system/PhysicsSystem.h b/src/crepe/system/PhysicsSystem.h
index 227ab69..26152a5 100644
--- a/src/crepe/system/PhysicsSystem.h
+++ b/src/crepe/system/PhysicsSystem.h
@@ -6,7 +6,7 @@ namespace crepe {
/**
* \brief System that controls all physics
- *
+ *
* This class is a physics system that uses a rigidbody and transform to add physics to a game
* object.
*/
@@ -15,7 +15,7 @@ public:
using System::System;
/**
* \brief updates the physics system.
- *
+ *
* It calculates new velocties and changes the postion in the transform.
*/
void update() override;
diff --git a/src/crepe/system/RenderSystem.cpp b/src/crepe/system/RenderSystem.cpp
index 830d380..26f2c85 100644
--- a/src/crepe/system/RenderSystem.cpp
+++ b/src/crepe/system/RenderSystem.cpp
@@ -46,7 +46,8 @@ SDLContext::CameraValues RenderSystem::update_camera() {
}
bool sorting_comparison(const Sprite & a, const Sprite & b) {
- if (a.data.sorting_in_layer != b.data.sorting_in_layer) return a.data.sorting_in_layer < b.data.sorting_in_layer;
+ if (a.data.sorting_in_layer != b.data.sorting_in_layer)
+ return a.data.sorting_in_layer < b.data.sorting_in_layer;
if (a.data.order_in_layer != b.data.order_in_layer)
return a.data.order_in_layer < b.data.order_in_layer;
diff --git a/src/crepe/system/RenderSystem.h b/src/crepe/system/RenderSystem.h
index de76229..e270a6b 100644
--- a/src/crepe/system/RenderSystem.h
+++ b/src/crepe/system/RenderSystem.h
@@ -18,7 +18,7 @@ class Transform;
* \brief Manages rendering operations for all game objects.
*
* RenderSystem is responsible for rendering, clearing and presenting the screen, and
- * managing the active camera.
+ * managing the active camera.
*/
class RenderSystem : public System {
public:
@@ -56,10 +56,10 @@ private:
const double & scale);
/**
- * \brief renders a sprite with a Transform component on the screen
+ * \brief renders a sprite with a Transform component on the screen
*
* \param sprite the sprite component that holds all the data
- * \param tm the Transform component that holds the position,rotation and scale
+ * \param tm the Transform component that holds the position,rotation and scale
*/
void render_normal(const Sprite & sprite, const SDLContext::CameraValues & cam,
const Transform & tm);
@@ -67,7 +67,7 @@ private:
/**
* \brief sort a vector sprite objects with
*
- * \param objs the vector that will do a sorting algorithm on
+ * \param objs the vector that will do a sorting algorithm on
* \return returns a sorted reference vector
*/
RefVector<Sprite> sort(RefVector<Sprite> & objs) const;
diff --git a/src/crepe/system/ScriptSystem.h b/src/crepe/system/ScriptSystem.h
index 936e9ca..3db1b1e 100644
--- a/src/crepe/system/ScriptSystem.h
+++ b/src/crepe/system/ScriptSystem.h
@@ -8,7 +8,7 @@ class Script;
/**
* \brief Script system
- *
+ *
* The script system is responsible for all \c BehaviorScript components, and
* calls the methods on classes derived from \c Script.
*/
diff --git a/src/test/Profiling.cpp b/src/test/Profiling.cpp
index bd99614..c753bca 100644
--- a/src/test/Profiling.cpp
+++ b/src/test/Profiling.cpp
@@ -70,8 +70,11 @@ public:
void SetUp() override {
GameObject do_not_use = mgr.new_object("DO_NOT_USE", "", {0, 0});
- do_not_use.add_component<Camera>(Color::WHITE, ivec2{1080, 720}, vec2{2000, 2000},
- 1.0f);
+ do_not_use.add_component<Camera>(ivec2{1080, 720}, vec2{2000, 2000},
+ Camera::Data{
+ .bg_color = Color::WHITE,
+ .zoom = 1.0f,
+ });
// initialize systems here:
//calls init
script_sys.update();
@@ -164,10 +167,15 @@ TEST_F(DISABLED_ProfilingTest, Profiling_2) {
gameobject.add_component<BoxCollider>(vec2{0, 0}, vec2{1, 1});
gameobject.add_component<BehaviorScript>().set_script<TestScript>();
- Color color(0, 0, 0, 0);
auto img = Texture("asset/texture/square.png");
Sprite & test_sprite = gameobject.add_component<Sprite>(
- img, color, Sprite::FlipSettings{false, false}, 1, 1, 500);
+ img, Sprite::Data{
+ .color = {0, 0, 0, 0},
+ .flip = {.flip_x = false, .flip_y = false},
+ .sorting_in_layer = 1,
+ .order_in_layer = 1,
+ .size = {.y = 500},
+ });
}
this->game_object_count++;
@@ -197,10 +205,15 @@ TEST_F(DISABLED_ProfilingTest, Profiling_3) {
});
gameobject.add_component<BoxCollider>(vec2{0, 0}, vec2{1, 1});
gameobject.add_component<BehaviorScript>().set_script<TestScript>();
- Color color(0, 0, 0, 0);
auto img = Texture("asset/texture/square.png");
Sprite & test_sprite = gameobject.add_component<Sprite>(
- img, color, Sprite::FlipSettings{false, false}, 1, 1, 500);
+ img, Sprite::Data{
+ .color = {0, 0, 0, 0},
+ .flip = {.flip_x = false, .flip_y = false},
+ .sorting_in_layer = 1,
+ .order_in_layer = 1,
+ .size = {.y = 500},
+ });
auto & test = gameobject.add_component<ParticleEmitter>(ParticleEmitter::Data{
.max_particles = 10,
.emission_rate = 100,