Compare commits
3 Commits
fae37eeecd
...
567b7ab173
Author | SHA1 | Date |
---|---|---|
|
567b7ab173 | |
|
e26f972600 | |
|
cf8e2ca1be |
|
@ -109,12 +109,14 @@ static void level_scene_render_func(Scene_t* scene)
|
|||
int y = tile_y * TILE_SIZE;
|
||||
|
||||
|
||||
#if !defined(PLATFORM_WEB)
|
||||
if (!tilemap.tiles[i].moveable)
|
||||
{
|
||||
// Draw water tile
|
||||
Color water_colour = ColorAlpha(RED, 0.2);
|
||||
DrawRectangle(x, y, TILE_SIZE, TILE_SIZE, water_colour);
|
||||
}
|
||||
#endif
|
||||
|
||||
uint8_t tile_sprite_idx = tilemap.tiles[i].tile_type + tilemap.tiles[i].rotation;
|
||||
if (data->tile_sprites[tile_sprite_idx] != NULL)
|
||||
|
@ -194,12 +196,13 @@ static void level_scene_render_func(Scene_t* scene)
|
|||
CTransform_t* p_ct = get_component(p_ent, CTRANSFORM_COMP_T);
|
||||
CBBox_t* p_bbox = get_component(p_ent, CBBOX_COMP_T);
|
||||
|
||||
if (
|
||||
p_ct->position.x < min.x * tilemap.tile_size
|
||||
|| p_ct->position.x + p_bbox->size.x > max.x * tilemap.tile_size
|
||||
|| p_ct->position.y < min.y * tilemap.tile_size
|
||||
|| p_ct->position.y + p_bbox->size.y > max.y * tilemap.tile_size
|
||||
) continue;
|
||||
// TODO: Figure out better way to cull this
|
||||
//if (
|
||||
// p_ct->position.x + p_bbox < min.x * tilemap.tile_size
|
||||
// || p_ct->position.x + p_bbox->size.x > max.x * tilemap.tile_size
|
||||
// || p_ct->position.y < min.y * tilemap.tile_size
|
||||
// || p_ct->position.y + p_bbox->size.y > max.y * tilemap.tile_size
|
||||
//) continue;
|
||||
|
||||
Color colour;
|
||||
switch(p_ent->m_tag)
|
||||
|
@ -327,24 +330,27 @@ static void level_scene_render_func(Scene_t* scene)
|
|||
unsigned int y = ((p_runner->current_tile) / tilemap.width) * tilemap.tile_size;
|
||||
DrawCircle(x+16, y+16, 8, ColorAlpha(BLUE, 0.6));
|
||||
}
|
||||
#if !defined(PLATFORM_WEB)
|
||||
for (size_t i = 0; i < tilemap.n_tiles; ++i)
|
||||
for (int tile_y = min.y; tile_y <= max.y; tile_y++)
|
||||
{
|
||||
int x = (i % tilemap.width) * TILE_SIZE;
|
||||
int y = (i / tilemap.width) * TILE_SIZE;
|
||||
sprintf(buffer, "%u", sc_map_size_64v(&tilemap.tiles[i].entities_set));
|
||||
for (int tile_x = min.x; tile_x <= max.x; tile_x++)
|
||||
{
|
||||
int i = tile_x + tile_y * tilemap.width;
|
||||
int x = tile_x * TILE_SIZE;
|
||||
int y = tile_y * TILE_SIZE;
|
||||
|
||||
if (tilemap.tiles[i].solid > 0)
|
||||
{
|
||||
DrawText(buffer, x, y, 10, WHITE);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Draw water tile
|
||||
DrawText(buffer, x, y, 10, BLACK);
|
||||
sprintf(buffer, "%u", sc_map_size_64v(&tilemap.tiles[i].entities_set));
|
||||
|
||||
if (tilemap.tiles[i].solid > 0)
|
||||
{
|
||||
DrawText(buffer, x, y, 10, WHITE);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Draw water tile
|
||||
DrawText(buffer, x, y, 10, BLACK);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Draw tile grid
|
||||
for (size_t i = min.x; i < max.x; ++i)
|
||||
|
@ -425,6 +431,7 @@ static void level_scene_render_func(Scene_t* scene)
|
|||
gui_y += 30;
|
||||
sprintf(buffer, "Ladder: %u", p_pstate->ladder_state);
|
||||
DrawText(buffer, gui_x, gui_y, 12, BLACK);
|
||||
gui_y += 30;
|
||||
}
|
||||
#endif
|
||||
//sprintf(buffer, "Spawn Entity: %s", get_spawn_selection_string(current_spawn_selection));
|
||||
|
@ -719,6 +726,58 @@ static void level_do_action(Scene_t* scene, ActionType_t action, bool pressed)
|
|||
break;
|
||||
case ACTION_METAL_TOGGLE:
|
||||
if (!pressed) metal_toggle = !metal_toggle;
|
||||
const Color crate_colour = metal_toggle ? GRAY : BROWN;
|
||||
Vector2 draw_pos = {SPAWN_CRATE * SELECTION_TILE_SIZE , 0};
|
||||
BeginTextureMode(selection_section);
|
||||
for (uint8_t i = SPAWN_CRATE; i <= SPAWN_CRATE_BOMB; ++i)
|
||||
{
|
||||
DrawRectangle(draw_pos.x, draw_pos.y, SELECTION_TILE_SIZE, SELECTION_TILE_SIZE, crate_colour);
|
||||
Vector2 half_size = {SELECTION_TILE_HALFSIZE, SELECTION_TILE_HALFSIZE};
|
||||
switch (i)
|
||||
{
|
||||
case SPAWN_CRATE_ARROW_L:
|
||||
DrawLine(
|
||||
draw_pos.x,
|
||||
draw_pos.y + half_size.y,
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y,
|
||||
BLACK
|
||||
);
|
||||
break;
|
||||
case SPAWN_CRATE_ARROW_R:
|
||||
DrawLine(
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y,
|
||||
draw_pos.x + half_size.x * 2,
|
||||
draw_pos.y + half_size.y,
|
||||
BLACK
|
||||
);
|
||||
break;
|
||||
case SPAWN_CRATE_ARROW_U:
|
||||
DrawLine(
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y,
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y,
|
||||
BLACK
|
||||
);
|
||||
break;
|
||||
case SPAWN_CRATE_ARROW_D:
|
||||
DrawLine(
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y,
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y * 2,
|
||||
BLACK
|
||||
);
|
||||
break;
|
||||
case SPAWN_CRATE_BOMB:
|
||||
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, BLACK);
|
||||
break;
|
||||
}
|
||||
draw_pos.x += SELECTION_TILE_SIZE;
|
||||
}
|
||||
EndTextureMode();
|
||||
break;
|
||||
case ACTION_CRATE_ACTIVATION:
|
||||
if (!pressed) crate_activation = !crate_activation;
|
||||
|
@ -766,69 +825,67 @@ void init_sandbox_scene(LevelScene_t* scene)
|
|||
};
|
||||
for (uint8_t i = 0; i < MAX_SPAWN_TYPE; ++i)
|
||||
{
|
||||
DrawRectangle(draw_pos.x, draw_pos.y, SELECTION_TILE_SIZE, SELECTION_TILE_SIZE, draw_colour[i]);
|
||||
Vector2 half_size = {SELECTION_TILE_HALFSIZE, SELECTION_TILE_HALFSIZE};
|
||||
switch (i)
|
||||
{
|
||||
DrawRectangle(draw_pos.x, draw_pos.y, SELECTION_TILE_SIZE, SELECTION_TILE_SIZE, draw_colour[i]);
|
||||
Vector2 half_size = {SELECTION_TILE_HALFSIZE, SELECTION_TILE_HALFSIZE};
|
||||
switch (i)
|
||||
{
|
||||
case TOGGLE_SPIKE:
|
||||
DrawRectangle(draw_pos.x, draw_pos.y + SELECTION_TILE_HALFSIZE, SELECTION_TILE_SIZE, SELECTION_TILE_HALFSIZE, RED);
|
||||
break;
|
||||
case SPAWN_BOULDER:
|
||||
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, GRAY);
|
||||
break;
|
||||
case SPAWN_CRATE_ARROW_L:
|
||||
DrawLine(
|
||||
draw_pos.x,
|
||||
draw_pos.y + half_size.y,
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y,
|
||||
BLACK
|
||||
);
|
||||
break;
|
||||
case SPAWN_CRATE_ARROW_R:
|
||||
DrawLine(
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y,
|
||||
draw_pos.x + half_size.x * 2,
|
||||
draw_pos.y + half_size.y,
|
||||
BLACK
|
||||
);
|
||||
break;
|
||||
case SPAWN_CRATE_ARROW_U:
|
||||
DrawLine(
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y,
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y,
|
||||
BLACK
|
||||
);
|
||||
break;
|
||||
case SPAWN_CRATE_ARROW_D:
|
||||
DrawLine(
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y,
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y * 2,
|
||||
BLACK
|
||||
);
|
||||
break;
|
||||
case SPAWN_CRATE_BOMB:
|
||||
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, BLACK);
|
||||
break;
|
||||
case SPAWN_WATER_RUNNER:
|
||||
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, ColorAlpha(BLUE, 0.2));
|
||||
break;
|
||||
case TOGGLE_AIR_POCKET:
|
||||
DrawRectangleLinesEx((Rectangle){draw_pos.x, draw_pos.y, SELECTION_TILE_SIZE, SELECTION_TILE_SIZE}, 2.0, ColorAlpha(BLUE, 0.5));
|
||||
break;
|
||||
}
|
||||
case TOGGLE_SPIKE:
|
||||
DrawRectangle(draw_pos.x, draw_pos.y + SELECTION_TILE_HALFSIZE, SELECTION_TILE_SIZE, SELECTION_TILE_HALFSIZE, RED);
|
||||
break;
|
||||
case SPAWN_BOULDER:
|
||||
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, GRAY);
|
||||
break;
|
||||
case SPAWN_CRATE_ARROW_L:
|
||||
DrawLine(
|
||||
draw_pos.x,
|
||||
draw_pos.y + half_size.y,
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y,
|
||||
BLACK
|
||||
);
|
||||
break;
|
||||
case SPAWN_CRATE_ARROW_R:
|
||||
DrawLine(
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y,
|
||||
draw_pos.x + half_size.x * 2,
|
||||
draw_pos.y + half_size.y,
|
||||
BLACK
|
||||
);
|
||||
break;
|
||||
case SPAWN_CRATE_ARROW_U:
|
||||
DrawLine(
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y,
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y,
|
||||
BLACK
|
||||
);
|
||||
break;
|
||||
case SPAWN_CRATE_ARROW_D:
|
||||
DrawLine(
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y,
|
||||
draw_pos.x + half_size.x,
|
||||
draw_pos.y + half_size.y * 2,
|
||||
BLACK
|
||||
);
|
||||
break;
|
||||
case SPAWN_CRATE_BOMB:
|
||||
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, BLACK);
|
||||
break;
|
||||
case SPAWN_WATER_RUNNER:
|
||||
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, ColorAlpha(BLUE, 0.2));
|
||||
break;
|
||||
case TOGGLE_AIR_POCKET:
|
||||
DrawRectangleLinesEx((Rectangle){draw_pos.x, draw_pos.y, SELECTION_TILE_SIZE, SELECTION_TILE_SIZE}, 2.0, ColorAlpha(BLUE, 0.5));
|
||||
break;
|
||||
}
|
||||
draw_pos.x += SELECTION_TILE_SIZE;
|
||||
}
|
||||
|
||||
draw_pos.y += SELECTION_TILE_SIZE + 2;
|
||||
DrawText("R to reset the map, O/P to cycle the selection,\nT to toggle crate spawn behaviour", 0, draw_pos.y, 16, BLACK);
|
||||
DrawText("R to reset the map, O/P to cycle the selection,\nM to toggle metal crates. T to toggle crate spawn behaviour", 0, draw_pos.y, 14, BLACK);
|
||||
|
||||
|
||||
EndTextureMode();
|
||||
|
|
Loading…
Reference in New Issue