Add metal crate toggling

Changelog:
- Remove spawn option for metal crate
- Use M to toggle metal crate, applicable for arrow crates
scene_man
En Yi 2023-06-28 22:58:51 +08:00
parent 7dcff39864
commit fe2bcdf8cd
2 changed files with 16 additions and 14 deletions

View File

@ -17,7 +17,6 @@ enum EntitySpawnSelection {
TOGGLE_SPIKE, TOGGLE_SPIKE,
TOGGLE_WATER, TOGGLE_WATER,
SPAWN_CRATE, SPAWN_CRATE,
SPAWN_METAL_CRATE,
SPAWN_CRATE_ARROW_L, SPAWN_CRATE_ARROW_L,
SPAWN_CRATE_ARROW_R, SPAWN_CRATE_ARROW_R,
SPAWN_CRATE_ARROW_U, SPAWN_CRATE_ARROW_U,
@ -25,8 +24,9 @@ enum EntitySpawnSelection {
SPAWN_BOULDER, SPAWN_BOULDER,
}; };
#define MAX_SPAWN_TYPE 12 #define MAX_SPAWN_TYPE 11
static unsigned int current_spawn_selection = 0; static unsigned int current_spawn_selection = 0;
static bool metal_toggle = false;
#define SELECTION_TILE_SIZE 32 #define SELECTION_TILE_SIZE 32
#define SELECTION_TILE_HALFSIZE (SELECTION_TILE_SIZE >> 1) #define SELECTION_TILE_HALFSIZE (SELECTION_TILE_SIZE >> 1)
@ -57,8 +57,7 @@ static char* get_spawn_selection_string(enum EntitySpawnSelection sel)
case TOGGLE_LADDER: return "ladder"; case TOGGLE_LADDER: return "ladder";
case TOGGLE_SPIKE: return "spike"; case TOGGLE_SPIKE: return "spike";
case TOGGLE_WATER: return "water"; case TOGGLE_WATER: return "water";
case SPAWN_CRATE: return "wooden crate"; case SPAWN_CRATE: return "crate";
case SPAWN_METAL_CRATE: return "metal crate";
case SPAWN_BOULDER: return "boulder"; case SPAWN_BOULDER: return "boulder";
default: return "unknown"; default: return "unknown";
} }
@ -285,10 +284,11 @@ static void level_scene_render_func(Scene_t* scene)
); );
Vector2 draw_pos = {data->game_rec.x, data->game_rec.y + data->game_rec.height + SELECTION_GAP}; Vector2 draw_pos = {data->game_rec.x, data->game_rec.y + data->game_rec.height + SELECTION_GAP};
const Color crate_colour = metal_toggle ? GRAY : BROWN;
const Color draw_colour[MAX_SPAWN_TYPE] = { const Color draw_colour[MAX_SPAWN_TYPE] = {
BLACK, MAROON, ORANGE, ColorAlpha(RAYWHITE, 0.5), ColorAlpha(BLUE, 0.5), BLACK, MAROON, ORANGE, ColorAlpha(RAYWHITE, 0.5), ColorAlpha(BLUE, 0.5),
BROWN, GRAY, BROWN, BROWN, BROWN, crate_colour, crate_colour, crate_colour, crate_colour, crate_colour,
BROWN, ColorAlpha(RAYWHITE, 0.5) ColorAlpha(RAYWHITE, 0.5)
}; };
for (uint8_t i = 0; i < MAX_SPAWN_TYPE; ++i) for (uint8_t i = 0; i < MAX_SPAWN_TYPE; ++i)
{ {
@ -503,25 +503,22 @@ static void toggle_block_system(Scene_t* scene)
} }
break; break;
case SPAWN_CRATE: case SPAWN_CRATE:
spawn_crate(scene, tile_idx, false, CONTAINER_EMPTY); spawn_crate(scene, tile_idx, metal_toggle, CONTAINER_EMPTY);
break;
case SPAWN_METAL_CRATE:
spawn_crate(scene, tile_idx, true, CONTAINER_EMPTY);
break; break;
case SPAWN_BOULDER: case SPAWN_BOULDER:
spawn_boulder(scene, tile_idx); spawn_boulder(scene, tile_idx);
break; break;
case SPAWN_CRATE_ARROW_L: case SPAWN_CRATE_ARROW_L:
spawn_crate(scene, tile_idx, false, CONTAINER_LEFT_ARROW); spawn_crate(scene, tile_idx, metal_toggle, CONTAINER_LEFT_ARROW);
break; break;
case SPAWN_CRATE_ARROW_R: case SPAWN_CRATE_ARROW_R:
spawn_crate(scene, tile_idx, false, CONTAINER_RIGHT_ARROW); spawn_crate(scene, tile_idx, metal_toggle, CONTAINER_RIGHT_ARROW);
break; break;
case SPAWN_CRATE_ARROW_U: case SPAWN_CRATE_ARROW_U:
spawn_crate(scene, tile_idx, false, CONTAINER_UP_ARROW); spawn_crate(scene, tile_idx, metal_toggle, CONTAINER_UP_ARROW);
break; break;
case SPAWN_CRATE_ARROW_D: case SPAWN_CRATE_ARROW_D:
spawn_crate(scene, tile_idx, false, CONTAINER_DOWN_ARROW); spawn_crate(scene, tile_idx, metal_toggle, CONTAINER_DOWN_ARROW);
break; break;
} }
change_a_tile(&tilemap, tile_idx, new_type); change_a_tile(&tilemap, tile_idx, new_type);
@ -610,6 +607,9 @@ void level_do_action(Scene_t* scene, ActionType_t action, bool pressed)
current_spawn_selection--; current_spawn_selection--;
} }
break; break;
case ACTION_METAL_TOGGLE:
if (!pressed) metal_toggle = !metal_toggle;
break;
case ACTION_EXIT: case ACTION_EXIT:
if(scene->engine != NULL) if(scene->engine != NULL)
{ {
@ -663,6 +663,7 @@ void init_level_scene(LevelScene_t* scene)
sc_map_put_64(&scene->scene.action_map, KEY_SPACE, ACTION_JUMP); sc_map_put_64(&scene->scene.action_map, KEY_SPACE, ACTION_JUMP);
sc_map_put_64(&scene->scene.action_map, KEY_O, ACTION_PREV_SPAWN); sc_map_put_64(&scene->scene.action_map, KEY_O, ACTION_PREV_SPAWN);
sc_map_put_64(&scene->scene.action_map, KEY_P, ACTION_NEXT_SPAWN); sc_map_put_64(&scene->scene.action_map, KEY_P, ACTION_NEXT_SPAWN);
sc_map_put_64(&scene->scene.action_map, KEY_M, ACTION_METAL_TOGGLE);
sc_map_put_64(&scene->scene.action_map, KEY_Q, ACTION_EXIT); sc_map_put_64(&scene->scene.action_map, KEY_Q, ACTION_EXIT);
scene->data.tilemap.width = DEFAULT_MAP_WIDTH; scene->data.tilemap.width = DEFAULT_MAP_WIDTH;

View File

@ -9,6 +9,7 @@ typedef enum ActionType
ACTION_JUMP, ACTION_JUMP,
ACTION_NEXT_SPAWN, ACTION_NEXT_SPAWN,
ACTION_PREV_SPAWN, ACTION_PREV_SPAWN,
ACTION_METAL_TOGGLE,
ACTION_CONFIRM, ACTION_CONFIRM,
ACTION_EXIT, ACTION_EXIT,
}ActionType_t; }ActionType_t;