parent
501a599336
commit
d7113d42fe
|
@ -17,8 +17,11 @@ typedef enum TileRotation
|
|||
TILE_180ROT
|
||||
}TileRotation_t;
|
||||
|
||||
// Some of the fields are game-dependent, may have to think about doing OOP
|
||||
// to separate out standard fields vs context-dependent fields
|
||||
typedef struct Tile {
|
||||
unsigned int tile_type;
|
||||
uint8_t connectivity;
|
||||
SolidType_t solid;
|
||||
TileRotation_t rotation;
|
||||
uint8_t def;
|
||||
|
|
|
@ -479,6 +479,11 @@ static void render_editor_game_scene(Scene_t* scene)
|
|||
// Draw water tile
|
||||
DrawText(buffer, x, y, 10, BLACK);
|
||||
}
|
||||
if (tilemap.tiles[i].solid == SOLID)
|
||||
{
|
||||
sprintf(buffer, "%u", tilemap.tiles[i].connectivity);
|
||||
DrawText(buffer, x + tilemap.tile_size / 2, y + tilemap.tile_size / 2, 12, WHITE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -223,6 +223,7 @@ void change_a_tile(TileGrid_t* tilemap, unsigned int tile_idx, TileType_t new_ty
|
|||
}
|
||||
|
||||
tilemap->tiles[tile_idx].rotation = TILE_NOROTATE;
|
||||
|
||||
if (new_type == SPIKES)
|
||||
{
|
||||
// Priority: Down, Up, Left, Right
|
||||
|
@ -272,4 +273,65 @@ void change_a_tile(TileGrid_t* tilemap, unsigned int tile_idx, TileType_t new_ty
|
|||
);
|
||||
tilemap->tiles[tile_idx].def = (tilemap->tiles[tile_idx].tile_type == SOLID_TILE) ? 5: 2;
|
||||
|
||||
tilemap->tiles[tile_idx].connectivity = 0;
|
||||
|
||||
const uint8_t LEFT_BIT = 0;
|
||||
const uint8_t UP_BIT = 1;
|
||||
const uint8_t RIGHT_BIT = 2;
|
||||
const uint8_t DOWN_BIT = 3;
|
||||
{
|
||||
// Priority: Left, Up, Right, Down
|
||||
if (tile_idx % tilemap->width != 0)
|
||||
{
|
||||
tilemap->tiles[tile_idx].connectivity |= (tilemap->tiles[tile_idx - 1].tile_type == SOLID_TILE) ? (1 << LEFT_BIT) : 0;
|
||||
if (new_type == SOLID_TILE)
|
||||
{
|
||||
tilemap->tiles[tile_idx - 1].connectivity |= (1 << RIGHT_BIT);
|
||||
}
|
||||
else
|
||||
{
|
||||
tilemap->tiles[tile_idx - 1].connectivity &= ~(1 << RIGHT_BIT);
|
||||
}
|
||||
}
|
||||
|
||||
if (tile_idx - tilemap->width >= 0)
|
||||
{
|
||||
tilemap->tiles[tile_idx].connectivity |= (tilemap->tiles[tile_idx - tilemap->width].tile_type == SOLID_TILE) ? (1 << UP_BIT) : 0;
|
||||
if (new_type == SOLID_TILE)
|
||||
{
|
||||
tilemap->tiles[tile_idx - tilemap->width].connectivity |= (1 << DOWN_BIT);
|
||||
}
|
||||
else
|
||||
{
|
||||
tilemap->tiles[tile_idx - tilemap->width].connectivity &= ~(1 << DOWN_BIT);
|
||||
}
|
||||
}
|
||||
|
||||
if (tile_idx + tilemap->width < tilemap->n_tiles)
|
||||
{
|
||||
tilemap->tiles[tile_idx].connectivity |= (tilemap->tiles[tile_idx + tilemap->width].tile_type == SOLID_TILE) ? (1 << DOWN_BIT) : 0;
|
||||
if (new_type == SOLID_TILE)
|
||||
{
|
||||
tilemap->tiles[tile_idx + tilemap->width].connectivity |= (1 << UP_BIT);
|
||||
}
|
||||
else
|
||||
{
|
||||
tilemap->tiles[tile_idx + tilemap->width].connectivity &= ~(1 << UP_BIT);
|
||||
}
|
||||
}
|
||||
|
||||
if ((tile_idx + 1) % tilemap->width != 0)
|
||||
{
|
||||
tilemap->tiles[tile_idx].connectivity |= (tilemap->tiles[tile_idx + 1].tile_type == SOLID_TILE) ? (1 << RIGHT_BIT) : 0;
|
||||
if (new_type == SOLID_TILE)
|
||||
{
|
||||
tilemap->tiles[tile_idx + 1].connectivity |= (1 << LEFT_BIT);
|
||||
}
|
||||
else
|
||||
{
|
||||
tilemap->tiles[tile_idx + 1].connectivity &= ~(1 << LEFT_BIT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue