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_WIDTH (SELECTION_TILE_SIZE * MAX_SPAWN_TYPE)
|
||||||
#define SELECTION_REGION_HEIGHT SELECTION_TILE_SIZE
|
#define SELECTION_REGION_HEIGHT SELECTION_TILE_SIZE
|
||||||
|
|
||||||
#define GAME_LAYER 0
|
#define GAME_LAYER 2
|
||||||
#define SELECTION_LAYER 1
|
#define SELECTION_LAYER 0
|
||||||
#define CONTROL_LAYER 2
|
#define CONTROL_LAYER 1
|
||||||
|
|
||||||
static const uint8_t CONNECTIVITY_TILE_MAPPING[16] = {
|
static const uint8_t CONNECTIVITY_TILE_MAPPING[16] = {
|
||||||
0,3,15,14,
|
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};
|
Vector2 draw_pos = {game_rec.x, game_rec.y + game_rec.height + SELECTION_GAP};
|
||||||
BeginTextureMode(scene->layers.render_layers[CONTROL_LAYER].layer_tex);
|
BeginTextureMode(scene->layers.render_layers[CONTROL_LAYER].layer_tex);
|
||||||
ClearBackground(BLANK);
|
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(
|
DrawRectangleLines(
|
||||||
selection_rec.x + current_spawn_selection * SELECTION_TILE_SIZE, selection_rec.y,
|
selection_rec.x + current_spawn_selection * SELECTION_TILE_SIZE, selection_rec.y,
|
||||||
SELECTION_TILE_SIZE, SELECTION_TILE_SIZE, GREEN
|
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;
|
draw_pos.x = game_rec.x + (MAX_SPAWN_TYPE + 1) * SELECTION_TILE_SIZE;
|
||||||
sprintf(buffer, "Selection: %s", get_spawn_selection_string(current_spawn_selection));
|
sprintf(buffer, "Selection: %s", get_spawn_selection_string(current_spawn_selection));
|
||||||
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
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");
|
sprintf(buffer, "Crate %s on spawn", crate_activation? "active" : "inactive");
|
||||||
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
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);
|
sprintf(buffer, "Time scale: %.2f", scene->time_scale);
|
||||||
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
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
|
// For DEBUG
|
||||||
const int gui_x = game_rec.x + game_rec.width + 10;
|
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);
|
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};
|
char buffer[64] = {0};
|
||||||
sc_map_foreach_value(&scene->ent_manager.entities, p_ent)
|
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;
|
int y = tile_y * TILE_SIZE;
|
||||||
|
|
||||||
|
|
||||||
|
if (tilemap.tiles[i].tile_type != LADDER)
|
||||||
//if (!tilemap.tiles[i].moveable)
|
{
|
||||||
//{
|
|
||||||
// // Draw water tile
|
|
||||||
// Color water_colour = ColorAlpha(RED, 0.2);
|
|
||||||
// DrawRectangle(x, y, TILE_SIZE, TILE_SIZE, water_colour);
|
|
||||||
//}
|
|
||||||
|
|
||||||
uint8_t tile_sprite_idx = tilemap.tiles[i].tile_type + tilemap.tiles[i].rotation;
|
uint8_t tile_sprite_idx = tilemap.tiles[i].tile_type + tilemap.tiles[i].rotation;
|
||||||
if (data->tile_sprites[tile_sprite_idx] != NULL)
|
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);
|
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)
|
else if (tilemap.tiles[i].tile_type == SPIKES)
|
||||||
{
|
{
|
||||||
DrawRectangle(
|
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
|
tilemap.tiles[i].size.x, tilemap.tiles[i].size.y, RED
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (tilemap.tiles[i].wet)
|
if (tilemap.tiles[i].wet)
|
||||||
{
|
{
|
||||||
#define SURFACE_THICKNESS 4
|
#define SURFACE_THICKNESS 4
|
||||||
|
@ -842,23 +865,53 @@ static void level_do_action(Scene_t* scene, ActionType_t action, bool pressed)
|
||||||
{
|
{
|
||||||
case ACTION_UP:
|
case ACTION_UP:
|
||||||
p_playerstate->player_dir.y = (pressed)? -1 : 0;
|
p_playerstate->player_dir.y = (pressed)? -1 : 0;
|
||||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT) data->camera.cam.target.y -= 20;
|
|
||||||
break;
|
break;
|
||||||
case ACTION_DOWN:
|
case ACTION_DOWN:
|
||||||
p_playerstate->player_dir.y = (pressed)? 1 : 0;
|
p_playerstate->player_dir.y = (pressed)? 1 : 0;
|
||||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT) data->camera.cam.target.y += 20;
|
|
||||||
break;
|
break;
|
||||||
case ACTION_LEFT:
|
case ACTION_LEFT:
|
||||||
p_playerstate->player_dir.x = (pressed)? -1 : 0;
|
p_playerstate->player_dir.x = (pressed)? -1 : 0;
|
||||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT) data->camera.cam.target.x -= 20;
|
|
||||||
break;
|
break;
|
||||||
case ACTION_RIGHT:
|
case ACTION_RIGHT:
|
||||||
p_playerstate->player_dir.x = (pressed)? 1 : 0;
|
p_playerstate->player_dir.x = (pressed)? 1 : 0;
|
||||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT) data->camera.cam.target.x += 20;
|
|
||||||
break;
|
break;
|
||||||
case ACTION_JUMP:
|
case ACTION_JUMP:
|
||||||
p_playerstate->jump_pressed = pressed;
|
p_playerstate->jump_pressed = pressed;
|
||||||
break;
|
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:
|
case ACTION_NEXT_SPAWN:
|
||||||
if (!pressed)
|
if (!pressed)
|
||||||
{
|
{
|
||||||
|
@ -1037,14 +1090,15 @@ static void level_do_action(Scene_t* scene, ActionType_t action, bool pressed)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ACTION_LOOKAHEAD:
|
case ACTION_LOOKAHEAD:
|
||||||
p_playerstate->locked = pressed;
|
if (!pressed)
|
||||||
data->camera.mode = pressed ? CAMERA_RANGED_MOVEMENT : CAMERA_FOLLOW_PLAYER;
|
{
|
||||||
|
data->camera.mode = (data->camera.mode == CAMERA_FOLLOW_PLAYER) ? CAMERA_RANGED_MOVEMENT : CAMERA_FOLLOW_PLAYER;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void init_sandbox_scene(LevelScene_t* scene)
|
void init_sandbox_scene(LevelScene_t* scene)
|
||||||
{
|
{
|
||||||
|
@ -1078,10 +1132,6 @@ void init_sandbox_scene(LevelScene_t* scene)
|
||||||
}
|
}
|
||||||
|
|
||||||
scene->scene.bg_colour = LIGHTGRAY;
|
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(
|
add_scene_layer(
|
||||||
&scene->scene, SELECTION_REGION_WIDTH, SELECTION_REGION_HEIGHT,
|
&scene->scene, SELECTION_REGION_WIDTH, SELECTION_REGION_HEIGHT,
|
||||||
(Rectangle){
|
(Rectangle){
|
||||||
|
@ -1098,6 +1148,10 @@ void init_sandbox_scene(LevelScene_t* scene)
|
||||||
scene->scene.engine->intended_window_size.y
|
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);
|
BeginTextureMode(scene->scene.layers.render_layers[SELECTION_LAYER].layer_tex);
|
||||||
ClearBackground(LIGHTGRAY);
|
ClearBackground(LIGHTGRAY);
|
||||||
|
|
Loading…
Reference in New Issue