Tilemap YAML: sala piràmide renderitzada amb tiles reals de tomb.gif i caixa de debug llevada (v0.13.0)
This commit is contained in:
1 parent
c921833537
commit
46a578fd86
12 files changed
+501
-45
No files matched your search
@@ -18,7 +18,8 @@
|
||||
#include "utils/defaults.hpp"
|
||||
#include "utils/defines.hpp"
|
||||
|
||||
GameScene::GameScene() {
|
||||
GameScene::GameScene()
|
||||
: tilemap_("data/maps/pyramid.yaml") {
|
||||
Resource::Cache::get().loadSurface("player.gif", "data/player/player.gif");
|
||||
Resource::Cache::get().loadAnimation("player.yaml", "data/player/player.yaml");
|
||||
|
||||
@@ -59,9 +60,11 @@ void GameScene::render() {
|
||||
const auto BG_ARGB = Resource::Cache::get().getPalette("ui")[UiColor::CANVAS_BG];
|
||||
Screen::get().fillRect(0, 0, GameCanvas::WIDTH, GameCanvas::HEIGHT, BG_ARGB);
|
||||
|
||||
// Fons del mapa (marcador, muros, sòl). Els sarcòfags es pinten després
|
||||
// fila a fila entrellaçats amb els jugadors per al Z-order.
|
||||
Map::renderBackground();
|
||||
// Mapa visual: textura prerenderitzada del tilemap. Els sarcòfags
|
||||
// queden "foradats" (cel·les transparents) perquè passaran a ser
|
||||
// actors independents; Map::collides encara els bloqueja per a les
|
||||
// col·lisions del jugador.
|
||||
tilemap_.render();
|
||||
|
||||
// Ordenem punters a jugadors per Y dels peus (ascendent = més al fons
|
||||
// primer). Usem un vector auxiliar per no tocar l'ordre d'entrada de
|
||||
@@ -73,24 +76,10 @@ void GameScene::render() {
|
||||
return a->getFeetY() < b->getFeetY();
|
||||
});
|
||||
|
||||
// Interleaving: per cada fila de sarcòfags, primer pintem els jugadors
|
||||
// que hi queden "darrere" (peus per sobre de la cara inferior de la fila)
|
||||
// i després la fila. Un jugador amb els peus davall d'una fila es pinta
|
||||
// sobre d'ella (el seu cap tapa la fila superior si s'hi encavalca).
|
||||
std::size_t p = 0;
|
||||
for (int row = 0; row < Map::GRID_ROWS; ++row) {
|
||||
const auto ROW_BOTTOM = static_cast<float>(Map::getSarcRowBottomY(row));
|
||||
while (p < sorted.size() && sorted[p]->getFeetY() <= ROW_BOTTOM) {
|
||||
sorted[p]->render();
|
||||
++p;
|
||||
}
|
||||
Map::renderSarcsRow(row);
|
||||
}
|
||||
// Jugadors que queden per davall de l'última fila de sarcòfags.
|
||||
while (p < sorted.size()) {
|
||||
sorted[p]->render();
|
||||
++p;
|
||||
}
|
||||
// De moment els sarcòfags no es pinten (seran actors independents);
|
||||
// dibuixem tots els jugadors sobre el tilemap ja ordenats per Y. Quan
|
||||
// els sarcs siguen sprites, tornarem a interleave per al Z-order.
|
||||
for (auto* player : sorted) { player->render(); }
|
||||
|
||||
Notifier::get().render();
|
||||
RenderInfo::get().render();
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "core/scene/scene.hpp"
|
||||
#include "game/map/tilemap.hpp"
|
||||
|
||||
class Player;
|
||||
|
||||
@@ -16,6 +17,8 @@ class GameScene : public Scene {
|
||||
void render() override;
|
||||
|
||||
private:
|
||||
Tilemap tilemap_;
|
||||
|
||||
// Vector des del principi: AEE suportarà multijugador local; cada Player
|
||||
// té els seus propis Controls i entra al vector amb una crida extra.
|
||||
std::vector<std::unique_ptr<Player>> players_;
|
||||
|
||||
Reference in new issue
Block a user