diff options
Diffstat (limited to 'src/crepe/api')
-rw-r--r-- | src/crepe/api/Animator.cpp | 3 | ||||
-rw-r--r-- | src/crepe/api/Animator.h | 4 | ||||
-rw-r--r-- | src/crepe/api/Camera.cpp | 10 | ||||
-rw-r--r-- | src/crepe/api/Camera.h | 27 | ||||
-rw-r--r-- | src/crepe/api/Color.cpp | 2 | ||||
-rw-r--r-- | src/crepe/api/Config.h | 7 | ||||
-rw-r--r-- | src/crepe/api/Sprite.cpp | 19 | ||||
-rw-r--r-- | src/crepe/api/Sprite.h | 33 | ||||
-rw-r--r-- | src/crepe/api/Texture.cpp | 13 | ||||
-rw-r--r-- | src/crepe/api/Texture.h | 5 | ||||
-rw-r--r-- | src/crepe/api/Vector2.h | 13 |
11 files changed, 90 insertions, 46 deletions
diff --git a/src/crepe/api/Animator.cpp b/src/crepe/api/Animator.cpp index 464b0fd..b6540cf 100644 --- a/src/crepe/api/Animator.cpp +++ b/src/crepe/api/Animator.cpp @@ -20,5 +20,8 @@ Animator::Animator(game_object_id_t id, Sprite & ss, int row, int col, int col_a animator_rect.x = 0; animator_rect.y = col_animator * animator_rect.h; this->active = false; + + // need to do this for to get the aspect ratio for a single clipping in the spritesheet + this->spritesheet.aspect_ratio = static_cast<double>(animator_rect.w) / animator_rect.h; } Animator::~Animator() { dbg_trace(); } diff --git a/src/crepe/api/Animator.h b/src/crepe/api/Animator.h index 53f4b91..19c9ebd 100644 --- a/src/crepe/api/Animator.h +++ b/src/crepe/api/Animator.h @@ -40,10 +40,6 @@ public: Animator(uint32_t id, Sprite & spritesheet, int row, int col, int col_animate); ~Animator(); // dbg_trace - Animator(const Animator &) = delete; - Animator(Animator &&) = delete; - Animator & operator=(const Animator &) = delete; - Animator & operator=(Animator &&) = delete; private: //! A reference to the Sprite sheet containing the animation frames. diff --git a/src/crepe/api/Camera.cpp b/src/crepe/api/Camera.cpp index 5835bdd..0831f45 100644 --- a/src/crepe/api/Camera.cpp +++ b/src/crepe/api/Camera.cpp @@ -1,3 +1,4 @@ +#include "types.h" #include "util/Log.h" #include "Camera.h" @@ -6,9 +7,14 @@ using namespace crepe; -Camera::Camera(game_object_id_t id, const Color & bg_color) +Camera::Camera(game_object_id_t id, const Color & bg_color, const ivec2 & screen, + const ivec2 & viewport, const double & zoom, const vec2 & offset) : Component(id), - bg_color(bg_color) { + bg_color(bg_color), + offset(offset), + screen(screen), + viewport(viewport), + zoom(zoom) { dbg_trace(); } diff --git a/src/crepe/api/Camera.h b/src/crepe/api/Camera.h index e0cda34..c7b2d08 100644 --- a/src/crepe/api/Camera.h +++ b/src/crepe/api/Camera.h @@ -2,6 +2,7 @@ #include "Color.h" #include "Component.h" +#include "types.h" namespace crepe { @@ -20,33 +21,35 @@ public: * \param id Unique identifier for the camera component. * \param bg_color Background color for the camera view. */ - Camera(game_object_id_t id, const Color & bg_color); + Camera(game_object_id_t id, const Color & bg_color, const ivec2 & screen, + const ivec2 & viewport, const double & zoom, const vec2 & offset = {0, 0}); ~Camera(); // dbg_trace only public: //! Background color of the camera view. - Color bg_color; + const Color bg_color; - //! Aspect ratio height for the camera. - double aspect_height = 480; + //! offset postion from the game object transform component + vec2 offset; - //! Aspect ratio width for the camera. - double aspect_width = 640; + //! pos the postion of the camera in world space this will be filled with + //pos = transform + offset + vec2 pos = {0, 0}; - //! X-coordinate of the camera position. - double x = 0.0; + //! screen the display size in pixels ( output resolution ) + const ivec2 screen = {1080, 720}; - //! Y-coordinate of the camera position. - double y = 0.0; + //! viewport is the area of the world visible through the camera (in world units) + const ivec2 viewport = {500, 1000}; //! Zoom level of the camera view. - double zoom = 1.0; + const double zoom = 1.0f; public: /** * \brief Gets the maximum number of camera instances allowed. * \return Maximum instance count as an integer. */ - virtual int get_instances_max() const { return 10; } + virtual int get_instances_max() const { return 1; } }; } // namespace crepe diff --git a/src/crepe/api/Color.cpp b/src/crepe/api/Color.cpp index 29bd77a..dc7c15f 100644 --- a/src/crepe/api/Color.cpp +++ b/src/crepe/api/Color.cpp @@ -2,7 +2,7 @@ using namespace crepe; -const Color Color::WHITE{0xff, 0xff, 0xff}; +const Color Color::WHITE{0xff, 0xff, 0xff, 0xff}; const Color Color::RED{0xff, 0x00, 0x00}; const Color Color::GREEN{0x00, 0xff, 0x00}; const Color Color::BLUE{0x00, 0x00, 0xff}; diff --git a/src/crepe/api/Config.h b/src/crepe/api/Config.h index 0c9d116..2525120 100644 --- a/src/crepe/api/Config.h +++ b/src/crepe/api/Config.h @@ -1,6 +1,7 @@ #pragma once #include "../util/Log.h" +#include "types.h" namespace crepe { @@ -62,6 +63,12 @@ public: double gravity = 1; } physics; + //! default window settings + struct { + //TODO make this constexpr because this will never change + const ivec2 def_size = {1080, 720}; + } win_set; + //! Asset loading options struct { /** diff --git a/src/crepe/api/Sprite.cpp b/src/crepe/api/Sprite.cpp index bd2d5cf..65c6cc3 100644 --- a/src/crepe/api/Sprite.cpp +++ b/src/crepe/api/Sprite.cpp @@ -1,7 +1,7 @@ -#include <memory> +#include <cmath> +#include <utility> #include "../util/Log.h" -#include "facade/SDLContext.h" #include "Component.h" #include "Sprite.h" @@ -10,16 +10,21 @@ using namespace std; using namespace crepe; -Sprite::Sprite(game_object_id_t id, const shared_ptr<Texture> image, const Color & color, - const FlipSettings & flip) +Sprite::Sprite(game_object_id_t id, Texture & image, const Color & color, + const FlipSettings & flip, uint8_t sort_layer, uint8_t order_layer, int height) : Component(id), color(color), flip(flip), - sprite_image(image) { + sprite_image(std::move(image)), + sorting_in_layer(sort_layer), + order_in_layer(order_layer), + height(height) { + dbg_trace(); - this->sprite_rect.w = sprite_image->get_width(); - this->sprite_rect.h = sprite_image->get_height(); + this->sprite_rect.w = sprite_image.get_width(); + this->sprite_rect.h = sprite_image.get_height(); + this->aspect_ratio = static_cast<double>(this->sprite_rect.w) / this->sprite_rect.h; } Sprite::~Sprite() { dbg_trace(); } diff --git a/src/crepe/api/Sprite.h b/src/crepe/api/Sprite.h index 74a55d4..9d75ab6 100644 --- a/src/crepe/api/Sprite.h +++ b/src/crepe/api/Sprite.h @@ -1,11 +1,10 @@ #pragma once -#include <memory> - #include "../Component.h" #include "Color.h" #include "Texture.h" +#include <cstdint> namespace crepe { @@ -42,9 +41,12 @@ public: * \param image Shared pointer to the texture for this sprite. * \param color Color tint applied to the sprite. * \param flip Flip settings for horizontal and vertical orientation. + * \param order_layer decides the sorting in layer of the sprite. + * \param sort_layer decides the order in layer of the sprite. + * \param height the height of the image in game units */ - Sprite(game_object_id_t id, const std::shared_ptr<Texture> image, const Color & color, - const FlipSettings & flip); + Sprite(game_object_id_t id, Texture & image, const Color & color, + const FlipSettings & flip, uint8_t sort_layer, uint8_t order_layer, int height); /** * \brief Destroys the Sprite instance. @@ -52,24 +54,29 @@ public: ~Sprite(); //! Texture used for the sprite - const std::shared_ptr<Texture> sprite_image; + const Texture sprite_image; + //! Color tint of the sprite Color color; + //! Flip settings for the sprite FlipSettings flip; + //! Layer sorting level of the sprite - uint8_t sorting_in_layer = 0; + const uint8_t sorting_in_layer; //! Order within the sorting layer - uint8_t order_in_layer = 0; + const uint8_t order_in_layer; + + //! height in world units + const int height; -public: /** - * \brief Gets the maximum number of instances allowed for this sprite. - * \return Maximum instance count as an integer. + * \aspect_ratio ratio of the img so that scaling will not become weird * - * For now is this number randomly picked. I think it will eventually be 1. + * cannot be const because if Animator component is addded then ratio becomes scuffed and + * does it need to be calculated again in the Animator */ - virtual int get_instances_max() const { return 10; } + double aspect_ratio; private: //! Reads the sprite_rect of sprite @@ -82,7 +89,7 @@ private: friend class AnimatorSystem; //! Render area of the sprite this will also be adjusted by the AnimatorSystem if an Animator - // object is present in GameObject + // object is present in GameObject. this is in sprite pixels Rect sprite_rect; }; diff --git a/src/crepe/api/Texture.cpp b/src/crepe/api/Texture.cpp index 264d7b1..576bdc3 100644 --- a/src/crepe/api/Texture.cpp +++ b/src/crepe/api/Texture.cpp @@ -1,5 +1,3 @@ -#include <SDL2/SDL_render.h> - #include "../facade/SDLContext.h" #include "../util/Log.h" @@ -19,6 +17,17 @@ Texture::~Texture() { this->texture.reset(); } +Texture::Texture(Texture&& other) noexcept + : texture(std::move(other.texture)){ +} + +Texture& Texture::operator=(Texture&& other) noexcept { + if (this != &other) { + texture = std::move(other.texture); + } + return *this; +} + void Texture::load(const Asset & res) { SDLContext & ctx = SDLContext::get_instance(); this->texture = ctx.texture_from_path(res.get_path()); diff --git a/src/crepe/api/Texture.h b/src/crepe/api/Texture.h index b4f7d07..dc4a6d7 100644 --- a/src/crepe/api/Texture.h +++ b/src/crepe/api/Texture.h @@ -35,6 +35,11 @@ public: */ ~Texture(); // FIXME: this constructor shouldn't be necessary because this class doesn't manage memory + + Texture(Texture&& other) noexcept; + Texture& operator=(Texture&& other) noexcept; + Texture(const Texture&) = delete; + Texture& operator=(const Texture&) = delete; /** * \brief Gets the width of the texture. diff --git a/src/crepe/api/Vector2.h b/src/crepe/api/Vector2.h index c278c87..2b31d90 100644 --- a/src/crepe/api/Vector2.h +++ b/src/crepe/api/Vector2.h @@ -31,8 +31,14 @@ struct Vector2 { //! Divides this vector by another vector element-wise and returns the result. Vector2 operator/(const Vector2<T> & other) const; - //! Divides this vector by a scalar and returns the result. - Vector2 operator/(T scalar) const; + //! Multiplies this vector by another vector element-wise and updates this vector. + Vector2 & operator*=(const Vector2<T> & other); + + //! Divides a scalar value to both components of this vector and updates this vector. + Vector2 operator/(const T & other) const; + + //! Divides a scalar value to both components of this vector and updates this vector. + Vector2 operator/(T other) const; //! Adds another vector to this vector and updates this vector. Vector2 & operator+=(const Vector2<T> & other); @@ -46,9 +52,6 @@ struct Vector2 { //! Subtracts a scalar value from both components of this vector and updates this vector. Vector2 & operator-=(T other); - //! Multiplies this vector by another vector element-wise and updates this vector. - Vector2 & operator*=(const Vector2<T> & other); - //! Multiplies this vector by a scalar and updates this vector. Vector2 & operator*=(T other); |