From acfa153789d9b55f3453a1d32f249da04ad6b5c1 Mon Sep 17 00:00:00 2001 From: WBoerenkamps Date: Sat, 9 Nov 2024 13:21:34 +0100 Subject: changed comment --- src/crepe/facade/SDLContext.cpp | 203 ++++++++++++++++++++++++---------------- 1 file changed, 121 insertions(+), 82 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index 8da93e9..17ced0c 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -1,16 +1,22 @@ #include #include +#include #include #include #include #include #include +#include #include +#include +#include +#include #include "../api/Sprite.h" #include "../api/Texture.h" #include "../api/Transform.h" #include "../util/log.h" +#include "Exception.h" #include "SDLContext.h" @@ -21,34 +27,6 @@ SDLContext & SDLContext::get_instance() { return instance; } -void SDLContext::handle_events(bool & running) { - SDL_Event event; - while (SDL_PollEvent(&event)) { - if (event.type == SDL_QUIT) { - running = false; - } - } -} - -SDLContext::~SDLContext() { - dbg_trace(); - - if (this->game_renderer != nullptr) - SDL_DestroyRenderer(this->game_renderer); - - if (this->game_window != nullptr) { - SDL_DestroyWindow(this->game_window); - } - - // TODO: how are we going to ensure that these are called from the same - // thread that SDL_Init() was called on? This has caused problems for me - // before. - IMG_Quit(); - SDL_Quit(); -} - -void SDLContext::clear_screen() { SDL_RenderClear(this->game_renderer); } - SDLContext::SDLContext() { dbg_trace(); // FIXME: read window defaults from config manager @@ -59,26 +37,32 @@ SDLContext::SDLContext() { << std::endl; return; } - - this->game_window = SDL_CreateWindow( + SDL_Window * tmp_window = SDL_CreateWindow( "Crepe Game Engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, - 1920, 1080, SDL_WINDOW_SHOWN); - if (!this->game_window) { + this->viewport.w, this->viewport.h, 0); + if (!tmp_window) { // FIXME: throw exception std::cerr << "Window could not be created! SDL_Error: " << SDL_GetError() << std::endl; + return; } + this->game_window + = {tmp_window, [](SDL_Window * window) { SDL_DestroyWindow(window); }}; - this->game_renderer - = SDL_CreateRenderer(this->game_window, -1, SDL_RENDERER_ACCELERATED); - if (!this->game_renderer) { + SDL_Renderer * tmp_renderer = SDL_CreateRenderer( + this->game_window.get(), -1, SDL_RENDERER_ACCELERATED); + if (!tmp_renderer) { // FIXME: throw exception std::cerr << "Renderer could not be created! SDL_Error: " << SDL_GetError() << std::endl; - SDL_DestroyWindow(this->game_window); + SDL_DestroyWindow(this->game_window.get()); return; } + this->game_renderer = {tmp_renderer, [](SDL_Renderer * renderer) { + SDL_DestroyRenderer(renderer); + }}; + int img_flags = IMG_INIT_PNG; if (!(IMG_Init(img_flags) & img_flags)) { // FIXME: throw exception @@ -87,71 +71,126 @@ SDLContext::SDLContext() { } } -void SDLContext::present_screen() { SDL_RenderPresent(this->game_renderer); } +SDLContext::~SDLContext() { + dbg_trace(); + + this->game_renderer.reset(); + this->game_window.reset(); + + // TODO: how are we going to ensure that these are called from the same + // thread that SDL_Init() was called on? This has caused problems for me + // before. + IMG_Quit(); + SDL_Quit(); +} + +void SDLContext::handle_events(bool & running) { + //TODO: wouter i need events + /* + SDL_Event event; + SDL_PollEvent(&event); + switch (event.type) { + case SDL_QUIT: + running = false; + break; + case SDL_KEYDOWN: + triggerEvent(KeyPressedEvent(getCustomKey(event.key.keysym.sym))); + break; + case SDL_MOUSEBUTTONDOWN: + int x, y; + SDL_GetMouseState(&x, &y); + triggerEvent(MousePressedEvent(x, y)); + break; + } + */ +} + +void SDLContext::clear_screen() { SDL_RenderClear(this->game_renderer.get()); } +void SDLContext::present_screen() { + SDL_RenderPresent(this->game_renderer.get()); +} -void SDLContext::draw(const Sprite & sprite, const Transform & transform) { +void SDLContext::draw(const Sprite & sprite, const Transform & transform, + const Camera & cam) { - static SDL_RendererFlip render_flip + SDL_RendererFlip render_flip = (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * sprite.flip.flip_x) | (SDL_FLIP_VERTICAL * sprite.flip.flip_y)); - int w, h; - SDL_QueryTexture(sprite.sprite_image->texture, NULL, NULL, &w, &h); - // needs maybe camera for position + double adjusted_x = (transform.position.x - cam.x) * cam.zoom; + double adjusted_y = (transform.position.y - cam.y) * cam.zoom; + double adjusted_w = sprite.sprite_rect.w * transform.scale * cam.zoom; + double adjusted_h = sprite.sprite_rect.h * transform.scale * cam.zoom; + + SDL_Rect srcrect = { + .x = sprite.sprite_rect.x, + .y = sprite.sprite_rect.y, + .w = sprite.sprite_rect.w, + .h = sprite.sprite_rect.h, + }; + SDL_Rect dstrect = { - .x = static_cast(transform.position.x), - .y = static_cast(transform.position.y), - .w = static_cast(w * transform.scale), - .h = static_cast(h * transform.scale), + .x = static_cast(adjusted_x), + .y = static_cast(adjusted_y), + .w = static_cast(adjusted_w), + .h = static_cast(adjusted_h), }; - double degrees = transform.rotation * 180 / M_PI; - SDL_RenderCopyEx(this->game_renderer, sprite.sprite_image->texture, NULL, - &dstrect, degrees, NULL, render_flip); + SDL_RenderCopyEx(this->game_renderer.get(), + sprite.sprite_image->texture.get(), &srcrect, + + &dstrect, transform.rotation, NULL, render_flip); } -/* -SDL_Texture * SDLContext::setTextureFromPath(const char * path, SDL_Rect & clip, - const int row, const int col) { - dbg_trace(); +void SDLContext::camera(const Camera & cam) { + this->viewport.w = static_cast(cam.aspect_width); + this->viewport.h = static_cast(cam.aspect_height); + this->viewport.x = static_cast(cam.x) - (SCREEN_WIDTH / 2); + this->viewport.y = static_cast(cam.y) - (SCREEN_HEIGHT / 2); - SDL_Surface * tmp = IMG_Load(path); - if (!tmp) { - std::cerr << "Error surface " << IMG_GetError << std::endl; - } + SDL_SetRenderDrawColor(this->game_renderer.get(), cam.bg_color.r, + cam.bg_color.g, cam.bg_color.b, cam.bg_color.a); +} - clip. - w = tmp->w / col; - clip.h = tmp->h / row; +uint64_t SDLContext::get_ticks() const { return SDL_GetTicks64(); } - SDL_Texture * CreatedTexture - = SDL_CreateTextureFromSurface(this->game_renderer, tmp); +std::unique_ptr> +SDLContext::texture_from_path(const std::string & path) { - if (!CreatedTexture) { - std::cerr << "Error could not create texture " << IMG_GetError - << std::endl; + SDL_Surface * tmp = IMG_Load(path.c_str()); + if (tmp == nullptr) { + throw Exception("surface cannot be load from %s", path.c_str()); } - SDL_FreeSurface(tmp); - return CreatedTexture; -} -*/ + std::unique_ptr> + img_surface; + img_surface + = {tmp, [](SDL_Surface * surface) { SDL_FreeSurface(surface); }}; -SDL_Texture * SDLContext::texture_from_path(const char * path) { - dbg_trace(); + SDL_Texture * tmp_texture = SDL_CreateTextureFromSurface( + this->game_renderer.get(), img_surface.get()); - SDL_Surface * tmp = IMG_Load(path); - if (!tmp) { - std::cerr << "Error surface " << IMG_GetError << std::endl; + if (tmp_texture == nullptr) { + throw Exception("Texture cannot be load from %s", path.c_str()); } - SDL_Texture * created_texture - = SDL_CreateTextureFromSurface(this->game_renderer, tmp); - if (!created_texture) { - std::cerr << "Error could not create texture " << IMG_GetError - << std::endl; - } - SDL_FreeSurface(tmp); + std::unique_ptr> + img_texture; + img_texture = {tmp_texture, + [](SDL_Texture * texture) { SDL_DestroyTexture(texture); }}; - return created_texture; + return img_texture; +} +int SDLContext::get_width(const Texture & ctx) const { + int w; + SDL_QueryTexture(ctx.texture.get(), NULL, NULL, &w, NULL); + return w; +} +int SDLContext::get_height(const Texture & ctx) const { + int h; + SDL_QueryTexture(ctx.texture.get(), NULL, NULL, NULL, &h); + return h; +} +void SDLContext::delay(int ms) const{ + SDL_Delay(ms); } -- cgit v1.2.3 From e7dc31dad155b7b623374d3bb0ffbb8a8f579d2a Mon Sep 17 00:00:00 2001 From: WBoerenkamps Date: Mon, 11 Nov 2024 18:18:54 +0100 Subject: ran make format --- mwe/events/include/event.h | 2 +- src/crepe/api/LoopManager.cpp | 72 +++++++++++++++---------------- src/crepe/api/LoopManager.h | 9 ++-- src/crepe/api/LoopTimer.cpp | 68 +++++++++++++++-------------- src/crepe/api/LoopTimer.h | 94 ++++++++++++++++++++--------------------- src/crepe/facade/SDLContext.cpp | 4 +- src/crepe/facade/SDLContext.h | 1 + src/example/gameloop.cpp | 2 +- src/makefile | 6 +-- 9 files changed, 128 insertions(+), 130 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/mwe/events/include/event.h b/mwe/events/include/event.h index 16c75bf..3e70201 100644 --- a/mwe/events/include/event.h +++ b/mwe/events/include/event.h @@ -152,7 +152,7 @@ private: }; class ShutDownEvent : public Event { public: - ShutDownEvent() : Event("ShutDownEvent") {}; + ShutDownEvent() : Event("ShutDownEvent"){}; REGISTER_EVENT_TYPE(ShutDownEvent) diff --git a/src/crepe/api/LoopManager.cpp b/src/crepe/api/LoopManager.cpp index d4345d0..b4382a6 100644 --- a/src/crepe/api/LoopManager.cpp +++ b/src/crepe/api/LoopManager.cpp @@ -1,66 +1,62 @@ +#include "../facade/SDLContext.h" #include "../system/RenderSystem.h" #include "../system/ScriptSystem.h" -#include "../facade/SDLContext.h" #include "LoopManager.h" #include "LoopTimer.h" using namespace crepe; -LoopManager::LoopManager(const RenderSystem& renderSystem, const SDLContext& sdlContext, - const LoopTimer& loopTimer, const ScriptSystem& scriptSystem, - const SoundSystem& soundSystem, const ParticleSystem& particleSystem, - const PhysicsSystem& physicsSystem, const AnimatorSystem& animatorSystem, - const CollisionSystem& collisionSystem) { - // Initialize systems if needed - // Example: this->renderSystem = renderSystem; +LoopManager::LoopManager( + const RenderSystem & renderSystem, const SDLContext & sdlContext, + const LoopTimer & loopTimer, const ScriptSystem & scriptSystem, + const SoundSystem & soundSystem, const ParticleSystem & particleSystem, + const PhysicsSystem & physicsSystem, const AnimatorSystem & animatorSystem, + const CollisionSystem & collisionSystem) { + // Initialize systems if needed + // Example: this->renderSystem = renderSystem; } void LoopManager::process_input() { - SDLContext::get_instance().handle_events(this->game_running); + SDLContext::get_instance().handle_events(this->game_running); } -void LoopManager::start(){ - this->setup(); - this->loop(); +void LoopManager::start() { + this->setup(); + this->loop(); } void LoopManager::set_running(bool running) { this->game_running = running; } -void LoopManager::fixed_update() { -} +void LoopManager::fixed_update() {} void LoopManager::loop() { - LoopTimer & timer = LoopTimer::get_instance(); - timer.start(); + LoopTimer & timer = LoopTimer::get_instance(); + timer.start(); - while (game_running) { - timer.update(); + while (game_running) { + timer.update(); - while (timer.get_lag() >= timer.get_fixed_delta_time()) { - this->process_input(); - this->fixed_update(); - timer.advance_fixed_update(); - } + while (timer.get_lag() >= timer.get_fixed_delta_time()) { + this->process_input(); + this->fixed_update(); + timer.advance_fixed_update(); + } - this->update(); - this->render(); + this->update(); + this->render(); - timer.enforce_frame_rate(); - } + timer.enforce_frame_rate(); + } } - void LoopManager::setup() { - this->game_running = true; - LoopTimer::get_instance().start(); - LoopTimer::get_instance().set_fps(60); + this->game_running = true; + LoopTimer::get_instance().start(); + LoopTimer::get_instance().set_fps(60); } void LoopManager::render() { - if (this->game_running) { - RenderSystem::get_instance().update(); - } -} - -void LoopManager::update() { - LoopTimer & timer = LoopTimer::get_instance(); + if (this->game_running) { + RenderSystem::get_instance().update(); + } } +void LoopManager::update() { LoopTimer & timer = LoopTimer::get_instance(); } diff --git a/src/crepe/api/LoopManager.h b/src/crepe/api/LoopManager.h index 79abae6..5d8c91b 100644 --- a/src/crepe/api/LoopManager.h +++ b/src/crepe/api/LoopManager.h @@ -1,6 +1,5 @@ #pragma once - namespace crepe { class RenderSystem; @@ -16,9 +15,11 @@ class CollisionSystem; class LoopManager { public: void start(); - LoopManager(const RenderSystem&, const SDLContext&, const LoopTimer&, const ScriptSystem&, - const SoundSystem&, const ParticleSystem&, const PhysicsSystem&, const AnimatorSystem&, - const CollisionSystem&); + LoopManager(const RenderSystem &, const SDLContext &, const LoopTimer &, + const ScriptSystem &, const SoundSystem &, + const ParticleSystem &, const PhysicsSystem &, + const AnimatorSystem &, const CollisionSystem &); + private: /** * \brief Setup function for one-time initialization. diff --git a/src/crepe/api/LoopTimer.cpp b/src/crepe/api/LoopTimer.cpp index dd4d7e5..f68d75a 100644 --- a/src/crepe/api/LoopTimer.cpp +++ b/src/crepe/api/LoopTimer.cpp @@ -1,45 +1,48 @@ +#include "LoopTimer.h" #include "../facade/SDLContext.h" #include "../util/log.h" -#include "LoopTimer.h" using namespace crepe; -LoopTimer::LoopTimer() { - dbg_trace(); -} +LoopTimer::LoopTimer() { dbg_trace(); } -LoopTimer& LoopTimer::get_instance() { - static LoopTimer instance; - return instance; +LoopTimer & LoopTimer::get_instance() { + static LoopTimer instance; + return instance; } void LoopTimer::start() { - this->last_frame_time = SDLContext::get_instance().get_ticks(); - this->elapsed_time = 0; - this->elapsed_fixed_time = 0; - this->delta_time = 0; + this->last_frame_time = SDLContext::get_instance().get_ticks(); + this->elapsed_time = 0; + this->elapsed_fixed_time = 0; + this->delta_time = 0; } void LoopTimer::update() { - uint64_t current_frame_time = SDLContext::get_instance().get_ticks(); - this->delta_time = (current_frame_time - last_frame_time); + uint64_t current_frame_time = SDLContext::get_instance().get_ticks(); + this->delta_time = (current_frame_time - last_frame_time); - if (this->delta_time > this->maximum_delta_time) { - this->delta_time = this->maximum_delta_time; - } - this->delta_time *= this->game_scale; - this->elapsed_time += this->delta_time; - this->last_frame_time = current_frame_time; + if (this->delta_time > this->maximum_delta_time) { + this->delta_time = this->maximum_delta_time; + } + this->delta_time *= this->game_scale; + this->elapsed_time += this->delta_time; + this->last_frame_time = current_frame_time; } double LoopTimer::get_delta_time() const { return this->delta_time; } double LoopTimer::get_current_time() const { return this->elapsed_time; } -void LoopTimer::advance_fixed_update() { this->elapsed_fixed_time += this->fixed_delta_time; } -double LoopTimer::get_fixed_delta_time() const { return this->fixed_delta_time; } +void LoopTimer::advance_fixed_update() { + this->elapsed_fixed_time += this->fixed_delta_time; +} +double LoopTimer::get_fixed_delta_time() const { + return this->fixed_delta_time; +} void LoopTimer::set_fps(int fps) { - this->fps = fps; - this->frame_target_time = 1000.0 / this->fps; + this->fps = fps; + //! use fps to calculate frame_target_time in ms + this->frame_target_time = 1000.0 / this->fps; } int LoopTimer::get_fps() const { return this->fps; } @@ -47,15 +50,18 @@ void LoopTimer::set_game_scale(double value) { this->game_scale = value; } double LoopTimer::get_game_scale() const { return this->game_scale; } void LoopTimer::enforce_frame_rate() { - uint64_t current_frame_time = SDLContext::get_instance().get_ticks(); - double frame_duration = (current_frame_time - this->last_frame_time); + uint64_t current_frame_time = SDLContext::get_instance().get_ticks(); + double frame_duration = (current_frame_time - this->last_frame_time); - if (frame_duration < this->frame_target_time) { - uint32_t delay_time = static_cast(this->frame_target_time - frame_duration); - SDLContext::get_instance().delay(delay_time); - } + if (frame_duration < this->frame_target_time) { + uint32_t delay_time + = static_cast(this->frame_target_time - frame_duration); + SDLContext::get_instance().delay(delay_time); + } - this->last_frame_time = current_frame_time; + this->last_frame_time = current_frame_time; } -double LoopTimer::get_lag() const { return this->elapsed_time - this->elapsed_fixed_time; } +double LoopTimer::get_lag() const { + return this->elapsed_time - this->elapsed_fixed_time; +} diff --git a/src/crepe/api/LoopTimer.h b/src/crepe/api/LoopTimer.h index 5f9b6a7..5309d2f 100644 --- a/src/crepe/api/LoopTimer.h +++ b/src/crepe/api/LoopTimer.h @@ -6,21 +6,21 @@ namespace crepe { class LoopTimer { public: - /** + /** * \brief Get the singleton instance of LoopTimer. * * \return A reference to the LoopTimer instance. */ - static LoopTimer& get_instance(); + static LoopTimer & get_instance(); - /** + /** * \brief Get the current delta time for the current frame. * * \return Delta time in milliseconds since the last frame. */ - double get_delta_time() const; + double get_delta_time() const; - /** + /** * \brief Get the current game time. * * \note The current game time may vary from real-world elapsed time. @@ -28,55 +28,55 @@ public: * * \return Elapsed game time in milliseconds. */ - double get_current_time() const; + double get_current_time() const; - /** + /** * \brief Set the target frames per second (FPS). * * \param fps The desired frames rendered per second. */ - void set_fps(int fps); + void set_fps(int fps); - /** + /** * \brief Get the current frames per second (FPS). * * \return Current FPS. */ - int get_fps() const; + int get_fps() const; - /** + /** * \brief Get the current game scale. * * \return The current game scale, where 0 = paused, 1 = normal speed, and values > 1 speed up the game. */ - double get_game_scale() const; + double get_game_scale() const; - /** + /** * \brief Set the game scale. * * \param game_scale The desired game scale (0 = pause, 1 = normal speed, > 1 = speed up). */ - void set_game_scale(double game_scale); + void set_game_scale(double game_scale); private: - friend class LoopManager; + friend class LoopManager; - /** + /** * \brief Start the loop timer. * * Initializes the timer to begin tracking frame times. */ - void start(); + void start(); - /** + /** * \brief Enforce the frame rate limit. * * Ensures that the game loop does not exceed the target FPS by delaying * frame updates as necessary. */ - void enforce_frame_rate(); + void enforce_frame_rate(); - /** + /** * \brief Get the fixed delta time for consistent updates. * * Fixed delta time is used for operations that require uniform time steps, @@ -84,9 +84,9 @@ private: * * \return Fixed delta time in milliseconds. */ - double get_fixed_delta_time() const; + double get_fixed_delta_time() const; - /** + /** * \brief Get the accumulated lag in the game loop. * * Lag represents the difference between the target frame time and the @@ -94,51 +94,51 @@ private: * * \return Accumulated lag in milliseconds. */ - double get_lag() const; + double get_lag() const; - /** + /** * \brief Construct a new LoopTimer object. * * Private constructor for singleton pattern to restrict instantiation * outside the class. */ - LoopTimer(); + LoopTimer(); - /** + /** * \brief Update the timer to the current frame. * * Calculates and updates the delta time for the current frame and adds it to * the cumulative game time. */ - void update(); + void update(); - /** + /** * \brief Advance the game loop by a fixed update interval. * * This method progresses the game state by a consistent, fixed time step, * allowing for stable updates independent of frame rate fluctuations. */ - void advance_fixed_update(); + void advance_fixed_update(); private: - //! Current frames per second - int fps = 50; - //! Current game scale - double game_scale = 1; - //! Maximum delta time in milliseconds to avoid large jumps - double maximum_delta_time = 250; - //! Delta time for the current frame in milliseconds - double delta_time = 0; - //! Target time per frame in milliseconds - double frame_target_time = 1000.0 / fps; - //! Fixed delta time for fixed updates in milliseconds - double fixed_delta_time = 20; - //! Total elapsed game time in milliseconds - double elapsed_time = 0; - //! Total elapsed time for fixed updates in milliseconds - double elapsed_fixed_time = 0; - //! Time of the last frame in milliseconds - uint64_t last_frame_time = 0; + //! Current frames per second + int fps = 50; + //! Current game scale + double game_scale = 1; + //! Maximum delta time in milliseconds to avoid large jumps + double maximum_delta_time = 250; + //! Delta time for the current frame in milliseconds + double delta_time = 0; + //! Target time per frame in milliseconds + double frame_target_time = 1000.0 / fps; + //! Fixed delta time for fixed updates in milliseconds + double fixed_delta_time = 20; + //! Total elapsed game time in milliseconds + double elapsed_time = 0; + //! Total elapsed time for fixed updates in milliseconds + double elapsed_fixed_time = 0; + //! Time of the last frame in milliseconds + uint64_t last_frame_time = 0; }; } // namespace crepe diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index 17ced0c..39d0d4d 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -191,6 +191,4 @@ int SDLContext::get_height(const Texture & ctx) const { SDL_QueryTexture(ctx.texture.get(), NULL, NULL, NULL, &h); return h; } -void SDLContext::delay(int ms) const{ - SDL_Delay(ms); -} +void SDLContext::delay(int ms) const { SDL_Delay(ms); } diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index 6c57ef9..90147e0 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -74,6 +74,7 @@ private: * \param ms Duration of the delay in milliseconds. */ void delay(int ms) const; + private: /** * \brief Constructs an SDLContext instance. diff --git a/src/example/gameloop.cpp b/src/example/gameloop.cpp index 6cd0301..a676f20 100644 --- a/src/example/gameloop.cpp +++ b/src/example/gameloop.cpp @@ -1,6 +1,6 @@ #include "crepe/api/LoopManager.h" using namespace crepe; -int main(){ +int main() { LoopManager gameloop; gameloop.start(); return 1; diff --git a/src/makefile b/src/makefile index ce5a29f..a2c2961 100644 --- a/src/makefile +++ b/src/makefile @@ -94,11 +94,7 @@ LOEK += example/script.cpp LOEK += test/audio.cpp LOEK += test/dummy.cpp JARO += test/PhysicsTest.cpp -WOUTER += crepe/api/LoopManager.h -WOUTER += crepe/api/LoopManager.cpp -WOUTER += crepe/api/LoopTimer.h -WOUTER += crepe/api/LoopTimer.cpp -FMT := $(WOUTER) #<<< CHANGE THIS TO YOUR NAME FOR STEP 2 +FMT := $(JARO) #<<< CHANGE THIS TO YOUR NAME FOR STEP 2 format: FORCE clang-tidy -p build/compile_commands.json --fix-errors $(FMT) -- cgit v1.2.3