#include "game/scenes/game_scene.hpp" #include #include "core/rendering/notifier.hpp" #include "core/rendering/render_info.hpp" #include "core/rendering/screen.hpp" #include "core/resources/resource_cache.hpp" #include "core/system/event_buffer.hpp" #include "game/entities/player.hpp" #include "utils/defaults.hpp" #include "utils/defines.hpp" GameScene::GameScene() { Resource::Cache::get().loadSurface("player.gif", "data/player/player.gif"); Resource::Cache::get().loadAnimation("player.yaml", "data/player/player.yaml"); // Jugador 0: fletxes del teclat (Defaults::KeysGame). Instanciar-ne un // segon només requereix afegir una altra entrada amb uns Controls // distints (p.ex. WASD). const Player::Controls CONTROLS_P1{ .up = Defaults::KeysGame::UP, .down = Defaults::KeysGame::DOWN, .left = Defaults::KeysGame::LEFT, .right = Defaults::KeysGame::RIGHT, }; const float X = static_cast(GameCanvas::CENTER_X) - (static_cast(Player::SPRITE_WIDTH) / 2.0F); const float Y = static_cast(GameCanvas::CENTER_Y) - (static_cast(Player::SPRITE_HEIGHT) / 2.0F); players_.emplace_back(std::make_unique(X, Y, CONTROLS_P1)); } GameScene::~GameScene() = default; void GameScene::update(int delta_ms) { for (const auto& event : EventBuffer::events) { if (event.type == SDL_EVENT_KEY_DOWN) { if (event.key.scancode == SDL_SCANCODE_ESCAPE) { wants_quit_ = true; } if (event.key.scancode == SDL_SCANCODE_F3) { RenderInfo::get().toggle(); } if (event.key.scancode == SDL_SCANCODE_F4) { Notifier::get().notify("notificacio de prova"); } } } const float DT = static_cast(delta_ms) / 1000.0F; for (auto& player : players_) { player->update(DT); } RenderInfo::get().update(delta_ms); Notifier::get().update(delta_ms); } void GameScene::render() { Screen::get().clear(0x00, 0x00, 0x00); for (auto& player : players_) { player->render(); } Notifier::get().render(); RenderInfo::get().render(); Screen::get().present(); }