X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=cfab48e7250f1c5888648fbe8d267c65fa748269;hb=71f6982088deb38bae6506216004fcbe4caf6f9a;hp=2f3ff410f4818b63a661bcb5ec257fd349b7586d;hpb=e25161c4cc2371ce2ace1d9aae03f8539074af3c;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 2f3ff410..cfab48e7 100644 --- a/src/screens.c +++ b/src/screens.c @@ -1957,6 +1957,16 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) } } +static void HandleMainMenu_ToggleTeamMode(void) +{ + setup.team_mode = !setup.team_mode; + + InitializeMainControls(); + DrawCursorAndText_Main(MAIN_CONTROL_NAME, TRUE, FALSE); + + DrawPreviewPlayers(); +} + static void HandleMainMenu_SelectLevel(int step, int direction, int selected_level_nr) { @@ -2106,9 +2116,16 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) } else if (dx != 0) { - if (choice != MAIN_CONTROL_INFO && - choice != MAIN_CONTROL_SETUP) + if (choice == MAIN_CONTROL_NAME) + { + // special case: cursor left or right pressed -- toggle team mode + HandleMainMenu_ToggleTeamMode(); + } + else if (choice != MAIN_CONTROL_INFO && + choice != MAIN_CONTROL_SETUP) + { HandleMainMenu_SelectLevel(1, dx, NO_DIRECT_LEVEL_SELECT); + } } } else @@ -2121,12 +2138,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) insideTextPosRect(main_controls[i].pos_text, mx - mSX, my - mSY)) { // special case: menu text "name/team" clicked -- toggle team mode - setup.team_mode = !setup.team_mode; - - InitializeMainControls(); - DrawCursorAndText_Main(choice, TRUE, FALSE); - - DrawPreviewPlayers(); + HandleMainMenu_ToggleTeamMode(); } else { @@ -4023,6 +4035,101 @@ void HandleInfoScreen(int mx, int my, int dx, int dy, int button) } +// ============================================================================ +// change name functions +// ============================================================================ + +static void RenamePlayerOnServerExt(struct HttpRequest *request, + struct HttpResponse *response, + char *player_name_raw, + char *player_uuid_raw) +{ + request->hostname = setup.api_server_hostname; + request->port = API_SERVER_PORT; + request->method = API_SERVER_METHOD; + request->uri = API_SERVER_URI_RENAME; + + char *player_name = getEscapedJSON(player_name_raw); + char *player_uuid = getEscapedJSON(player_uuid_raw); + + snprintf(request->body, MAX_HTTP_BODY_SIZE, + "{\n" + "%s" + " \"game_version\": \"%s\",\n" + " \"name\": \"%s\",\n" + " \"uuid\": \"%s\"\n" + "}\n", + getPasswordJSON(setup.api_server_password), + getProgramRealVersionString(), + player_name, + player_uuid); + + checked_free(player_name); + checked_free(player_uuid); + + ConvertHttpRequestBodyToServerEncoding(request); + + if (!DoHttpRequest(request, response)) + { + Error("HTTP request failed: %s", GetHttpError()); + + return; + } + + if (!HTTP_SUCCESS(response->status_code)) + { + Error("server failed to handle request: %d %s", + response->status_code, + response->status_text); + + return; + } +} + +static void RenamePlayerOnServer(char *player_name, char *player_uuid) +{ + struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest)); + struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse)); + + RenamePlayerOnServerExt(request, response, player_name, player_uuid); + + checked_free(request); + checked_free(response); +} + +struct RenamePlayerOnServerThreadData +{ + char *player_name; + char *player_uuid; +}; + +static int RenamePlayerOnServerThread(void *data_raw) +{ + struct RenamePlayerOnServerThreadData *data = data_raw; + + RenamePlayerOnServer(data->player_name, data->player_uuid); + + checked_free(data->player_name); + checked_free(data->player_uuid); + checked_free(data); + + return 0; +} + +static void RenamePlayerOnServerAsThread(void) +{ + struct RenamePlayerOnServerThreadData *data = + checked_malloc(sizeof(struct RenamePlayerOnServerThreadData)); + + data->player_name = getStringCopy(setup.player_name); + data->player_uuid = getStringCopy(setup.player_uuid); + + ExecuteAsThread(RenamePlayerOnServerThread, + "RenamePlayerOnServer", data, + "rename player on server"); +} + + // ============================================================================ // type name functions // ============================================================================ @@ -4160,6 +4267,9 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos, // save setup of edited user SaveSetup(); + // change name of edited user on score server + RenamePlayerOnServerAsThread(); + if (game_status == GAME_MODE_PSEUDO_TYPENAMES || reset_setup) { if (reset_setup) @@ -5117,6 +5227,7 @@ static void drawHallOfFameList(int level_nr, int first_entry) { int entry = first_entry + i; boolean active = (entry == scores.last_added); + boolean forced = (scores.force_last_added && active); int font_nr1 = (active ? FONT_TEXT_1_ACTIVE : FONT_TEXT_1); int font_nr2 = (active ? FONT_TEXT_2_ACTIVE : FONT_TEXT_2); int font_nr3 = (active ? FONT_TEXT_3_ACTIVE : FONT_TEXT_3); @@ -5127,8 +5238,9 @@ static void drawHallOfFameList(int level_nr, int first_entry) int dx3 = SXSIZE - 2 * (mSX - SX + dxoff) - 5 * getFontWidth(font_nr4); int num_dots = (dx3 - dx2) / getFontWidth(font_nr3); int sy = mSY + 64 + i * 32; + char *pos_text = (forced ? "???" : int2str(entry + 1, 3)); - DrawText(mSX, sy, int2str(entry + 1, 3), font_nr1); + DrawText(mSX, sy, pos_text, font_nr1); DrawText(mSX + dx1, sy, ".", font_nr1); for (j = 0; j < num_dots; j++) @@ -6757,6 +6869,7 @@ static struct TokenInfo setup_info_game[] = { TYPE_TEXT_INPUT, execGadgetNetworkServer, "Network Server Hostname:" }, { TYPE_STRING, &network_server_text, "" }, { TYPE_SWITCH, &setup.api_server, "Use Highscore Server:" }, + { TYPE_SWITCH, &setup.only_show_local_scores, "Only Show Local Scores:" }, { TYPE_SWITCH, &setup.multiple_users, "Multiple Users/Teams:" }, { TYPE_YES_NO, &setup.input_on_focus, "Only Move Focussed Player:" }, { TYPE_SWITCH, &setup.time_limit, "Time Limit:" }, @@ -6779,7 +6892,8 @@ static struct TokenInfo setup_info_game[] = #endif { TYPE_ENTER_LIST, execSetupChooseSnapshotMode,"Game Engine Snapshot Mode:" }, { TYPE_STRING, &snapshot_mode_text, "" }, - { TYPE_SWITCH, &setup.show_snapshot_buttons,"Show Snapshot Buttons:" }, + { TYPE_SWITCH, &setup.show_load_save_buttons,"Show Load/Save Buttons:" }, + { TYPE_SWITCH, &setup.show_undo_redo_buttons,"Show Undo/Redo Buttons:" }, { TYPE_EMPTY, NULL, "" }, { TYPE_LEAVE_MENU, execSetupMain, "Back" }, @@ -8920,10 +9034,10 @@ void HandleGameActions(void) if (game_status != GAME_MODE_PLAYING) return; - GameActions(); // main game loop + GameActions(); // main game loop if (tape.auto_play && !tape.playing) - AutoPlayTapes(); // continue automatically playing next tape + AutoPlayTapesContinue(); // continue automatically playing next tape }