QTfrontend/campaign.cpp
author Simon McVittie <smcv@debian.org>
Mon, 12 Sep 2022 10:40:53 -0400
branch1.0.0
changeset 15859 7b1d6dfa3173
parent 14633 c9d2a5a9f6ba
child 15506 f315bb93db1f
permissions -rw-r--r--
Remove FindSDL2 find-module, use sdl2-config.cmake instead This requires SDL >= 2.0.4. Since <https://bugzilla.libsdl.org/show_bug.cgi?id=2464> was fixed in SDL 2.0.4, SDL behaves as a CMake "config-file package", even if it was not itself built using CMake: it installs a sdl2-config.cmake file to ${libdir}/cmake/SDL2, which tells CMake where to find SDL's headers and library, analogous to a pkg-config .pc file. As a result, we no longer need to copy/paste a "find-module package" to be able to find a system copy of SDL >= 2.0.4 with find_package(SDL2). Find-module packages are now discouraged by the CMake developers, in favour of having upstream projects behave as config-file packages. This results in a small API change: FindSDL2 used to set SDL2_INCLUDE_DIR and SDL2_LIBRARY, but the standard behaviour for config-file packages is to set <name>_INCLUDE_DIRS and <name>_LIBRARIES. Use the CONFIG keyword to make sure we search in config-file package mode, and will not find a FindSDL2.cmake in some other directory that implements the old interface. In addition to deleting redundant code, this avoids some assumptions in FindSDL2 about the layout of a SDL installation. The current libsdl2-dev package in Debian breaks those assumptions; this is considered a bug and will hopefully be fixed soon, but it illustrates how fragile these assumptions can be. We can be more robust against different installation layouts by relying on SDL's own CMake integration. When linking to a copy of CMake in a non-standard location, users can now set the SDL2_DIR or CMAKE_PREFIX_PATH environment variable to point to it; previously, these users would have used the SDL2DIR environment variable. This continues to be unnecessary if using matching system-wide installations of CMake and SDL2, for example both from Debian.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7201
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
     1
/*
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
     2
 * Hedgewars, a free turn based strategy game
11046
47a8c19ecb60 more copyright fixes
sheepluva
parents: 10108
diff changeset
     3
 * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
7201
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
     4
 *
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
     8
 *
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
    12
 * GNU General Public License for more details.
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
    13
 *
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
10108
c68cf030eded update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents: 10017
diff changeset
    16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
7201
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
    17
 */
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
    18
9000
af202eff659c remove about 45 useless #include statements from campain.* - copypasta ftw, eh? :p
sheepluva
parents: 8434
diff changeset
    19
#include "campaign.h"
af202eff659c remove about 45 useless #include statements from campain.* - copypasta ftw, eh? :p
sheepluva
parents: 8434
diff changeset
    20
#include "hwconsts.h"
9278
33a30ce9782f this seems to works, still wip
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9275
diff changeset
    21
#include "DataManager.h"
7201
dc17ffdf0702 The first campaign commit with a lot of changes...
belphegorr <szabibibi@gmail.com>
parents:
diff changeset
    22
#include <QSettings>
9278
33a30ce9782f this seems to works, still wip
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9275
diff changeset
    23
#include <QObject>
9292
187ce630dddc y! code clean up :)
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9290
diff changeset
    24
#include <QLocale>
8434
4821897a0f10 big indentation/whitespaces cleanup
sheepluva
parents: 8049
diff changeset
    25
