1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #include "entity.h"
- #include "debuggers.h"
-
- namespace pabloader {
- Entity::Entity(Debuggers* game, olc::Sprite* s)
- : sprite(s)
- , pos(0, 0)
- , vel(0, 0)
- , size(s->width / 4, s->height / 4)
- {
- Entity::game = game;
- }
-
- void Entity::Update(float dt)
- {
- pos += vel * dt;
- vel.y += game->gravity * dt;
-
- rotation += rotationSpeed * dt;
-
- transform.Reset();
- transform.Rotate(rotation);
- transform.Translate(pos.x, pos.y);
- }
-
- bool Entity::Collides(Entity* entity)
- {
- bool collidesX = (pos.x - size.x / 2 < entity->pos.x + entity->size.x / 2) && (entity->pos.x - entity->size.x / 2 < pos.x + size.x / 2);
- bool collidesY = (pos.y - size.y / 2 < entity->pos.y + entity->size.y / 2) && (entity->pos.y - entity->size.y / 2 < pos.y + size.y / 2);
- return collidesX && collidesY;
- }
-
- void Entity::Draw()
- {
- if (IsInScreen()) {
- #ifdef _DEBUG
- if (game->debug) {
- game->DrawRect(pos.x - size.x / 2, pos.y - size.y / 2, size.x, size.y, DEBUG_COLOR);
- }
- #endif
- game->SetPixelMode(olc::Pixel::MASK);
- olc::GFX2D::DrawPartialSprite(sprite, tile.x * size.x, tile.y * size.y, size.x, size.y, transform, true);
- game->SetPixelMode(olc::Pixel::NORMAL);
- }
- }
-
- bool Entity::IsActive()
- {
- return pos.y - size.y / 2 < game->GameScreenHeight();
- }
- bool Entity::IsInScreen()
- {
- return pos.x > -size.x / 2 && pos.y > -size.y
- && pos.x < game->ScreenWidth() + size.x / 2
- && pos.y < game->ScreenHeight() + size.y / 2;
- }
-
- bool Entity::IsAlive()
- {
- return alive;
- }
-
- void Entity::ResetPosition()
- {
- pos.x = game->GetRandom(size.x, game->ScreenWidth() - size.x);
- pos.y = game->GetRandom(-20, -game->ScreenHeight());
- vel.x = 0;
- vel.y = 0;
- tile.x = game->GetRandom<int>(0, tileDim.x);
- tile.y = game->GetRandom<int>(0, tileDim.y);
- rotationSpeed = game->GetRandom(-3.14f, 3.14f);
- alive = true;
- }
-
- void Entity::Kill()
- {
- pos.y = game->ScreenHeight() + 100;
- alive = false;
- }
- }
|