Skip to content

Commit de01e1c

Browse files
committed
feat: resume game
1 parent 7161007 commit de01e1c

File tree

4 files changed

+42
-11
lines changed

4 files changed

+42
-11
lines changed

flipchess.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,9 @@ static void text_input_callback(void* context) {
2929
if(strlen(app->input_text) > 0) {
3030
if(app->input_state == FlipChessTextInputGame) {
3131
if(app->import_game == 1) {
32-
strcpy(app->import_game_text, app->input_text);
33-
34-
int status = FlipChessStatusSuccess;
32+
strncpy(app->import_game_text, app->input_text, TEXT_SIZE);
3533

34+
uint8_t status = FlipChessStatusSuccess;
3635
if(status == FlipChessStatusSuccess) {
3736
//notification_message(app->notification, &sequence_blink_cyan_100);
3837
flipchess_play_happy_bump(app);

flipchess.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818

1919
#define FLIPCHESS_VERSION "v0.1.2"
2020

21-
#define TEXT_BUFFER_SIZE 256
21+
#define TEXT_BUFFER_SIZE 96
22+
#define TEXT_SIZE (TEXT_BUFFER_SIZE - 1)
2223

2324
typedef struct {
2425
Gui* gui;
@@ -35,9 +36,9 @@ typedef struct {
3536
int white_mode;
3637
int black_mode;
3738
// Main menu options
38-
int import_game;
39+
uint8_t import_game;
3940
// Text input
40-
int input_state;
41+
uint8_t input_state;
4142
char import_game_text[TEXT_BUFFER_SIZE];
4243
char input_text[TEXT_BUFFER_SIZE];
4344
} FlipChess;

scenes/flipchess_scene_menu.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
enum SubmenuIndex {
44
SubmenuIndexScene1New = 10,
5+
SubmenuIndexScene1Resume,
56
SubmenuIndexScene1Import,
67
SubmenuIndexSettings,
78
};
@@ -21,6 +22,15 @@ void flipchess_scene_menu_on_enter(void* context) {
2122
flipchess_scene_menu_submenu_callback,
2223
app);
2324

25+
if(app->import_game == 1) {
26+
submenu_add_item(
27+
app->submenu,
28+
"Resume Game",
29+
SubmenuIndexScene1Resume,
30+
flipchess_scene_menu_submenu_callback,
31+
app);
32+
}
33+
2434
// submenu_add_item(
2535
// app->submenu,
2636
// "Import Game",
@@ -52,10 +62,17 @@ bool flipchess_scene_menu_on_event(void* context, SceneManagerEvent event) {
5262
app->scene_manager, FlipChessSceneMenu, SubmenuIndexScene1New);
5363
scene_manager_next_scene(app->scene_manager, FlipChessSceneScene_1);
5464
return true;
65+
}
66+
if(event.event == SubmenuIndexScene1Resume) {
67+
app->import_game = 1;
68+
scene_manager_set_scene_state(
69+
app->scene_manager, FlipChessSceneMenu, SubmenuIndexScene1Resume);
70+
scene_manager_next_scene(app->scene_manager, FlipChessSceneScene_1);
71+
return true;
5572
} else if(event.event == SubmenuIndexScene1Import) {
5673
app->import_game = 1;
5774
app->input_state = FlipChessTextInputGame;
58-
text_input_set_header_text(app->text_input, "Enter game phrase");
75+
text_input_set_header_text(app->text_input, "Enter board FEN");
5976
view_dispatcher_switch_to_view(app->view_dispatcher, FlipChessViewIdTextInput);
6077
return true;
6178
} else if(event.event == SubmenuIndexSettings) {

views/flipchess_scene_1.c

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,8 @@ void flipchess_scene_1_draw(Canvas* canvas, FlipChessScene1Model* model) {
370370
static int flipchess_scene_1_model_init(
371371
FlipChessScene1Model* const model,
372372
const int white_mode,
373-
const int black_mode) {
373+
const int black_mode,
374+
char* import_game_text) {
374375
model->paramPlayerW = white_mode;
375376
model->paramPlayerB = black_mode;
376377

@@ -380,7 +381,7 @@ static int flipchess_scene_1_model_init(
380381
model->paramFlipBoard = 0;
381382
model->paramExit = FlipChessStatusSuccess;
382383
model->paramStep = 0;
383-
model->paramFEN = NULL;
384+
model->paramFEN = import_game_text;
384385
model->paramPGN = NULL;
385386
model->clockSeconds = -1;
386387

@@ -487,6 +488,7 @@ static int flipchess_scene_1_model_init(
487488
bool flipchess_scene_1_input(InputEvent* event, void* context) {
488489
furi_assert(context);
489490
FlipChessScene1* instance = context;
491+
FlipChess* app = instance->context;
490492

491493
if(event->type == InputTypeRelease) {
492494
switch(event->key) {
@@ -583,6 +585,8 @@ bool flipchess_scene_1_input(InputEvent* event, void* context) {
583585
{
584586
// first turn of round, probably player but could be AI
585587
flipchess_turn(model);
588+
SCL_boardToFEN(model->game.board, app->import_game_text);
589+
app->import_game = 1;
586590
flipchess_drawBoard(model);
587591
},
588592
true);
@@ -605,6 +609,8 @@ bool flipchess_scene_1_input(InputEvent* event, void* context) {
605609
// if player played, let AI play
606610
if(!flipchess_isPlayerTurn(model)) {
607611
flipchess_turn(model);
612+
SCL_boardToFEN(model->game.board, app->import_game_text);
613+
app->import_game = 1;
608614
flipchess_drawBoard(model);
609615
}
610616
},
@@ -628,7 +634,6 @@ void flipchess_scene_1_exit(void* context) {
628634
void flipchess_scene_1_enter(void* context) {
629635
furi_assert(context);
630636
FlipChessScene1* instance = (FlipChessScene1*)context;
631-
632637
FlipChess* app = instance->context;
633638

634639
flipchess_play_happy_bump(app);
@@ -637,7 +642,14 @@ void flipchess_scene_1_enter(void* context) {
637642
instance->view,
638643
FlipChessScene1Model * model,
639644
{
640-
int init = flipchess_scene_1_model_init(model, app->white_mode, app->black_mode);
645+
// load imported game if applicable
646+
char* import_game_text = NULL;
647+
if(app->import_game == 1 && strlen(app->import_game_text) > 0) {
648+
import_game_text = app->import_game_text;
649+
}
650+
651+
int init = flipchess_scene_1_model_init(
652+
model, app->white_mode, app->black_mode, import_game_text);
641653

642654
// nonzero status
643655
if(init == FlipChessStatusSuccess) {
@@ -647,6 +659,8 @@ void flipchess_scene_1_enter(void* context) {
647659
if(turn == FlipChessStatusReturn) {
648660
init = turn;
649661
} else {
662+
SCL_boardToFEN(model->game.board, app->import_game_text);
663+
app->import_game = 1;
650664
flipchess_drawBoard(model);
651665
}
652666
}

0 commit comments

Comments
 (0)