11948
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    26
QSettings* getCampTeamFile(QString & campaignName, QString & teamName)
9294
f9b31c3efd35 added deafult image if not one available in campaign
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9292
diff changeset
    27
{
11948
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    28
    QSettings* teamfile = new QSettings(cfgdir->absolutePath() + "/Teams/" + teamName + ".hwt", QSettings::IniFormat, 0);
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    29
    teamfile->setIniCodec("UTF-8");
9821
7501208fd025 check if save from old campaign name scheme exists and if so rename it to use _ instead of spaces -see issue 722
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9308
diff changeset
    30
    // if entry not found check if there is written without _
7501208fd025 check if save from old campaign name scheme exists and if so rename it to use _ instead of spaces -see issue 722
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9308
diff changeset
    31
    // if then is found rename it to use _
7501208fd025 check if save from old campaign name scheme exists and if so rename it to use _ instead of spaces -see issue 722
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9308
diff changeset
    32
    QString spaceCampName = campaignName;
7501208fd025 check if save from old campaign name scheme exists and if so rename it to use _ instead of spaces -see issue 722
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9308
diff changeset
    33
    spaceCampName = spaceCampName.replace(QString("_"),QString(" "));
13910
6c8d4e140f27 fix frontend compatibility issues
alfadur
parents: 13811
diff changeset
    34
    if (!teamfile->childGroups().contains("Campaign " + campaignName) &&
11948
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    35
            teamfile->childGroups().contains("Campaign " + spaceCampName)){
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    36
        teamfile->beginGroup("Campaign " + spaceCampName);
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    37
        QStringList keys = teamfile->childKeys();
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    38
        teamfile->endGroup();
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
    39
        for (int i=0;i<keys.size();i++) {
11948
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    40
            QVariant value = teamfile->value("Campaign " + spaceCampName + "/" + keys[i]);
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    41
            teamfile->setValue("Campaign " + campaignName + "/" + keys[i], value);
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
    42
        }
11948
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    43
        teamfile->remove("Campaign " + spaceCampName);
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
    44
    }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
    45
11948
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    46
    return teamfile;
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    47
}
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    48
11951
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    49
/**
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    50
    Returns true if the specified mission has been completed
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    51
    campaignName: Name of the campaign in question
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    52
    missionInList: QComboBox index of the mission as selected in the mission widget
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    53
    teamName: Name of the playing team
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    54
*/
14462
4c743ef80b1b Add team selection in training page and basic check mark support
Wuzzy <Wuzzy2@mail.ru>
parents: 13910
diff changeset
    55
bool isCampMissionWon(QString & campaignName, int missionInList, QString & teamName)
11951
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    56
{
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    57
    QSettings* teamfile = getCampTeamFile(campaignName, teamName);
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    58
    int progress = teamfile->value("Campaign " + campaignName + "/Progress", 0).toInt();
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    59
    int unlockedMissions = teamfile->value("Campaign " + campaignName + "/UnlockedMissions", 0).toInt();
14633
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
    60
    // The CowardMode cheat unlocks all campaign missions,
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
    61
    // but as "punishment", none of them will be marked as completed.
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
    62
    // Added to make it easier to test campaigns.
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
    63
    bool cheat = teamfile->value("Team/CowardMode", false).toBool();
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
    64
    if(cheat)
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
    65
    {
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
    66
        return false;
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
    67
    }
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
    68
    else if(progress>0 && unlockedMissions==0)
11951
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    69
    {
11956
221b38978401 Seperate campaign victories from campaign mission victories
Wuzzy <almikes@aol.com>
parents: 11954
diff changeset
    70
        QSettings campfile("physfs://Missions/Campaign/" + campaignName + "/campaign.ini", QSettings::IniFormat, 0);
221b38978401 Seperate campaign victories from campaign mission victories
Wuzzy <almikes@aol.com>
parents: 11954
diff changeset
    71
        campfile.setIniCodec("UTF-8");
221b38978401 Seperate campaign victories from campaign mission victories
Wuzzy <almikes@aol.com>
parents: 11954
diff changeset
    72
        int totalMissions = campfile.value("MissionNum", 1).toInt();
221b38978401 Seperate campaign victories from campaign mission victories
Wuzzy <almikes@aol.com>
parents: 11954
diff changeset
    73
        return (progress > (progress - missionInList)) || (progress >= totalMissions);
11951
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    74
    }
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    75
    else if(unlockedMissions>0)
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    76
    {
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    77
        int fileMissionId = missionInList + 1;
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    78
        int actualMissionId = teamfile->value(QString("Campaign %1/Mission%2").arg(campaignName, QString::number(fileMissionId)), false).toInt();
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    79
        return teamfile->value(QString("Campaign %1/Mission%2Won").arg(campaignName, QString::number(actualMissionId)), false).toBool();
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    80
    }
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    81
    else
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    82
        return false;
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    83
}
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    84
b05db9ca6e1c Add support for storing and displaying success of campaign missions
Wuzzy <almikes@aol.com>
parents: 11948
diff changeset
    85
/** Returns true if the campaign has been won by the team */
11948
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    86
bool isCampWon(QString & campaignName, QString & teamName)
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    87
{
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    88
    QSettings* teamfile = getCampTeamFile(campaignName, teamName);
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    89
    bool won = teamfile->value("Campaign " + campaignName + "/Won", false).toBool();
14633
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
    90
    bool cheat = teamfile->value("Team/CowardMode", false).toBool();
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
    91
    return won && !cheat;
11948
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    92
}
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    93
11957
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
    94
QSettings* getCampMetaInfo()
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
    95
{
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
    96
    DataManager & dataMgr = DataManager::instance();
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
    97
    // get locale
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
    98
    QSettings settings(dataMgr.settingsFileName(),
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
    99
    QSettings::IniFormat);
13274
e381f5260b45 Change how locale is loaded in frontend, and fix some bugs
Wuzzy <Wuzzy2@mail.ru>
parents: 12305
diff changeset
   100
    QString loc = QLocale().name();
11957
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   101
    QString campaignDescFile = QString("physfs://Locale/campaigns_" + loc + ".txt");
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   102
    // if file is non-existant try with language only
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   103
    if (!QFile::exists(campaignDescFile))
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   104
    campaignDescFile = QString("physfs://Locale/campaigns_" + loc.remove(QRegExp("_.*$")) + ".txt");
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   105
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   106
    // fallback if file for current locale is non-existant
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   107
    if (!QFile::exists(campaignDescFile))
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   108
        campaignDescFile = QString("physfs://Locale/campaigns_en.txt");
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   109
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   110
    QSettings* m_info = new QSettings(campaignDescFile, QSettings::IniFormat, 0);
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   111
    m_info->setIniCodec("UTF-8");
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   112
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   113
    return m_info;
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   114
}
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   115
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   116
/** Returns the localized campaign name */
12305
d3a52e51efd4 fix campaign missions not showing up for me
sheepluva
parents: 11958
diff changeset
   117
QString getRealCampName(const QString & campaignName)
11957
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   118
{
12305
d3a52e51efd4 fix campaign missions not showing up for me
sheepluva
parents: 11958
diff changeset
   119
    QString campaignNameSpaces = QString(campaignName).replace(QString("_"), QString(" "));
d3a52e51efd4 fix campaign missions not showing up for me
sheepluva
parents: 11958
diff changeset
   120
    return getCampMetaInfo()->value(campaignName+".name", campaignNameSpaces).toString();
11957
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   121
}
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   122
11948
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
   123
