Add spikes sprite support
Add tile rotation. This is kind of a temp solution, since any sprite could use rotation. So, may need to extend this for general spritescene_man
parent
bda335fd6a
commit
d3029316b7
|
@ -34,6 +34,10 @@ int main(void)
|
|||
init_sandbox_scene(&scene);
|
||||
scene.data.tile_sprites[ONEWAY_TILE] = get_sprite(&engine.assets, "tl_owp");
|
||||
scene.data.tile_sprites[LADDER] = get_sprite(&engine.assets, "tl_ldr");
|
||||
scene.data.tile_sprites[SPIKES] = get_sprite(&engine.assets, "d_spikes");
|
||||
scene.data.tile_sprites[SPIKES + TILE_90CWROT] = get_sprite(&engine.assets, "l_spikes");
|
||||
scene.data.tile_sprites[SPIKES + TILE_90CCWROT] = get_sprite(&engine.assets, "r_spikes");
|
||||
scene.data.tile_sprites[SPIKES + TILE_180ROT] = get_sprite(&engine.assets, "u_spikes");
|
||||
scenes[0] = &scene.scene;
|
||||
change_scene(&engine, 0);
|
||||
|
||||
|
|
|
@ -75,9 +75,10 @@ static void level_scene_render_func(Scene_t* scene)
|
|||
DrawRectangle(x, y, TILE_SIZE, TILE_SIZE, water_colour);
|
||||
}
|
||||
|
||||
if (data->tile_sprites[tilemap.tiles[i].tile_type] != NULL)
|
||||
uint8_t tile_sprite_idx = tilemap.tiles[i].tile_type + tilemap.tiles[i].rotation;
|
||||
if (data->tile_sprites[tile_sprite_idx] != NULL)
|
||||
{
|
||||
draw_sprite(data->tile_sprites[tilemap.tiles[i].tile_type], (Vector2){x,y}, false);
|
||||
draw_sprite(data->tile_sprites[tile_sprite_idx], (Vector2){x,y}, false);
|
||||
}
|
||||
else if (tilemap.tiles[i].tile_type == SOLID_TILE)
|
||||
{
|
||||
|
|
|
@ -10,9 +10,18 @@ typedef enum SolidType
|
|||
ONE_WAY,
|
||||
}SolidType_t;
|
||||
|
||||
typedef enum TileRotation
|
||||
{
|
||||
TILE_NOROTATE = 0,
|
||||
TILE_90CWROT,
|
||||
TILE_90CCWROT,
|
||||
TILE_180ROT
|
||||
}TileRotation_t;
|
||||
|
||||
typedef struct Tile {
|
||||
unsigned int tile_type;
|
||||
SolidType_t solid;
|
||||
TileRotation_t rotation;
|
||||
uint8_t def;
|
||||
uint8_t water_level;
|
||||
uint8_t max_water_level;
|
||||
|
|
|
@ -19,12 +19,14 @@ typedef enum TileType {
|
|||
SPIKES,
|
||||
} TileType_t;
|
||||
|
||||
#define MAX_TILE_SPRITES 32
|
||||
|
||||
typedef struct LevelSceneData {
|
||||
TileGrid_t tilemap;
|
||||
RenderTexture2D game_viewport;
|
||||
Rectangle game_rec;
|
||||
Camera2D cam;
|
||||
Sprite_t* tile_sprites[MAX_TILE_TYPES];
|
||||
Sprite_t* tile_sprites[MAX_TILE_SPRITES];
|
||||
LevelPack_t* level_pack;
|
||||
unsigned int current_level;
|
||||
}LevelSceneData_t;
|
||||
|
|
|
@ -32,6 +32,7 @@ void init_level_scene_data(LevelSceneData_t* data, uint32_t max_tiles, Tile_t* t
|
|||
{
|
||||
data->tilemap.tiles[i].solid = NOT_SOLID;
|
||||
data->tilemap.tiles[i].tile_type = EMPTY_TILE;
|
||||
data->tilemap.tiles[i].rotation = TILE_NOROTATE;
|
||||
data->tilemap.tiles[i].moveable = true;
|
||||
data->tilemap.tiles[i].max_water_level = 4;
|
||||
sc_map_init_64v(&data->tilemap.tiles[i].entities_set, 16, 0);
|
||||
|
@ -171,6 +172,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
|
||||
|
@ -183,16 +185,19 @@ void change_a_tile(TileGrid_t* tilemap, unsigned int tile_idx, TileType_t new_ty
|
|||
{
|
||||
tilemap->tiles[tile_idx].offset = (Vector2){0,0};
|
||||
tilemap->tiles[tile_idx].size = (Vector2){32,16};
|
||||
tilemap->tiles[tile_idx].rotation = TILE_180ROT;
|
||||
}
|
||||
else if (tile_idx % tilemap->width != 0 && tilemap->tiles[tile_idx - 1].tile_type == SOLID_TILE)
|
||||
{
|
||||
tilemap->tiles[tile_idx].offset = (Vector2){0,0};
|
||||
tilemap->tiles[tile_idx].size = (Vector2){16,32};
|
||||
tilemap->tiles[tile_idx].rotation = TILE_90CWROT;
|
||||
}
|
||||
else if ((tile_idx + 1) % tilemap->width != 0 && tilemap->tiles[tile_idx + 1].tile_type == SOLID_TILE)
|
||||
{
|
||||
tilemap->tiles[tile_idx].offset = (Vector2){16,0};
|
||||
tilemap->tiles[tile_idx].size = (Vector2){16,32};
|
||||
tilemap->tiles[tile_idx].rotation = TILE_90CCWROT;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue