• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Return-To-The-Roots / s25client / 19143370511

06 Nov 2025 04:56PM UTC coverage: 50.065%. First build
19143370511

Pull #1720

github

web-flow
Merge a3d378e6e into 7333cc249
Pull Request #1720: Add leather addon

304 of 1117 new or added lines in 66 files covered. (27.22%)

22729 of 45399 relevant lines covered (50.06%)

36159.55 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/libs/s25main/ingameWindows/iwBuildOrder.cpp
1
// Copyright (C) 2005 - 2021 Settlers Freaks (sf-team at siedler25.org)
2
//
3
// SPDX-License-Identifier: GPL-2.0-or-later
4

5
#include "iwBuildOrder.h"
6
#include "AddonHelperFunctions.h"
7
#include "GamePlayer.h"
8
#include "GlobalGameSettings.h"
9
#include "LeatherLoader.h"
10
#include "Loader.h"
11
#include "WindowManager.h"
12
#include "WineLoader.h"
13
#include "addons/const_addons.h"
14
#include "controls/ctrlComboBox.h"
15
#include "controls/ctrlImage.h"
16
#include "controls/ctrlList.h"
17
#include "network/GameClient.h"
18
#include "world/GameWorldBase.h"
19
#include "world/GameWorldViewer.h"
20
#include "gameData/BuildingConsts.h"
21
#include "gameData/const_gui_ids.h"
22

NEW
23
void iwBuildOrder::fillBuildOrder(const BuildOrders& build_order)
×
24
{
NEW
25
    pendingBuildOrder.assign(build_order.begin(), build_order.end());
×
NEW
26
    helpers::erase_if(pendingBuildOrder, makeIsUnusedBuilding(gwv.GetWorld().GetGGS()));
×
27
}
×
28

29
iwBuildOrder::iwBuildOrder(const GameWorldViewer& gwv)
×
30
    : TransmitSettingsIgwAdapter(CGI_BUILDORDER, IngameWindow::posLastOrCenter, Extent(320, 300),
×
31
                                 _("Building sequence"), LOADER.GetImageN("io", 5)),
×
32
      gwv(gwv)
×
33
{
34
    ctrlList* list = AddList(0, DrawPoint(15, 60), Extent(150, 220), TextureColor::Grey, NormalFont);
×
35

NEW
36
    fillBuildOrder(GAMECLIENT.visual_settings.build_order);
×
37

38
    for(const auto buildOrder : pendingBuildOrder)
×
39
        list->AddString(_(BUILDING_NAMES[buildOrder])); //-V807
×
40

41
    // Nach ganz oben
42
    AddImageButton(1, DrawPoint(250, 194), Extent(48, 20), TextureColor::Grey, LOADER.GetImageN("io", 215), _("Top"));
×
43
    // Hoch
44
    AddImageButton(2, DrawPoint(250, 216), Extent(48, 20), TextureColor::Grey, LOADER.GetImageN("io", 33), _("Up"));
×
45
    // Runter
46
    AddImageButton(3, DrawPoint(250, 238), Extent(48, 20), TextureColor::Grey, LOADER.GetImageN("io", 34), _("Down"));
×
47
    // Nach ganz unten
48
    AddImageButton(4, DrawPoint(250, 260), Extent(48, 20), TextureColor::Grey, LOADER.GetImageN("io", 216),
×
49
                   _("Bottom"));
×
50

51
    // Bild der Auswahl
52
    AddImage(5, DrawPoint(240, 150), LOADER.GetBuildingTex(gwv.GetPlayer().nation, pendingBuildOrder[0]));
×
53

54
    ctrlComboBox* combo = AddComboBox(6, DrawPoint(15, 30), Extent(290, 20), TextureColor::Grey, NormalFont, 100);
×
55
    combo->AddString(_("Sequence of given order"));   // "Reihenfolge der Auftraggebung"
×
56
    combo->AddString(_("After the following order")); // "Nach folgender Reihenfolge"
×
57

58
    // Eintrag in Combobox auswählen
59
    useCustomBuildOrder = GAMECLIENT.visual_settings.useCustomBuildOrder;
×
60
    combo->SetSelection(useCustomBuildOrder ? 1 : 0);
×
61

62
    // Standard
63
    AddImageButton(10, DrawPoint(200, 250), Extent(48, 30), TextureColor::Grey, LOADER.GetImageN("io", 191),
×
64
                   _("Default"));
×
65

66
    list->SetSelection(0);
×
67
}
×
68

69
void iwBuildOrder::TransmitSettings()
×
70
{
71
    if(GAMECLIENT.IsReplayModeOn())
×
72
        return;
×
73
    // Wurden Einstellungen geändert?
74
    if(settings_changed)
×
75
    {
76
        // Einstellungen speichern
77
        useCustomBuildOrder = GetCtrl<ctrlComboBox>(6)->GetSelection() != 0u;
×
78
        BuildOrders transmitPendingBuildOrder;
79
        unsigned int i = 0;
×
80
        for(; i < pendingBuildOrder.size(); i++)
×
81
            transmitPendingBuildOrder[i] = pendingBuildOrder[i];
×
82

83
        if(!wineaddon::isAddonActive(gwv.GetWorld()))
×
84
        {
85
            transmitPendingBuildOrder[i++] = BuildingType::Vineyard;
×
86
            transmitPendingBuildOrder[i++] = BuildingType::Winery;
×
87
            transmitPendingBuildOrder[i++] = BuildingType::Temple;
×
88
        }
89

90
        if(!gwv.GetWorld().GetGGS().isEnabled(AddonId::CHARBURNER))
×
91
            transmitPendingBuildOrder[i++] = BuildingType::Charburner;
×
92

NEW
93
        if(!leatheraddon::isAddonActive(gwv.GetWorld()))
×
94
        {
NEW
95
            transmitPendingBuildOrder[i++] = BuildingType::Skinner;
×
NEW
96
            transmitPendingBuildOrder[i++] = BuildingType::Tannery;
×
NEW
97
            transmitPendingBuildOrder[i++] = BuildingType::LeatherWorks;
×
98
        }
99

100
        if(GAMECLIENT.ChangeBuildOrder(useCustomBuildOrder, transmitPendingBuildOrder))
×
101
        {
102
            GAMECLIENT.visual_settings.build_order = transmitPendingBuildOrder;
×
103
            GAMECLIENT.visual_settings.useCustomBuildOrder = useCustomBuildOrder;
×
104
            settings_changed = false;
×
105
        }
106
    }
107
}
108

