103 lines
2.1 KiB
C++
103 lines
2.1 KiB
C++
#include "const.h"
|
|
#include "map.h"
|
|
|
|
// Constructor
|
|
Map::Map(SDL_Renderer *renderer, std::string file, Asset *asset)
|
|
{
|
|
this->asset = asset;
|
|
|
|
texture_tile = new LTexture();
|
|
texture_actor = new LTexture();
|
|
texture_bg = new LTexture();
|
|
|
|
loadTextureFromFile(texture_tile, asset->get("tiles_volcano.png"), renderer);
|
|
loadTextureFromFile(texture_actor, asset->get("actors.png"), renderer);
|
|
loadTextureFromFile(texture_bg, asset->get("bkg_surface.png"), renderer);
|
|
|
|
sprite_tile = new AnimatedSprite(texture_tile, renderer);
|
|
sprite_actor = new AnimatedSprite(texture_actor, renderer);
|
|
|
|
const SDL_Rect rect = {0, 0, GAMECANVAS_WIDTH, GAMECANVAS_HEIGHT};
|
|
background = new Sprite(rect, texture_bg, renderer);
|
|
|
|
src_rect = {0, 0, 0, 0};
|
|
dst_rect = {0, 0, 0, 0};
|
|
w = 0;
|
|
h = 0;
|
|
room = 0;
|
|
|
|
loadFromFile(file);
|
|
}
|
|
|
|
// Destructor
|
|
Map::~Map()
|
|
{
|
|
texture_tile->unload();
|
|
delete texture_tile;
|
|
texture_tile = nullptr;
|
|
|
|
texture_actor->unload();
|
|
delete texture_actor;
|
|
texture_actor = nullptr;
|
|
|
|
texture_bg->unload();
|
|
delete texture_bg;
|
|
texture_bg = nullptr;
|
|
|
|
delete sprite_tile;
|
|
sprite_tile = nullptr;
|
|
delete sprite_actor;
|
|
|
|
sprite_actor = nullptr;
|
|
delete background;
|
|
background = nullptr;
|
|
|
|
delete[] tile;
|
|
delete[] actor;
|
|
}
|
|
|
|
// Carga el mapa a partir de un fichero
|
|
void Map::loadFromFile(std::string path)
|
|
{
|
|
std::string filename = path.substr(path.find_last_of("\\/") + 1);
|
|
SDL_RWops *file = SDL_RWFromFile(path.c_str(), "r+b");
|
|
Uint8 *w;
|
|
Uint8 *h;
|
|
|
|
if (file == NULL)
|
|
{
|
|
printf("Warning: Unable to open %s file\n", filename.c_str());
|
|
}
|
|
else
|
|
{
|
|
printf("Reading file %s\n", filename.c_str());
|
|
|
|
SDL_RWread(file, &w, sizeof(Uint8), 1);
|
|
SDL_RWread(file, &h, sizeof(Uint8), 1);
|
|
|
|
long size = (*w) * (*h);
|
|
tile = new Uint8[size];
|
|
actor = new Uint8[size];
|
|
|
|
for (long i = 0; i < size; i++)
|
|
SDL_RWread(file, &tile[i], sizeof(Uint8), 1);
|
|
|
|
for (long i = 0; i < size; i++)
|
|
SDL_RWread(file, &actor[i], sizeof(Uint8), 1);
|
|
|
|
SDL_RWclose(file);
|
|
}
|
|
}
|
|
|
|
// Actualiza todas las variables
|
|
void Map::update()
|
|
{
|
|
background->setPosX(0);
|
|
background->setPosY(0);
|
|
}
|
|
|
|
// Dibuja el objeto
|
|
void Map::render()
|
|
{
|
|
background->render();
|
|
} |