parent
501a599336
commit
d7113d42fe
|
@ -17,8 +17,11 @@ typedef enum TileRotation
|
||||||
TILE_180ROT
|
TILE_180ROT
|
||||||
}TileRotation_t;
|
}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 {
|
typedef struct Tile {
|
||||||
unsigned int tile_type;
|
unsigned int tile_type;
|
||||||
|
uint8_t connectivity;
|
||||||
SolidType_t solid;
|
SolidType_t solid;
|
||||||
TileRotation_t rotation;
|
TileRotation_t rotation;
|
||||||
uint8_t def;
|
uint8_t def;
|
||||||
|
|
|
@ -479,6 +479,11 @@ static void render_editor_game_scene(Scene_t* scene)
|
||||||
// Draw water tile
|
// Draw water tile
|
||||||
DrawText(buffer, x, y, 10, BLACK);
|
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;
|
tilemap->tiles[tile_idx].rotation = TILE_NOROTATE;
|
||||||
|
|
||||||
if (new_type == SPIKES)
|
if (new_type == SPIKES)
|
||||||
{
|
{
|
||||||
// Priority: Down, Up, Left, Right
|
// 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].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