mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-21 05:04:46 -07:00
Merge branch 'dev' of https://github.com/DarkFlippers/unleashed-firmware into xfw-dev
This commit is contained in:
@@ -33,6 +33,7 @@ typedef enum {
|
||||
} State;
|
||||
|
||||
typedef struct {
|
||||
FuriMutex* mutex;
|
||||
State state;
|
||||
uint8_t table[CELLS_COUNT][CELLS_COUNT];
|
||||
uint32_t score;
|
||||
@@ -103,8 +104,9 @@ static void gray_canvas(Canvas* const canvas) {
|
||||
}
|
||||
|
||||
static void draw_callback(Canvas* const canvas, void* ctx) {
|
||||
const GameState* game_state = acquire_mutex((ValueMutex*)ctx, 25);
|
||||
if(game_state == NULL) return;
|
||||
furi_assert(ctx);
|
||||
const GameState* game_state = ctx;
|
||||
furi_mutex_acquire(game_state->mutex, FuriWaitForever);
|
||||
|
||||
canvas_clear(canvas);
|
||||
|
||||
@@ -180,7 +182,7 @@ static void draw_callback(Canvas* const canvas, void* ctx) {
|
||||
canvas_draw_str_aligned(canvas, 64, 48, AlignCenter, AlignBottom, buf);
|
||||
}
|
||||
|
||||
release_mutex((ValueMutex*)ctx, game_state);
|
||||
furi_mutex_release(game_state->mutex);
|
||||
}
|
||||
|
||||
void calculate_move_to_left(uint8_t arr[], MoveResult* const move_result) {
|
||||
@@ -380,8 +382,8 @@ int32_t game_2048_app() {
|
||||
|
||||
MoveResult* move_result = malloc(sizeof(MoveResult));
|
||||
|
||||
ValueMutex state_mutex;
|
||||
if(!init_mutex(&state_mutex, game_state, sizeof(GameState))) {
|
||||
game_state->mutex = furi_mutex_alloc(FuriMutexTypeNormal);
|
||||
if(!game_state->mutex) {
|
||||
FURI_LOG_E("2048Game", "cannot create mutex\r\n");
|
||||
free(game_state);
|
||||
return 255;
|
||||
@@ -391,7 +393,7 @@ int32_t game_2048_app() {
|
||||
FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(InputEvent));
|
||||
|
||||
ViewPort* view_port = view_port_alloc();
|
||||
view_port_draw_callback_set(view_port, draw_callback, &state_mutex);
|
||||
view_port_draw_callback_set(view_port, draw_callback, game_state);
|
||||
view_port_input_callback_set(view_port, input_callback, event_queue);
|
||||
|
||||
Gui* gui = furi_record_open(RECORD_GUI);
|
||||
@@ -404,7 +406,7 @@ int32_t game_2048_app() {
|
||||
// handle only press event, ignore repeat/release events
|
||||
if(input.type != InputTypePress) continue;
|
||||
|
||||
GameState* game_state = (GameState*)acquire_mutex_block(&state_mutex);
|
||||
furi_mutex_acquire(game_state->mutex, FuriWaitForever);
|
||||
|
||||
switch(game_state->state) {
|
||||
case GameStateMenu:
|
||||
@@ -489,7 +491,7 @@ int32_t game_2048_app() {
|
||||
}
|
||||
|
||||
view_port_update(view_port);
|
||||
release_mutex(&state_mutex, game_state);
|
||||
furi_mutex_release(game_state->mutex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -500,7 +502,7 @@ int32_t game_2048_app() {
|
||||
|
||||
furi_message_queue_free(event_queue);
|
||||
|
||||
delete_mutex(&state_mutex);
|
||||
furi_mutex_free(game_state->mutex);
|
||||
|
||||
free(game_state);
|
||||
free(move_result);
|
||||
|
||||
Reference in New Issue
Block a user