2 Copyright (C) 2003, 2010 - Wolfire Games
3 Copyright (C) 2010-2017 - Lugaru contributors (see AUTHORS file)
5 This file is part of Lugaru.
7 Lugaru is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 Lugaru is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with Lugaru. If not, see <http://www.gnu.org/licenses/>.
21 #include "Level/Campaign.hpp"
24 #include "Utils/Folders.hpp"
30 std::vector<CampaignLevel> campaignlevels;
32 bool campaign = false;
35 std::string campaignEndText[3];
37 std::vector<std::string> ListCampaigns()
40 DIR* campaigns = opendir(Folders::getResourcePath("Campaigns").c_str());
41 struct dirent* campaign = NULL;
43 perror(("Problem while loading campaigns from " + Folders::getResourcePath("Campaigns")).c_str());
46 std::vector<std::string> campaignNames;
47 while ((campaign = readdir(campaigns)) != NULL) {
48 std::string name(campaign->d_name);
49 if (name.length() < 5) {
52 if (!name.compare(name.length() - 4, 4, ".txt")) {
53 campaignNames.push_back(name.substr(0, name.length() - 4));
62 if (!Account::hasActive()) {
65 std::ifstream ipstream(Folders::getResourcePath("Campaigns/" + Account::active().getCurrentCampaign() + ".txt"));
66 if (!ipstream.good()) {
67 if (Account::active().getCurrentCampaign() == "main") {
68 cerr << "Could not find main campaign!" << endl;
71 cerr << "Could not find campaign \"" << Account::active().getCurrentCampaign() << "\", falling back to main." << endl;
72 Account::active().setCurrentCampaign("main");
73 return LoadCampaign();
75 ipstream.ignore(256, ':');
77 ipstream >> numlevels;
78 campaignlevels.clear();
79 for (int i = 0; i < numlevels; i++) {
82 campaignlevels.push_back(cl);
84 campaignEndText[0] = "Congratulations!";
85 campaignEndText[1] = string("You have completed ") + Account::active().getCurrentCampaign() + " campaign";
86 campaignEndText[2] = "and restored peace to the island of Lugaru.";
87 if (ipstream.good()) {
88 ipstream.ignore(256, ':');
89 getline(ipstream, campaignEndText[0]);
90 getline(ipstream, campaignEndText[1]);
91 getline(ipstream, campaignEndText[2]);
95 std::ifstream test(Folders::getResourcePath("Textures/" + Account::active().getCurrentCampaign() + "/World.png"));
97 Mainmenuitems[7].load("Textures/" + Account::active().getCurrentCampaign() + "/World.png", 0);
99 Mainmenuitems[7].load("Textures/World.png", 0);
102 if (Account::active().getCampaignChoicesMade() == 0) {
103 Account::active().setCampaignScore(0);
104 Account::active().resetFasttime();
108 CampaignLevel::CampaignLevel()
116 int CampaignLevel::getStartX()
118 return 30 + 120 + location.x * 400 / 512;
121 int CampaignLevel::getStartY()
123 return 30 + 30 + (512 - location.y) * 400 / 512;
126 int CampaignLevel::getEndX()
128 return getStartX() + width;
131 int CampaignLevel::getEndY()
133 return getStartY() + width;
136 XYZ CampaignLevel::getCenter()
139 center.x = getStartX() + width / 2;
140 center.y = getStartY() + width / 2;
144 int CampaignLevel::getWidth()
149 istream& CampaignLevel::operator<<(istream& is)
157 for (size_t pos = description.find('_'); pos != string::npos; pos = description.find('_', pos)) {
158 description.replace(pos, 1, 1, ' ');
165 for (int j = 0; j < numnext; j++) {
168 nextlevel.push_back(next - 1);