#include "pch.h" #include "Item.h" #include "Tile.h" #include "Game.h" const float Item::m_ClipWidth{ 80.f }; const float Item::m_ClipHeight{ 80.f }; const Vector2f Item::m_GravityAcceleration{ 0, -981.0f * 2 }; Texture* Item::m_pTextures{ nullptr }; int Item::m_Count{ 0 }; Item::Item(const Point2f& pos, float width, float height, const Rectf& srcRect, const Vector2f& hitboxMargin) : m_Hitbox { pos.x, pos.y, width, height } , m_SrcRect{ 0, 0, m_ClipWidth, m_ClipHeight } , m_Velocity{ } , m_Angle{ } , m_ActionState { ActionState::IDLE } , m_SpriteRect { 0, 0, 80, 80 } , m_HitboxMargin{ hitboxMargin } { if (m_Count == 0) { m_pTextures = new Texture{ "Resources/Sprites/items.png" }; } m_Count++; } Item::Item(int x, int y) : Item(Point2f{ x * Tile::m_Size, y * Tile::m_Size }) { } Item::Item(const Point2f& pos) : m_Hitbox{ pos.x, pos.y, 0, 0 } , m_SrcRect{ 0, 0, m_ClipWidth, m_ClipHeight } , m_Velocity{ } , m_Angle{ } , m_ActionState{ ActionState::IDLE } , m_SpriteRect{ 0, 0, 80, 80 } { if (m_Count == 0) { m_pTextures = new Texture{ "Resources/Sprites/items.png" }; } m_Count++; } Item::~Item() { m_Count--; if (m_Count == 0) { delete m_pTextures; m_pTextures = nullptr; } } void Item::CenterInTile() { m_Hitbox.left += (Tile::m_Size - m_Hitbox.width) / 2; } Rectf& Item::GetHitbox() { return m_Hitbox; } void Item::Update(float elapsedSec, const Level& level) { if (m_ActionState != ActionState::HELD) { if (!level.IsOnGround(m_Hitbox)) m_Velocity += elapsedSec * m_GravityAcceleration; m_Hitbox.bottom += m_Velocity.y * elapsedSec; m_Hitbox.left += m_Velocity.x * elapsedSec; level.HandleCollision(m_Hitbox, m_Velocity); } switch (m_ActionState) { case ActionState::IDLE: break; default: break; } m_SpriteRect.left = m_Hitbox.left - m_HitboxMargin.x; m_SpriteRect.bottom = m_Hitbox.bottom - m_HitboxMargin.y; } void Item::Draw() const { if (Game::DrawDebug) { //draw hitbox utils::SetColor(Color4f{ 1, 0, 0, 0.5f }); utils::FillRect(m_Hitbox); } Rectf destRect{ -m_SpriteRect.width / 2, 0, m_SpriteRect.width, m_SpriteRect.height }; glPushMatrix(); glTranslatef(m_SpriteRect.left - destRect.left, m_SpriteRect.bottom, 0); //if (m_Direction == Direction::LEFT) //{ // glScalef(-1, 1, 1); //} m_pTextures->Draw(destRect, m_SrcRect); glPopMatrix(); }