109
void iwBuildOrder::Msg_ListSelectItem(const unsigned ctrl_id, const int selection)
×
110
{
111
    if(GAMECLIENT.IsReplayModeOn())
×
112
        return;
×
113
    switch(ctrl_id)
×
114
    {
115
        default: break;
×
116

117
        case 0:
×
118
        {
119
            GetCtrl<ctrlImage>(5)->SetImage(
×
120
              LOADER.GetBuildingTex(gwv.GetPlayer().nation, pendingBuildOrder[selection]));
×
121
        }
122
        break;
×
123
    }
124
}
125

126
void iwBuildOrder::Msg_ComboSelectItem(unsigned ctrl_id, unsigned selection)
×
127
{
128
    if(ctrl_id == 6)
×
129
    {
130
        useCustomBuildOrder = selection != 0u;
×
131
        settings_changed = true;
×
132
    }
133
}
×
134

135
void iwBuildOrder::Msg_ButtonClick(const unsigned ctrl_id)
×
136
{
137
    if(GAMECLIENT.IsReplayModeOn())
×
138
        return;
×
139
    auto* list = GetCtrl<ctrlList>(0);
×
140

141
    if(!list->GetSelection())
×
142
        return;
×
143

144
    unsigned selection = *list->GetSelection();
×
145
    unsigned numOptions = list->GetNumLines();
×
146

147
    // Auswahl gültig?
148

149
    switch(ctrl_id)
×
150
    {
151
        default: break;
×
152

153
        case 1: // Nach ganz oben
×
154
        {
155
            while(selection > 0)
×
156
            {
157
                std::swap(pendingBuildOrder[selection - 1], pendingBuildOrder[selection]);
×
158
                list->Swap(selection - 1, selection);
×
159
                --selection;
×
160
            }
161
            settings_changed = true;
×
162
        }
163
        break;
×
164
        case 2: // Hoch
×
165
        {
166
            if(selection > 0)
×
167
            {
168
                std::swap(pendingBuildOrder[selection - 1], pendingBuildOrder[selection]);
×
169
                list->Swap(selection - 1, selection);
×
170
            }
171
            settings_changed = true;
×
172
        }
173
        break;
×
174
        case 3: // Runter
×
175
        {
176
            if(selection < numOptions - 1u)
×
177
            {
178
                std::swap(pendingBuildOrder[selection + 1], pendingBuildOrder[selection]);
×
179
                list->Swap(selection + 1, selection);
×
180
            }
181
            settings_changed = true;
×
182
        }
183
        break;
×
184
        case 4: // Nach ganz unten
×
185
        {
186
            while(selection < numOptions - 1u)
×
187
            {
188
                std::swap(pendingBuildOrder[selection + 1], pendingBuildOrder[selection]);
×
189
                list->Swap(selection + 1, selection);
×
190
                ++selection;
×
191
            }
192
            settings_changed = true;
×
193
        }
194
        break;
×
195
        case 10: // Standardwerte
×
196
        {
197
            // Baureihenfolge vom Spieler kopieren
NEW
198
            fillBuildOrder(GAMECLIENT.default_settings.build_order);
×
199

200
            auto* list = GetCtrl<ctrlList>(0);
×
201
            list->DeleteAllItems();
×
202

203
            // Liste füllen
204
            for(unsigned char i = 0; i < 31; ++i)
×
205
                list->AddString(_(BUILDING_NAMES[pendingBuildOrder[i]]));
×
206
            list->SetSelection(0);
×
207

208
            GetCtrl<ctrlImage>(5)->SetImage(LOADER.GetBuildingTex(gwv.GetPlayer().nation, pendingBuildOrder[0]));
×
209

210
            settings_changed = true;
×
211
        }
212
        break;
×
213
    }
214
}
215

216
void iwBuildOrder::UpdateSettings()
×
217
{
218
    if(GAMECLIENT.IsReplayModeOn())
×
219
    {
220
        gwv.GetPlayer().FillVisualSettings(GAMECLIENT.visual_settings);
×
NEW
221
        fillBuildOrder(GAMECLIENT.visual_settings.build_order);
×
222
        useCustomBuildOrder = GAMECLIENT.visual_settings.useCustomBuildOrder;
×
223
    }
224
    GetCtrl<ctrlComboBox>(6)->SetSelection(useCustomBuildOrder ? 1 : 0);
×
225
    for(unsigned char i = 0; i < pendingBuildOrder.size(); ++i)
×
226
        GetCtrl<ctrlList>(0)->SetString(_(BUILDING_NAMES[pendingBuildOrder[i]]), i);
×
227
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc