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

Return-To-The-Roots / s25client / 5111912776

pending completion
5111912776

Pull #1592

github

web-flow
Merge aa25149c0 into 2c095fc86
Pull Request #1592: Update translations

13 of 13 new or added lines in 4 files covered. (100.0%)

21671 of 42980 relevant lines covered (50.42%)

30486.29 hits per line

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

0.0
/libs/s25main/GameManager.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 "GameManager.h"
6
#include "GlobalVars.h"
7
#include "Loader.h"
8
#include "RTTR_Assert.h"
9
#include "RttrConfig.h"
10
#include "Settings.h"
11
#include "WindowManager.h"
12
#include "desktops/dskLobby.h"
13
#include "desktops/dskMainMenu.h"
14
#include "desktops/dskSplash.h"
15
#include "drivers/AudioDriverWrapper.h"
16
#include "drivers/VideoDriverWrapper.h"
17
#include "files.h"
18
#include "network/GameClient.h"
19
#include "network/GameServer.h"
20
#include "ogl/glArchivItem_Bitmap.h"
21
#include "liblobby/LobbyClient.h"
22
#include "libsiedler2/Archiv.h"
23
#include "s25util/Log.h"
24
#include "s25util/error.h"
25
#include <boost/pointer_cast.hpp>
26

27
GameManager::GameManager(Log& log, Settings& settings, VideoDriverWrapper& videoDriver, AudioDriverWrapper& audioDriver,
×
28
                         WindowManager& windowManager)
×
29
    : log_(log), settings_(settings), videoDriver_(videoDriver), audioDriver_(audioDriver),
30
      windowManager_(windowManager)
×
31
{
32
    ResetAverageGFPS();
×
33
}
×
34

35
/**
36
 *  Spiel starten
37
 */
38
bool GameManager::Start()
×
39
{
40
    // Einstellungen laden
41
    settings_.Load();
×
42

43
    /// Videotreiber laden
44
    if(!videoDriver_.LoadDriver(settings_.driver.video))
×
45
    {
46
        s25util::error(_("Video driver couldn't be loaded!"));
×
47
        return false;
×
48
    }
49

50
    // Fenster erstellen
51
    const auto screenSize =
×
52
      settings_.video.fullscreen ? settings_.video.fullscreenSize : settings_.video.windowedSize; //-V807
×
53
    if(!videoDriver_.CreateScreen(screenSize, settings_.video.fullscreen))
×
54
        return false;
×
55
    videoDriver_.setTargetFramerate(settings_.video.framerate);
×
56
    videoDriver_.SetMouseWarping(settings_.global.smartCursor);
×
57

58
    /// Audiodriver laden
59
    if(!audioDriver_.LoadDriver(settings_.driver.audio))
×
60
    {
61
        s25util::warning(_("Audio driver couldn't be loaded!"));
×
62
        // return false;
63
    }
64

65
    /// Lautstärken gleich mit setzen
66
    audioDriver_.SetMasterEffectVolume(settings_.sound.effectsVolume); //-V807
×
67
    audioDriver_.SetMusicVolume(settings_.sound.musicVolume);
×
68

69
    // Treibereinstellungen abspeichern
70
    settings_.Save();
×
71

72
    log_.write(_("\nStarting the game\n"));
×
73
    return ShowSplashscreen();
×
74
}
75

76
/**
77
 *  Spiel beenden.
78
 */
79
void GameManager::Stop()
×
80
{
81
    GAMECLIENT.Stop();
×
82
    GAMESERVER.Stop();
×
83
    LOBBYCLIENT.Stop();
×
84
    // Global Einstellungen speichern
85
    settings_.Save();
×
86

87
    // Fenster beenden
88
    videoDriver_.DestroyScreen();
×
89
}
×
90

91
/**
92
 *  Hauptschleife.
93
 */
