0
0
mirror of https://github.com/Nimac0/SDL_Minigame synced 2026-01-12 21:23:41 +00:00

refined hitboxes so they are not bigger than the sprite

This commit is contained in:
Nimac0 2024-01-27 16:07:25 +01:00
parent 6e23d0d3d8
commit 59fc17ec25
6 changed files with 13 additions and 10 deletions

View File

@ -13,8 +13,10 @@ public:
const char* tag; const char* tag;
TransformComponent* transform; TransformComponent* transform;
bool hasCollision; //added for removing collision of destroyed projectiles bool hasCollision; //added for removing collision of destroyed projectiles
float hitboxScale; //adds a seperate variable for the scale of the hitbox (not the sprite) so each sprite can have a different hitbox size if needed
ColliderComponent(const char* tag); ColliderComponent(const char* tag);
ColliderComponent(const char* tag, float hitboxScale);
void init() override; void init() override;
void update() override; void update() override;

View File

@ -21,6 +21,6 @@ void AssetManager::createProjectile(Vector2D pos, Vector2D velocity, bool source
projectile.addComponent<TransformComponent>(pos.x, pos.y, 32, 32, scale); //32x32 is standard size for objects projectile.addComponent<TransformComponent>(pos.x, pos.y, 32, 32, scale); //32x32 is standard size for objects
projectile.addComponent<SpriteComponent>(texturePath); projectile.addComponent<SpriteComponent>(texturePath);
projectile.addComponent<ProjectileComponent>(range, speed, velocity, source); projectile.addComponent<ProjectileComponent>(range, speed, velocity, source);
projectile.addComponent<ColliderComponent>("projectile"); projectile.addComponent<ColliderComponent>("projectile", 0.6f);
projectile.addGroup((size_t)GroupLabel::PROJECTILE); projectile.addGroup((size_t)GroupLabel::PROJECTILE);
} }

View File

@ -9,14 +9,15 @@ ColliderComponent::ColliderComponent(const char* tag)
{ {
this->tag = tag; this->tag = tag;
this->hasCollision = true; this->hasCollision = true;
this->hitboxScale = 1;
} }
/*ColliderComponent::ColliderComponent(const char* tag, float hitboxScale) //adding hitboxScale helps scaling hitbox and texture/entity seperately ColliderComponent::ColliderComponent(const char* tag, float hitboxScale) //adding hitboxScale helps scaling hitbox and texture/entity seperately
{ {
this->tag = tag; this->tag = tag;
this->hitboxScale this->hitboxScale = hitboxScale;
this->hasCollision = true; this->hasCollision = true;
}*/ }
void ColliderComponent::init() void ColliderComponent::init()
{ {
@ -34,8 +35,8 @@ void ColliderComponent::update()
collider.y = transform->position.y; collider.y = transform->position.y;
collider.w = transform->width * transform->scale; collider.w = (transform->width * transform->scale) * this->hitboxScale;
collider.h = transform->height * transform->scale; collider.h = (transform->height * transform->scale) * this->hitboxScale;
} }
void ColliderComponent::removeCollision() void ColliderComponent::removeCollision()

View File

@ -113,14 +113,14 @@ void Game::init(const char* title, int xpos, int ypos, int width, int height, bo
player.addComponent<TransformComponent>(80,80,2); //posx, posy, scale player.addComponent<TransformComponent>(80,80,2); //posx, posy, scale
player.addComponent<SpriteComponent>("assets/chicken_knight_spritesheet.png", true); //adds sprite (32x32px), path needed player.addComponent<SpriteComponent>("assets/chicken_knight_spritesheet.png", true); //adds sprite (32x32px), path needed
player.addComponent<KeyboardController>(SDL_SCANCODE_W, SDL_SCANCODE_S, SDL_SCANCODE_A, SDL_SCANCODE_D, SDL_SCANCODE_E, Vector2D(1, 0));//custom keycontrols can be added player.addComponent<KeyboardController>(SDL_SCANCODE_W, SDL_SCANCODE_S, SDL_SCANCODE_A, SDL_SCANCODE_D, SDL_SCANCODE_E, Vector2D(1, 0));//custom keycontrols can be added
player.addComponent<ColliderComponent>("player"); //adds tag (for further use, reference tag) player.addComponent<ColliderComponent>("player", 0.8f); //adds tag (for further use, reference tag)
player.addComponent<HealthComponent>(5, &manager, true); player.addComponent<HealthComponent>(5, &manager, true);
player.addGroup((size_t)GroupLabel::PLAYERS); //tell programm what group it belongs to for rendering order player.addGroup((size_t)GroupLabel::PLAYERS); //tell programm what group it belongs to for rendering order
enemy.addComponent<TransformComponent>(600, 500, 2); enemy.addComponent<TransformComponent>(600, 500, 2);
enemy.addComponent<SpriteComponent>("assets/chicken_spritesheet.png", true); enemy.addComponent<SpriteComponent>("assets/chicken_spritesheet.png", true);
enemy.addComponent<KeyboardController>(SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_RCTRL, Vector2D(-1, 0)); enemy.addComponent<KeyboardController>(SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_RCTRL, Vector2D(-1, 0));
enemy.addComponent<ColliderComponent>("enemy"); enemy.addComponent<ColliderComponent>("enemy", 0.8f);
enemy.addComponent<HealthComponent>(5, &manager, false); enemy.addComponent<HealthComponent>(5, &manager, false);
enemy.addGroup((size_t)GroupLabel::ENEMIES); enemy.addGroup((size_t)GroupLabel::ENEMIES);

View File

@ -48,7 +48,7 @@ void TransformComponent::update()
position.x + velocity.x * speed * multiplier, position.x + velocity.x * speed * multiplier,
position.y + velocity.y * 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) if (newPos.x < 0 || newPos.x + (this->width * this->scale) > SCREEN_SIZE_WIDTH || newPos.y < 0 || newPos.y + (this->height * this->scale) > SCREEN_SIZE_HEIGHT)
return; return;
position = newPos; position = newPos;

View File

@ -12,7 +12,7 @@ int main(int argc, char* argv[])
game = new Game(); game = new Game();
game->init("RPG_Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_SIZE_WIDTH, SCREEN_SIZE_HEIGHT, false); game->init("No_Name_Chicken_Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_SIZE_WIDTH, SCREEN_SIZE_HEIGHT, false);
while (game->running()) while (game->running())
{ {
frameStart = SDL_GetTicks(); frameStart = SDL_GetTicks();