Skip to content

Commit

Permalink
Update to 0.2.0-a
Browse files Browse the repository at this point in the history
- Cambio del formato de pixel en los mapas de colisión de ABGR a RGBA.
- Cambio del sistema de almacenamiento en archivo y en RAM del mapa de
  colisiones, usando tiles para comprimir la información del mismo.
- Optimización del contador de progreso en las utilidades.
- Optimización de la detección de argumentos en las utilidades.
- Optimización de la generación de nombres de archivo en las utilidades.
- Actualizado el ejemplo de uso de los mapas de colisión.
  • Loading branch information
knightfox75 committed Oct 24, 2017
1 parent 6c59d9f commit 6513e6a
Show file tree
Hide file tree
Showing 28 changed files with 610 additions and 191 deletions.
Binary file modified Examples/collisions/data/maze.map
Binary file not shown.
24 changes: 15 additions & 9 deletions Examples/collisions/source/demo/demo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -246,13 +246,13 @@ void Demo::AddCherries() {
Vector2I32 pos; // Calculo de las posiciones
Size2 map_size = ngn->collisions->GetMapSize(cmap_data); // Obten el tamaño del mapa de colisiones

for (int32_t y = 0; y < map_size.height; y += TILE_SIZE) { // Steps del tamaño del tile del mapa de colisiones
pos.y = y + HALF_TILE;
for (int32_t x = 0; x < map_size.width; x += TILE_SIZE) {
for (int32_t y = 0; y < map_size.height; y += cmap_data->header.tile_size) { // Steps del tamaño del tile del mapa de colisiones
pos.y = y + (cmap_data->header.tile_size / 2);
for (int32_t x = 0; x < map_size.width; x += cmap_data->header.tile_size) {
// Punto para colocar el objeto
pos.x = x + HALF_TILE;
pos.x = x + (cmap_data->header.tile_size / 2);
// Si hay el color del mapa coincide, coloca un nuevo sprite
if (ngn->collisions->GetPixel(cmap_data, pos.x, pos.y) == 0xFFFF00FF) { // AABBGGRR
if (ngn->collisions->GetPixel(cmap_data, pos.x, pos.y) == COLOR_MAGENTA) {
cherry.push_back(new NGN_Sprite(cherry_data, pos.x, pos.y));
}
}
Expand Down Expand Up @@ -288,6 +288,12 @@ void Demo::Move() {
CheckRight(player, cmap_data);
}

/*
std::cout <<
ngn->collisions->GetPixel(cmap_data, (int32_t)player->position.x, (int32_t)player->position.y)
<< std::endl;
*/

}


Expand All @@ -309,7 +315,7 @@ bool Demo::CheckUp(NGN_Sprite* sprite, NGN_CollisionMapData* cmap) {
x = ((int32_t)sprite->position.x + (i - ((int32_t)sprite->width / 2)));
y = ((int32_t)sprite->position.y - ((int32_t)sprite->height / 2));
// Si hay colision...
if (ngn->collisions->GetPixel(cmap, x, y) == 0xFF00FF00) { // AABBGGRR
if (ngn->collisions->GetPixel(cmap, x, y) == COLOR_GREEN) {
// Desplaza un pixel abajo el sprite
sprite->position.y ++;
// Autoajuste
Expand Down Expand Up @@ -348,7 +354,7 @@ bool Demo::CheckDown(NGN_Sprite* sprite, NGN_CollisionMapData* cmap) {
x = ((int32_t)sprite->position.x + (i - ((int32_t)sprite->width / 2)));
y = ((int32_t)sprite->position.y + ((int32_t)sprite->height / 2) - 1);
// Si hay colision...
if (ngn->collisions->GetPixel(cmap, x, y) == 0xFF00FF00) { // AABBGGRR
if (ngn->collisions->GetPixel(cmap, x, y) == COLOR_GREEN) {
// Desplaza un pixel arriba el sprite
sprite->position.y --;
// Autoajuste
Expand Down Expand Up @@ -387,7 +393,7 @@ bool Demo::CheckLeft(NGN_Sprite* sprite, NGN_CollisionMapData* cmap) {
x = ((int32_t)sprite->position.x - ((int32_t)sprite->width / 2));
y = ((int32_t)sprite->position.y + (i - ((int32_t)sprite->height / 2)));
// Si hay colision...
if (ngn->collisions->GetPixel(cmap, x, y) == 0xFF00FF00) { // AABBGGRR
if (ngn->collisions->GetPixel(cmap, x, y) == COLOR_GREEN) {
// Desplaza un pixel a la derecha el sprite
sprite->position.x ++;
// Autoajuste
Expand Down Expand Up @@ -426,7 +432,7 @@ bool Demo::CheckRight(NGN_Sprite* sprite, NGN_CollisionMapData* cmap) {
x = ((int32_t)sprite->position.x + ((int32_t)sprite->width / 2) - 1);
y = ((int32_t)sprite->position.y + (i - ((int32_t)sprite->height / 2)));
// Si hay colision...
if (ngn->collisions->GetPixel(cmap, x, y) == 0xFF00FF00) { // AABBGGRR
if (ngn->collisions->GetPixel(cmap, x, y) == COLOR_GREEN) {
// Desplaza un pixel a la izquierda el sprite
sprite->position.x --;
// Autoajuste
Expand Down
4 changes: 4 additions & 0 deletions Examples/collisions/source/demo/demo.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@
// Includes de la libreria
#include <ngn.h>

/*** Defines ***/
#define COLOR_MAGENTA 0xFF00FFFF // RGBA
#define COLOR_GREEN 0x00FF00FF // RGBA



/*** Declaracion de la clase ***/
Expand Down
25 changes: 17 additions & 8 deletions Library/linux/include/ngn_defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,8 @@ class NGN_TiledBgData {
} header;

// Contenido del fondo
SDL_Texture* tiles; // Almacena el Tileset
std::vector<uint8_t> tmap; // Almacena el mapa
SDL_Texture* tiles; // Almacena el Tileset
std::vector<uint8_t> tmap; // Almacena el mapa

// Private
private:
Expand Down Expand Up @@ -207,15 +207,24 @@ class NGN_CollisionMapData {

// Cabecera del archivo
struct {
uint8_t version; // Version del programa de conversion
char magic[32]; // Magic String
uint32_t width; // Ancho del mapa
uint32_t height; // Alto del mapa
uint8_t reserve[256]; // Posible uso futuro
uint8_t version; // Version del programa de conversion
char magic[32]; // Magic String
uint32_t width; // Ancho del mapa
uint32_t height; // Alto del mapa
uint32_t tile_size; // Tamaño del tile
uint32_t pal_length; // Tamaño de los datos (nº de elementos) de la paleta
uint32_t tileset_length; // Tamaño de los datos (nº de elementos) del tileset
uint32_t map_length; // Tamaño de los datos (nº de elementos) del mapa
uint8_t reserve[256]; // Posible uso futuro
} header;

std::vector<uint8_t> bitmap; // Buffer para almacenar el mapa de pixeles
std::vector<uint32_t> palette; // Buffer para almacenar la paleta de colores
std::vector<uint8_t> tiles; // Buffer para almacenar los pixeles de los tiles
std::vector<uint32_t> tmap; // Buffer para almacenar el mapa de tiles

uint32_t tile_bytes; // Tamaño de cada tile en bytes
uint32_t tiles_row_width; // Tamaño en pixeles de una fila de tiles


// Private
private:
Expand Down
Binary file modified Library/linux/lib/libngn.a
Binary file not shown.
Binary file modified Library/linux/lib/libngn_d.a
Binary file not shown.
25 changes: 17 additions & 8 deletions Library/windows/include/ngn_defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,8 @@ class NGN_TiledBgData {
} header;

// Contenido del fondo
SDL_Texture* tiles; // Almacena el Tileset
std::vector<uint8_t> tmap; // Almacena el mapa
SDL_Texture* tiles; // Almacena el Tileset
std::vector<uint8_t> tmap; // Almacena el mapa

// Private
private:
Expand Down Expand Up @@ -207,15 +207,24 @@ class NGN_CollisionMapData {

// Cabecera del archivo
struct {
uint8_t version; // Version del programa de conversion
char magic[32]; // Magic String
uint32_t width; // Ancho del mapa
uint32_t height; // Alto del mapa
uint8_t reserve[256]; // Posible uso futuro
uint8_t version; // Version del programa de conversion
char magic[32]; // Magic String
uint32_t width; // Ancho del mapa
uint32_t height; // Alto del mapa
uint32_t tile_size; // Tamaño del tile
uint32_t pal_length; // Tamaño de los datos (nº de elementos) de la paleta
uint32_t tileset_length; // Tamaño de los datos (nº de elementos) del tileset
uint32_t map_length; // Tamaño de los datos (nº de elementos) del mapa
uint8_t reserve[256]; // Posible uso futuro
} header;

std::vector<uint8_t> bitmap; // Buffer para almacenar el mapa de pixeles
std::vector<uint32_t> palette; // Buffer para almacenar la paleta de colores
std::vector<uint8_t> tiles; // Buffer para almacenar los pixeles de los tiles
std::vector<uint32_t> tmap; // Buffer para almacenar el mapa de tiles

uint32_t tile_bytes; // Tamaño de cada tile en bytes
uint32_t tiles_row_width; // Tamaño en pixeles de una fila de tiles


// Private
private:
Expand Down
Binary file modified Library/windows/lib/libngn.a
Binary file not shown.
Binary file modified Library/windows/lib/libngn_d.a
Binary file not shown.
14 changes: 11 additions & 3 deletions Source/ngn_collisions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ NGN_Collisions::~NGN_Collisions() {
/*** Consulta el color de un pixel del mapa de colisiones ***/
uint32_t NGN_Collisions::GetPixel(NGN_CollisionMapData* cmap, int32_t position_x, int32_t position_y) {

// Proteccion de errores
// Proteccion de errores (pixel fuera del mapa)
if (
(cmap == NULL)
||
Expand All @@ -87,8 +87,16 @@ uint32_t NGN_Collisions::GetPixel(NGN_CollisionMapData* cmap, int32_t position_x
(position_y >= (int32_t)cmap->header.height)
) return 0x00000000;

// Devuelve el color del pixel solicitado
return cmap->palette[cmap->bitmap[((position_y * cmap->header.width) + position_x)]];
// Calcula el offset en el buffer del mapa
uint32_t offset = (((position_y / cmap->header.tile_size) * cmap->tiles_row_width) + (position_x / cmap->header.tile_size));
// Obten el tile
uint32_t t = cmap->tmap[offset];
// Calcula el offset en el buffer de tiles
offset = ((t * cmap->tile_bytes) + (((position_y % cmap->header.tile_size) * cmap->header.tile_size) + (position_x % cmap->header.tile_size)));
// Obten el pixel del tile
uint8_t p = cmap->tiles[offset];
// Devuelve el color del pixel segun la paleta
return cmap->palette[p];

}

Expand Down
3 changes: 2 additions & 1 deletion Source/ngn_defines.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,9 @@ NGN_CollisionMapData::NGN_CollisionMapData() {
// Destructor
NGN_CollisionMapData::~NGN_CollisionMapData() {

bitmap.clear();
palette.clear();
tiles.clear();
tmap.clear();

}

Expand Down
25 changes: 17 additions & 8 deletions Source/ngn_defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,8 @@ class NGN_TiledBgData {
} header;

// Contenido del fondo
SDL_Texture* tiles; // Almacena el Tileset
std::vector<uint8_t> tmap; // Almacena el mapa
SDL_Texture* tiles; // Almacena el Tileset
std::vector<uint8_t> tmap; // Almacena el mapa

// Private
private:
Expand Down Expand Up @@ -207,15 +207,24 @@ class NGN_CollisionMapData {

// Cabecera del archivo
struct {
uint8_t version; // Version del programa de conversion
char magic[32]; // Magic String
uint32_t width; // Ancho del mapa
uint32_t height; // Alto del mapa
uint8_t reserve[256]; // Posible uso futuro
uint8_t version; // Version del programa de conversion
char magic[32]; // Magic String
uint32_t width; // Ancho del mapa
uint32_t height; // Alto del mapa
uint32_t tile_size; // Tamaño del tile
uint32_t pal_length; // Tamaño de los datos (nº de elementos) de la paleta
uint32_t tileset_length; // Tamaño de los datos (nº de elementos) del tileset
uint32_t map_length; // Tamaño de los datos (nº de elementos) del mapa
uint8_t reserve[256]; // Posible uso futuro
} header;

std::vector<uint8_t> bitmap; // Buffer para almacenar el mapa de pixeles
std::vector<uint32_t> palette; // Buffer para almacenar la paleta de colores
std::vector<uint8_t> tiles; // Buffer para almacenar los pixeles de los tiles
std::vector<uint32_t> tmap; // Buffer para almacenar el mapa de tiles

uint32_t tile_bytes; // Tamaño de cada tile en bytes
uint32_t tiles_row_width; // Tamaño en pixeles de una fila de tiles


// Private
private:
Expand Down
Loading

0 comments on commit 6513e6a

Please sign in to comment.