57 lines
2.1 KiB
C++
57 lines
2.1 KiB
C++
#include "game/scenes/game_scene.hpp"
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include "core/locale/locale.hpp"
|
|
#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<float>(GameCanvas::CENTER_X) - (static_cast<float>(Player::SPRITE_WIDTH) / 2.0F);
|
|
const float Y = static_cast<float>(GameCanvas::CENTER_Y) - (static_cast<float>(Player::SPRITE_HEIGHT) / 2.0F);
|
|
players_.emplace_back(std::make_unique<Player>(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(Locale::get().text("notification.test")); }
|
|
}
|
|
}
|
|
|
|
const float DT = static_cast<float>(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();
|
|
}
|