From 6e23d0d3d89a3fde4b3f8f508e5afea21c845a28 Mon Sep 17 00:00:00 2001 From: Nimac0 Date: Fri, 26 Jan 2024 23:51:44 +0100 Subject: [PATCH] added bounding box --- include/AnimationHandler.h | 18 +++++++++--------- include/KeyboardController.h | 8 ++++---- include/SpriteComponent.h | 4 ++-- src/ColliderComponent.cpp | 9 +++++++++ src/SpriteComponent.cpp | 12 ++++++------ src/TransformComponent.cpp | 14 +++++++++++--- 6 files changed, 41 insertions(+), 24 deletions(-) diff --git a/include/AnimationHandler.h b/include/AnimationHandler.h index ea6bf71..1fc1024 100644 --- a/include/AnimationHandler.h +++ b/include/AnimationHandler.h @@ -1,22 +1,22 @@ #pragma once - +#include struct Animation { - int index; - int frames; - int speed; + uint8_t index; + uint8_t frames; + uint8_t speed; Animation() {} - Animation(int i, int f, int s) + Animation(uint8_t index, uint8_t frames, uint8_t speed) { - index = i; - frames = f; - speed = s; + this->index = index; + this->frames = frames; + this->speed = speed; } }; -enum AnimationType +enum AnimationType //TODO enum class { IDLE = 0, WALK_R = 1, diff --git a/include/KeyboardController.h b/include/KeyboardController.h index a37ca93..528b0b1 100644 --- a/include/KeyboardController.h +++ b/include/KeyboardController.h @@ -11,7 +11,7 @@ class KeyboardController : public Component { public: TransformComponent* transform; - const Uint8* keystates = SDL_GetKeyboardState(NULL); + const uint8_t* keystates = SDL_GetKeyboardState(NULL); SDL_Scancode up; SDL_Scancode down; SDL_Scancode left; @@ -20,9 +20,9 @@ public: SpriteComponent* sprite; - //for attack cooldown in between shots - Uint32 lastFireTime; - Uint32 fireCooldown = 1000; //in ms can be adjusted to change possible attack-speed + //for attack cooldown in between shots + uint32_t lastFireTime; + uint32_t fireCooldown = 800; //in ms can be adjusted to change possible attack-speed KeyboardController() = default; KeyboardController(SDL_Scancode up, SDL_Scancode down, SDL_Scancode left, SDL_Scancode right, SDL_Scancode fire, Vector2D fireVelocity); diff --git a/include/SpriteComponent.h b/include/SpriteComponent.h index 5a51c59..d110922 100644 --- a/include/SpriteComponent.h +++ b/include/SpriteComponent.h @@ -21,8 +21,8 @@ private: SDL_Rect srcRect, destRect; bool animated = false; - int frames = 0; - int speed = 100; + uint8_t frames = 0; + uint8_t speed = 100; public: SpriteComponent() = default; diff --git a/src/ColliderComponent.cpp b/src/ColliderComponent.cpp index 6418aea..f7b133e 100644 --- a/src/ColliderComponent.cpp +++ b/src/ColliderComponent.cpp @@ -3,6 +3,7 @@ #include "Entity.h" #include "Game.h" #include "TransformComponent.h" +#include ColliderComponent::ColliderComponent(const char* tag) { @@ -10,6 +11,13 @@ ColliderComponent::ColliderComponent(const char* tag) this->hasCollision = true; } +/*ColliderComponent::ColliderComponent(const char* tag, float hitboxScale) //adding hitboxScale helps scaling hitbox and texture/entity seperately +{ + this->tag = tag; + this->hitboxScale + this->hasCollision = true; +}*/ + void ColliderComponent::init() { if (!entity->hasComponent()) { @@ -25,6 +33,7 @@ void ColliderComponent::update() collider.x = transform->position.x; collider.y = transform->position.y; + collider.w = transform->width * transform->scale; collider.h = transform->height * transform->scale; } diff --git a/src/SpriteComponent.cpp b/src/SpriteComponent.cpp index 1d64ffa..c0a279b 100644 --- a/src/SpriteComponent.cpp +++ b/src/SpriteComponent.cpp @@ -15,9 +15,9 @@ SpriteComponent::SpriteComponent(const char* path, bool isAnimated) { animated = isAnimated; - Animation* idle = new Animation((int)AnimationType::IDLE, 2, 200); - Animation* walkR = new Animation((int)AnimationType::WALK_R, 2, 200); - Animation* walkL = new Animation((int)AnimationType::WALK_L, 2, 200); + Animation* idle = new Animation((uint8_t)AnimationType::IDLE, 2, 200); + Animation* walkR = new Animation((uint8_t)AnimationType::WALK_R, 2, 200); + Animation* walkL = new Animation((uint8_t)AnimationType::WALK_L, 2, 200); animations.emplace(IDLE, idle); animations.emplace(WALK_R, walkR); @@ -68,7 +68,7 @@ void SpriteComponent::draw() void SpriteComponent::play(AnimationType type) { - animationIndex = animations.at(type)->index; - frames = animations.at(type)->frames; - speed = animations.at(type)->speed; + this->animationIndex = animations.at(type)->index; + this->frames = animations.at(type)->frames; + this->speed = animations.at(type)->speed; } diff --git a/src/TransformComponent.cpp b/src/TransformComponent.cpp index 1f71846..403ee69 100644 --- a/src/TransformComponent.cpp +++ b/src/TransformComponent.cpp @@ -1,4 +1,5 @@ #include "TransformComponent.h" +#include "Constants.h" TransformComponent::TransformComponent() { @@ -41,7 +42,14 @@ void TransformComponent::init() void TransformComponent::update() { // if(velocity.x != 0 && velocity.y != 0) - double multiplier = velocity.x != 0 && velocity.y != 0 ? 0.707 : 1; //normalizes vector - position.x += velocity.x * speed * multiplier; - position.y += velocity.y * speed * multiplier; + + float multiplier = velocity.x != 0 && velocity.y != 0 ? 0.707 : 1; //normalizes vector + Vector2D newPos( + position.x + velocity.x * speed * multiplier, + position.y + velocity.y * speed * multiplier + ); + if (newPos.x < 0 || newPos.x > SCREEN_SIZE_WIDTH || newPos.y < 0 || newPos.y > SCREEN_SIZE_HEIGHT) + return; + + position = newPos; }