Rework free camera toggling behaviour for editor
Changelog: - Reorder render layers - Seperate out player related actions from others - Add indication for free camera modemain
parent
acb1b7858c
commit
c20401c457
|
@ -41,9 +41,9 @@ static bool crate_activation = false;
|
|||
#define SELECTION_REGION_WIDTH (SELECTION_TILE_SIZE * MAX_SPAWN_TYPE)
|
||||
#define SELECTION_REGION_HEIGHT SELECTION_TILE_SIZE
|
||||
|
||||
#define GAME_LAYER 0
|
||||
#define SELECTION_LAYER 1
|
||||
#define CONTROL_LAYER 2
|
||||
#define GAME_LAYER 2
|
||||
#define SELECTION_LAYER 0
|
||||
#define CONTROL_LAYER 1
|
||||
|
||||
static const uint8_t CONNECTIVITY_TILE_MAPPING[16] = {
|
||||
0,3,15,14,
|
||||
|
@ -110,6 +110,11 @@ static void level_scene_render_func(Scene_t* scene)
|
|||
Vector2 draw_pos = {game_rec.x, game_rec.y + game_rec.height + SELECTION_GAP};
|
||||
BeginTextureMode(scene->layers.render_layers[CONTROL_LAYER].layer_tex);
|
||||
ClearBackground(BLANK);
|
||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT)
|
||||
{
|
||||
DrawRectangle(game_rec.x - 3, game_rec.y - 3, game_rec.width + 6, game_rec.height + 6, RED);
|
||||
}
|
||||
|
||||
DrawRectangleLines(
|
||||
selection_rec.x + current_spawn_selection * SELECTION_TILE_SIZE, selection_rec.y,
|
||||
SELECTION_TILE_SIZE, SELECTION_TILE_SIZE, GREEN
|
||||
|
@ -119,12 +124,15 @@ static void level_scene_render_func(Scene_t* scene)
|
|||
draw_pos.x = game_rec.x + (MAX_SPAWN_TYPE + 1) * SELECTION_TILE_SIZE;
|
||||
sprintf(buffer, "Selection: %s", get_spawn_selection_string(current_spawn_selection));
|
||||
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
||||
draw_pos.y += SELECTION_TILE_SIZE + 5;
|
||||
draw_pos.y += 20 + 5;
|
||||
sprintf(buffer, "Crate %s on spawn", crate_activation? "active" : "inactive");
|
||||
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
||||
draw_pos.y += SELECTION_TILE_SIZE + 5;
|
||||
draw_pos.y += 20 + 5;
|
||||
sprintf(buffer, "Time scale: %.2f", scene->time_scale);
|
||||
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
||||
draw_pos.y += 20 + 5;
|
||||
sprintf(buffer, "Camera mode: %s", data->camera.mode == CAMERA_FOLLOW_PLAYER ? "FOLLOW" : "FREE");
|
||||
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
||||
|
||||
// For DEBUG
|
||||
const int gui_x = game_rec.x + game_rec.width + 10;
|
||||
|
@ -222,6 +230,28 @@ static void render_editor_game_scene(Scene_t* scene)
|
|||
);
|
||||
|
||||
BeginMode2D(data->camera.cam);
|
||||
for (int tile_y = min.y; tile_y < max.y; tile_y++)
|
||||
{
|
||||
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].tile_type == LADDER)
|
||||
{
|
||||
if (data->tile_sprites[tilemap.tiles[i].tile_type] != NULL)
|
||||
{
|
||||
draw_sprite(data->tile_sprites[tilemap.tiles[i].tile_type], 0, (Vector2){x,y}, 0.0f, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawRectangle(x, y, TILE_SIZE, TILE_SIZE, ORANGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
char buffer[64] = {0};
|
||||
sc_map_foreach_value(&scene->ent_manager.entities, p_ent)
|
||||
|
@ -402,13 +432,8 @@ static void render_editor_game_scene(Scene_t* scene)
|
|||
int y = tile_y * TILE_SIZE;
|
||||
|
||||
|
||||
|
||||
//if (!tilemap.tiles[i].moveable)
|
||||
//{
|
||||
// // Draw water tile
|
||||
// Color water_colour = ColorAlpha(RED, 0.2);
|
||||
// DrawRectangle(x, y, TILE_SIZE, TILE_SIZE, water_colour);
|
||||
//}
|
||||
if (tilemap.tiles[i].tile_type != LADDER)
|
||||
{
|
||||
|
||||
uint8_t tile_sprite_idx = tilemap.tiles[i].tile_type + tilemap.tiles[i].rotation;
|
||||
if (data->tile_sprites[tile_sprite_idx] != NULL)
|
||||
|
@ -428,10 +453,6 @@ static void render_editor_game_scene(Scene_t* scene)
|
|||
{
|
||||
DrawRectangle(x, y, TILE_SIZE, TILE_SIZE, MAROON);
|
||||
}
|
||||
else if (tilemap.tiles[i].tile_type == LADDER)
|
||||
{
|
||||
DrawRectangle(x, y, TILE_SIZE, TILE_SIZE, ORANGE);
|
||||
}
|
||||
else if (tilemap.tiles[i].tile_type == SPIKES)
|
||||
{
|
||||
DrawRectangle(
|
||||
|
@ -439,6 +460,8 @@ static void render_editor_game_scene(Scene_t* scene)
|
|||
tilemap.tiles[i].size.x, tilemap.tiles[i].size.y, RED
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (tilemap.tiles[i].wet)
|
||||
{
|
||||
#define SURFACE_THICKNESS 4
|
||||
|
@ -842,23 +865,53 @@ static void level_do_action(Scene_t* scene, ActionType_t action, bool pressed)
|
|||
{
|
||||
case ACTION_UP:
|
||||
p_playerstate->player_dir.y = (pressed)? -1 : 0;
|
||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT) data->camera.cam.target.y -= 20;
|
||||
break;
|
||||
case ACTION_DOWN:
|
||||
p_playerstate->player_dir.y = (pressed)? 1 : 0;
|
||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT) data->camera.cam.target.y += 20;
|
||||
break;
|
||||
case ACTION_LEFT:
|
||||
p_playerstate->player_dir.x = (pressed)? -1 : 0;
|
||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT) data->camera.cam.target.x -= 20;
|
||||
break;
|
||||
case ACTION_RIGHT:
|
||||
p_playerstate->player_dir.x = (pressed)? 1 : 0;
|
||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT) data->camera.cam.target.x += 20;
|
||||
break;
|
||||
case ACTION_JUMP:
|
||||
p_playerstate->jump_pressed = pressed;
|
||||
break;
|
||||
case ACTION_LOOKAHEAD:
|
||||
if (!pressed)
|
||||
{
|
||||
p_playerstate->locked = !p_playerstate->locked;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT)
|
||||
{
|
||||
switch(action)
|
||||
{
|
||||
case ACTION_UP:
|
||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT) data->camera.cam.target.y -= 20;
|
||||
break;
|
||||
case ACTION_DOWN:
|
||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT) data->camera.cam.target.y += 20;
|
||||
break;
|
||||
case ACTION_LEFT:
|
||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT) data->camera.cam.target.x -= 20;
|
||||
break;
|
||||
case ACTION_RIGHT:
|
||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT) data->camera.cam.target.x += 20;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch(action)
|
||||
{
|
||||
case ACTION_NEXT_SPAWN:
|
||||
if (!pressed)
|
||||
{
|
||||
|
@ -1037,13 +1090,14 @@ static void level_do_action(Scene_t* scene, ActionType_t action, bool pressed)
|
|||
}
|
||||
break;
|
||||
case ACTION_LOOKAHEAD:
|
||||
p_playerstate->locked = pressed;
|
||||
data->camera.mode = pressed ? CAMERA_RANGED_MOVEMENT : CAMERA_FOLLOW_PLAYER;
|
||||
if (!pressed)
|
||||
{
|
||||
data->camera.mode = (data->camera.mode == CAMERA_FOLLOW_PLAYER) ? CAMERA_RANGED_MOVEMENT : CAMERA_FOLLOW_PLAYER;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void init_sandbox_scene(LevelScene_t* scene)
|
||||
|
@ -1078,10 +1132,6 @@ void init_sandbox_scene(LevelScene_t* scene)
|
|||
}
|
||||
|
||||
scene->scene.bg_colour = LIGHTGRAY;
|
||||
add_scene_layer(
|
||||
&scene->scene, scene->data.game_rec.width, scene->data.game_rec.height,
|
||||
scene->data.game_rec
|
||||
);
|
||||
add_scene_layer(
|
||||
&scene->scene, SELECTION_REGION_WIDTH, SELECTION_REGION_HEIGHT,
|
||||
(Rectangle){
|
||||
|
@ -1098,6 +1148,10 @@ void init_sandbox_scene(LevelScene_t* scene)
|
|||
scene->scene.engine->intended_window_size.y
|
||||
}
|
||||
);
|
||||
add_scene_layer(
|
||||
&scene->scene, scene->data.game_rec.width, scene->data.game_rec.height,
|
||||
scene->data.game_rec
|
||||
);
|
||||
|
||||
BeginTextureMode(scene->scene.layers.render_layers[SELECTION_LAYER].layer_tex);
|
||||
ClearBackground(LIGHTGRAY);
|
||||
|
|
Loading…
Reference in New Issue