xtruan 2 лет назад
Родитель
Сommit
de01e1c881
4 измененных файлов с 42 добавлено и 11 удалено
  1. 2 3
      flipchess.c
  2. 4 3
      flipchess.h
  3. 18 1
      scenes/flipchess_scene_menu.c
  4. 18 4
      views/flipchess_scene_1.c

+ 2 - 3
flipchess.c

@@ -29,10 +29,9 @@ static void text_input_callback(void* context) {
     if(strlen(app->input_text) > 0) {
     if(strlen(app->input_text) > 0) {
         if(app->input_state == FlipChessTextInputGame) {
         if(app->input_state == FlipChessTextInputGame) {
             if(app->import_game == 1) {
             if(app->import_game == 1) {
-                strcpy(app->import_game_text, app->input_text);
-
-                int status = FlipChessStatusSuccess;
+                strncpy(app->import_game_text, app->input_text, TEXT_SIZE);
 
 
+                uint8_t status = FlipChessStatusSuccess;
                 if(status == FlipChessStatusSuccess) {
                 if(status == FlipChessStatusSuccess) {
                     //notification_message(app->notification, &sequence_blink_cyan_100);
                     //notification_message(app->notification, &sequence_blink_cyan_100);
                     flipchess_play_happy_bump(app);
                     flipchess_play_happy_bump(app);

+ 4 - 3
flipchess.h

@@ -18,7 +18,8 @@
 
 
 #define FLIPCHESS_VERSION "v0.1.2"
 #define FLIPCHESS_VERSION "v0.1.2"
 
 
-#define TEXT_BUFFER_SIZE 256
+#define TEXT_BUFFER_SIZE 96
+#define TEXT_SIZE (TEXT_BUFFER_SIZE - 1)
 
 
 typedef struct {
 typedef struct {
     Gui* gui;
     Gui* gui;
@@ -35,9 +36,9 @@ typedef struct {
     int white_mode;
     int white_mode;
     int black_mode;
     int black_mode;
     // Main menu options
     // Main menu options
-    int import_game;
+    uint8_t import_game;
     // Text input
     // Text input
-    int input_state;
+    uint8_t input_state;
     char import_game_text[TEXT_BUFFER_SIZE];
     char import_game_text[TEXT_BUFFER_SIZE];
     char input_text[TEXT_BUFFER_SIZE];
     char input_text[TEXT_BUFFER_SIZE];
 } FlipChess;
 } FlipChess;

+ 18 - 1
scenes/flipchess_scene_menu.c

@@ -2,6 +2,7 @@
 
 
 enum SubmenuIndex {
 enum SubmenuIndex {
     SubmenuIndexScene1New = 10,
     SubmenuIndexScene1New = 10,
+    SubmenuIndexScene1Resume,
     SubmenuIndexScene1Import,
     SubmenuIndexScene1Import,
     SubmenuIndexSettings,
     SubmenuIndexSettings,
 };
 };
@@ -21,6 +22,15 @@ void flipchess_scene_menu_on_enter(void* context) {
         flipchess_scene_menu_submenu_callback,
         flipchess_scene_menu_submenu_callback,
         app);
         app);
 
 
+    if(app->import_game == 1) {
+        submenu_add_item(
+            app->submenu,
+            "Resume Game",
+            SubmenuIndexScene1Resume,
+            flipchess_scene_menu_submenu_callback,
+            app);
+    }
+
     // submenu_add_item(
     // submenu_add_item(
     //     app->submenu,
     //     app->submenu,
     //     "Import Game",
     //     "Import Game",
@@ -52,10 +62,17 @@ bool flipchess_scene_menu_on_event(void* context, SceneManagerEvent event) {
                 app->scene_manager, FlipChessSceneMenu, SubmenuIndexScene1New);
                 app->scene_manager, FlipChessSceneMenu, SubmenuIndexScene1New);
             scene_manager_next_scene(app->scene_manager, FlipChessSceneScene_1);
             scene_manager_next_scene(app->scene_manager, FlipChessSceneScene_1);
             return true;
             return true;
+        }
+        if(event.event == SubmenuIndexScene1Resume) {
+            app->import_game = 1;
+            scene_manager_set_scene_state(
+                app->scene_manager, FlipChessSceneMenu, SubmenuIndexScene1Resume);
+            scene_manager_next_scene(app->scene_manager, FlipChessSceneScene_1);
+            return true;
         } else if(event.event == SubmenuIndexScene1Import) {
         } else if(event.event == SubmenuIndexScene1Import) {
             app->import_game = 1;
             app->import_game = 1;
             app->input_state = FlipChessTextInputGame;
             app->input_state = FlipChessTextInputGame;
-            text_input_set_header_text(app->text_input, "Enter game phrase");
+            text_input_set_header_text(app->text_input, "Enter board FEN");
             view_dispatcher_switch_to_view(app->view_dispatcher, FlipChessViewIdTextInput);
             view_dispatcher_switch_to_view(app->view_dispatcher, FlipChessViewIdTextInput);
             return true;
             return true;
         } else if(event.event == SubmenuIndexSettings) {
         } else if(event.event == SubmenuIndexSettings) {

+ 18 - 4
views/flipchess_scene_1.c

@@ -370,7 +370,8 @@ void flipchess_scene_1_draw(Canvas* canvas, FlipChessScene1Model* model) {
 static int flipchess_scene_1_model_init(
 static int flipchess_scene_1_model_init(
     FlipChessScene1Model* const model,
     FlipChessScene1Model* const model,
     const int white_mode,
     const int white_mode,
-    const int black_mode) {
+    const int black_mode,
+    char* import_game_text) {
     model->paramPlayerW = white_mode;
     model->paramPlayerW = white_mode;
     model->paramPlayerB = black_mode;
     model->paramPlayerB = black_mode;
 
 
@@ -380,7 +381,7 @@ static int flipchess_scene_1_model_init(
     model->paramFlipBoard = 0;
     model->paramFlipBoard = 0;
     model->paramExit = FlipChessStatusSuccess;
     model->paramExit = FlipChessStatusSuccess;
     model->paramStep = 0;
     model->paramStep = 0;
-    model->paramFEN = NULL;
+    model->paramFEN = import_game_text;
     model->paramPGN = NULL;
     model->paramPGN = NULL;
     model->clockSeconds = -1;
     model->clockSeconds = -1;
 
 
@@ -487,6 +488,7 @@ static int flipchess_scene_1_model_init(
 bool flipchess_scene_1_input(InputEvent* event, void* context) {
 bool flipchess_scene_1_input(InputEvent* event, void* context) {
     furi_assert(context);
     furi_assert(context);
     FlipChessScene1* instance = context;
     FlipChessScene1* instance = context;
+    FlipChess* app = instance->context;
 
 
     if(event->type == InputTypeRelease) {
     if(event->type == InputTypeRelease) {
         switch(event->key) {
         switch(event->key) {
@@ -583,6 +585,8 @@ bool flipchess_scene_1_input(InputEvent* event, void* context) {
                 {
                 {
                     // first turn of round, probably player but could be AI
                     // first turn of round, probably player but could be AI
                     flipchess_turn(model);
                     flipchess_turn(model);
+                    SCL_boardToFEN(model->game.board, app->import_game_text);
+                    app->import_game = 1;
                     flipchess_drawBoard(model);
                     flipchess_drawBoard(model);
                 },
                 },
                 true);
                 true);
@@ -605,6 +609,8 @@ bool flipchess_scene_1_input(InputEvent* event, void* context) {
                     // if player played, let AI play
                     // if player played, let AI play
                     if(!flipchess_isPlayerTurn(model)) {
                     if(!flipchess_isPlayerTurn(model)) {
                         flipchess_turn(model);
                         flipchess_turn(model);
+                        SCL_boardToFEN(model->game.board, app->import_game_text);
+                        app->import_game = 1;
                         flipchess_drawBoard(model);
                         flipchess_drawBoard(model);
                     }
                     }
                 },
                 },
@@ -628,7 +634,6 @@ void flipchess_scene_1_exit(void* context) {
 void flipchess_scene_1_enter(void* context) {
 void flipchess_scene_1_enter(void* context) {
     furi_assert(context);
     furi_assert(context);
     FlipChessScene1* instance = (FlipChessScene1*)context;
     FlipChessScene1* instance = (FlipChessScene1*)context;
-
     FlipChess* app = instance->context;
     FlipChess* app = instance->context;
 
 
     flipchess_play_happy_bump(app);
     flipchess_play_happy_bump(app);
@@ -637,7 +642,14 @@ void flipchess_scene_1_enter(void* context) {
         instance->view,
         instance->view,
         FlipChessScene1Model * model,
         FlipChessScene1Model * model,
         {
         {
-            int init = flipchess_scene_1_model_init(model, app->white_mode, app->black_mode);
+            // load imported game if applicable
+            char* import_game_text = NULL;
+            if(app->import_game == 1 && strlen(app->import_game_text) > 0) {
+                import_game_text = app->import_game_text;
+            }
+
+            int init = flipchess_scene_1_model_init(
+                model, app->white_mode, app->black_mode, import_game_text);
 
 
             // nonzero status
             // nonzero status
             if(init == FlipChessStatusSuccess) {
             if(init == FlipChessStatusSuccess) {
@@ -647,6 +659,8 @@ void flipchess_scene_1_enter(void* context) {
                 if(turn == FlipChessStatusReturn) {
                 if(turn == FlipChessStatusReturn) {
                     init = turn;
                     init = turn;
                 } else {
                 } else {
+                    SCL_boardToFEN(model->game.board, app->import_game_text);
+                    app->import_game = 1;
                     flipchess_drawBoard(model);
                     flipchess_drawBoard(model);
                 }
                 }
             }
             }