QList<MissionInfo> getCampMissionList(QString & campaignName, QString & teamName)
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
   124
{
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
   125
    QList<MissionInfo> missionInfoList;
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
   126
    QSettings* teamfile = getCampTeamFile(campaignName, teamName);
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
   127
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
   128
    int progress = teamfile->value("Campaign " + campaignName + "/Progress", 0).toInt();
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
   129
    int unlockedMissions = teamfile->value("Campaign " + campaignName + "/UnlockedMissions", 0).toInt();
14633
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
   130
    bool cheat = teamfile->value("Team/CowardMode", false).toBool();
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   131
9290
478aa681e702 this seems to work ok, but I have to clean up the code
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9286
diff changeset
   132
    QSettings campfile("physfs://Missions/Campaign/" + campaignName + "/campaign.ini", QSettings::IniFormat, 0);
478aa681e702 this seems to work ok, but I have to clean up the code
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9286
diff changeset
   133
    campfile.setIniCodec("UTF-8");
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   134
11957
1201fc039e24 Make campaign names translatable
Wuzzy <almikes@aol.com>
parents: 11956
diff changeset
   135
    QSettings* m_info = getCampMetaInfo();
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   136
14633
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
   137
    if(cheat)
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
   138
    {
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
   139
        progress = campfile.value("MissionNum", 1).toInt();
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
   140
    }
c9d2a5a9f6ba Add CowardMode team setting
Wuzzy <Wuzzy2@mail.ru>
parents: 14462
diff changeset
   141
    if((progress >= 0 && unlockedMissions == 0) || cheat)
9290
478aa681e702 this seems to work ok, but I have to clean up the code
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9286
diff changeset
   142
    {
13910
6c8d4e140f27 fix frontend compatibility issues
alfadur
parents: 13811
diff changeset
   143
        for(unsigned int i = progress + 1; i > 0; i--)
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   144
        {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   145
            MissionInfo missionInfo;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   146
            QString script = campfile.value(QString("Mission %1/Script").arg(i)).toString();
11954
62be63822a96 Fix final mission of Progress-based campaigns (like ACF) not being recognized as finished
Wuzzy <almikes@aol.com>
parents: 11951
diff changeset
   147
            if(!script.isNull()) {
11958
de66192866d3 Make campaign mission names translatable
Wuzzy <almikes@aol.com>
parents: 11957
diff changeset
   148
                missionInfo.script = script;
11954
62be63822a96 Fix final mission of Progress-based campaigns (like ACF) not being recognized as finished
Wuzzy <almikes@aol.com>
parents: 11951
diff changeset
   149
                missionInfo.name = campfile.value(QString("Mission %1/Name").arg(i)).toString();
11958
de66192866d3 Make campaign mission names translatable
Wuzzy <almikes@aol.com>
parents: 11957
diff changeset
   150
                QString scriptPrefix = campaignName+"-"+ script.replace(QString(".lua"),QString(""));
de66192866d3 Make campaign mission names translatable
Wuzzy <almikes@aol.com>
parents: 11957
diff changeset
   151
                missionInfo.realName = m_info->value(scriptPrefix+".name", missionInfo.name).toString();
de66192866d3 Make campaign mission names translatable
Wuzzy <almikes@aol.com>
parents: 11957
diff changeset
   152
                missionInfo.description = m_info->value(scriptPrefix + ".desc",
9290
478aa681e702 this seems to work ok, but I have to clean up the code
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9286
diff changeset
   153
                                            QObject::tr("No description available")).toString();
13811
e3fee73c51a0 Move campaign mission images to share/ instead of hardcoding them into frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 13274
diff changeset
   154
                QString image = campfile.value(QString("Mission %1/Script").arg(i)).toString().replace(QString(".lua"),QString("@2x.png"));
e3fee73c51a0 Move campaign mission images to share/ instead of hardcoding them into frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 13274
diff changeset
   155
                missionInfo.image = "physfs://Graphics/Missions/Campaign/"+campaignName+"/"+image;
11954
62be63822a96 Fix final mission of Progress-based campaigns (like ACF) not being recognized as finished
Wuzzy <almikes@aol.com>
parents: 11951
diff changeset
   156
                if (!QFile::exists(missionInfo.image))
62be63822a96 Fix final mission of Progress-based campaigns (like ACF) not being recognized as finished
Wuzzy <almikes@aol.com>
parents: 11951
diff changeset
   157
                    missionInfo.image = ":/res/CampaignDefault.png";
62be63822a96 Fix final mission of Progress-based campaigns (like ACF) not being recognized as finished
Wuzzy <almikes@aol.com>
parents: 11951
diff changeset
   158
                missionInfoList.append(missionInfo);
62be63822a96 Fix final mission of Progress-based campaigns (like ACF) not being recognized as finished
Wuzzy <almikes@aol.com>
parents: 11951
diff changeset
   159
            }
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   160
        }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   161
    }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   162
    else if(unlockedMissions>0)
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   163
    {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   164
        for(int i=1;i<=unlockedMissions;i++)
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   165
        {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   166
            QString missionNum = QString("%1").arg(i);
11948
6da9bb4b3449 Show check marks for campaigns with Won=true
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
   167
            int missionNumber = teamfile->value("Campaign " + campaignName + "/Mission"+missionNum, -1).toInt();
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   168
            MissionInfo missionInfo;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   169
            QString script = campfile.value(QString("Mission %1/Script").arg(missionNumber)).toString();
9308
4bddcc1a1450 merge and changed also spacecampaign name
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9294
diff changeset
   170
            missionInfo.script = script;
11958
de66192866d3 Make campaign mission names translatable
Wuzzy <almikes@aol.com>
parents: 11957
diff changeset
   171
            missionInfo.name = campfile.value(QString("Mission %1/Name").arg(missionNumber)).toString();
de66192866d3 Make campaign mission names translatable
Wuzzy <almikes@aol.com>
parents: 11957
diff changeset
   172
            QString scriptPrefix = campaignName+"-"+ script.replace(QString(".lua"),QString(""));
de66192866d3 Make campaign mission names translatable
Wuzzy <almikes@aol.com>
parents: 11957
diff changeset
   173
            missionInfo.realName = m_info->value(scriptPrefix+".name", missionInfo.name).toString();
de66192866d3 Make campaign mission names translatable
Wuzzy <almikes@aol.com>
parents: 11957
diff changeset
   174
            missionInfo.description = m_info->value(scriptPrefix + ".desc",
9290
478aa681e702 this seems to work ok, but I have to clean up the code
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9286
diff changeset
   175
                                            QObject::tr("No description available")).toString();
13811
e3fee73c51a0 Move campaign mission images to share/ instead of hardcoding them into frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 13274
diff changeset
   176
            QString image = campfile.value(QString("Mission %1/Script").arg(missionNumber)).toString().replace(QString(".lua"),QString("@2x.png"));
e3fee73c51a0 Move campaign mission images to share/ instead of hardcoding them into frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 13274
diff changeset
   177
            missionInfo.image = "physfs://Graphics/Missions/Campaign/"+campaignName+"/"+image;
9294
f9b31c3efd35 added deafult image if not one available in campaign
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9292
diff changeset
   178
            if (!QFile::exists(missionInfo.image))
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   179
                missionInfo.image = ":/res/CampaignDefault.png";
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   180
            missionInfoList.append(missionInfo);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   181
        }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   182
    }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 9998
diff changeset
   183
    return missionInfoList;
9290
478aa681e702 this seems to work ok, but I have to clean up the code
Periklis Ntanasis <pntanasis@gmail.com>
parents: 9286
diff changeset
   184
}