94
bool GameManager::Run()
×
95
{
96
    // Nachrichtenschleife
97
    if(!videoDriver_.Run())
×
98
        GLOBALVARS.notdone = false;
×
99

100
    LOBBYCLIENT.Run();
×
101

102
    // Get this before the run so we know if we are currently skipping
103
    const unsigned targetSkipGF = GAMECLIENT.skiptogf;
×
104
    GAMECLIENT.Run();
×
105
    GAMESERVER.Run();
×
106

107
    if(targetSkipGF)
×
108
    {
109
        // if we skip drawing write a comment every 5k gf
110
        unsigned current_time = videoDriver_.GetTickCount();
×
111
        const unsigned curGF = GAMECLIENT.GetGFNumber();
×
112
        if(targetSkipGF > curGF)
×
113
        {
114
            if(curGF % 5000 == 0)
×
115
            {
116
                if(lastSkipReport)
×
117
                {
118
                    // Elapsed time in ms
119
                    const auto timeDiff = static_cast<double>(current_time - lastSkipReport->time);
×
120
                    const unsigned numGFPassed = curGF - lastSkipReport->gf;
×
121
                    log_.write(_("jumping to gf %i, now at gf %i, time for last 5k gf: %.3f s, avg gf time %.3f ms \n"))
×
122
                      % targetSkipGF % curGF % (timeDiff / 1000) % (timeDiff / numGFPassed);
×
123
                } else
124
                    log_.write(_("jumping to gf %i, now at gf %i \n")) % targetSkipGF % curGF;
×
125
                lastSkipReport = SkipReport{current_time, curGF};
×
126
            } else if(!lastSkipReport)
×
127
                lastSkipReport = SkipReport{current_time, curGF};
×
128
        } else
129
        {
130
            // Jump just completed
131
            RTTR_Assert(!GAMECLIENT.skiptogf);
×
132
            if(lastSkipReport)
×
133
            {
134
                const auto timeDiff = static_cast<double>(current_time - lastSkipReport->time);
×
135
                const unsigned numGFPassed = curGF - lastSkipReport->gf;
×
136
                log_.write(_("jump to gf %i complete, time for last %i gf: %.3f s, avg gf time %.3f ms \n"))
×
137
                  % targetSkipGF % numGFPassed % (timeDiff / 1000) % (timeDiff / numGFPassed);
×
138
                lastSkipReport.reset();
×
139
            } else
140
            {
141
                log_.write(_("jump to gf %1% complete\n")) % targetSkipGF;
×
142
            }
143
        }
144
    } else
145
    {
146
        videoDriver_.ClearScreen();
×
147
        windowManager_.Draw();
×
148
        videoDriver_.SwapBuffers();
×
149
    }
150
    gfCounter_.update();
×
151

152
    // Fenstermanager aufräumen
153
    if(!GLOBALVARS.notdone)
×
154
        windowManager_.CleanUp();
×
155

156
    return GLOBALVARS.notdone;
×
157
}
158

159
bool GameManager::ShowSplashscreen()
×
160
{
161
    libsiedler2::Archiv arSplash;
×
162
    if(!LOADER.Load(arSplash, RTTRCONFIG.ExpandPath(s25::files::splash)))
×
163
        return false;
×
164
    auto image = boost::dynamic_pointer_cast<glArchivItem_Bitmap>(arSplash.release(0));
×
165
    if(!image)
×
166
    {
167
        s25util::error(_("Splash screen couldn't be loaded!"));
×
168
        return false;
×
169
    }
170
    windowManager_.Switch(std::make_unique<dskSplash>(std::move(image)));
×
171
    return true;
×
172
}
173

174
/**
175
 *  zeigt das Hauptmenü.
176
 */
177
bool GameManager::ShowMenu()
×
178
{
179
    GAMECLIENT.Stop();
×
180
    GAMESERVER.Stop();
×
181

182
    if(LOBBYCLIENT.IsLoggedIn())
×
183
        // Lobby zeigen
184
        windowManager_.Switch(std::make_unique<dskLobby>());
×
185
    else
186
        // Hauptmenü zeigen
187
        windowManager_.Switch(std::make_unique<dskMainMenu>());
×
188

189
    return true;
×
190
}
191

192
void GameManager::ResetAverageGFPS()
×
193
{
194
    gfCounter_ = FrameCounter(FrameCounter::clock::duration::max()); // Never update
×
195
}
×
196

197
static GameManager* globalGameManager = nullptr;
198

199
GameManager& getGlobalGameManager()
×
200
{
201
    return *globalGameManager;
×
202
}
203
void setGlobalGameManager(GameManager* gameManager)
×
204
{
205
    globalGameManager = gameManager;
×
206
}
×
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