blob: 86b71bcbc2c6a4de95b7b25a964bead9d52a2044 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
// SPDX-License-Identifier: BSD-2-Clause
// Copyright (c) 2025 Kirill Dmitrievich
// File: splash.cc
// Description: Randomized text messages
#include "shared/pch.hh"
#include "shared/splash.hh"
#include "core/io/physfs.hh"
constexpr static std::string_view SPLASHES_FILENAME_CLIENT = "misc/splashes_client.txt";
constexpr static std::string_view SPLASHES_FILENAME_SERVER = "misc/splashes_server.txt";
constexpr static std::size_t SPLASH_SERVER_MAX_LENGTH = 32;
static std::mt19937_64 splash_random;
static std::vector<std::string> splash_lines;
static std::string sanitize_line(const std::string& line)
{
std::string result;
for(auto chr : line) {
if(chr != '\r' && chr != '\n') {
result.push_back(chr);
}
}
return result;
}
static void splash_init_filename(std::string_view filename)
{
if(auto file = PHYSFS_openRead(std::string(filename).c_str())) {
auto source = std::string(PHYSFS_fileLength(file), char(0x00));
PHYSFS_readBytes(file, source.data(), source.size());
PHYSFS_close(file);
std::string line;
std::istringstream stream(source);
while(std::getline(stream, line))
splash_lines.push_back(sanitize_line(line));
splash_random.seed(std::random_device()());
}
else {
splash_lines.push_back(std::format("{}: {}", filename, physfs::last_error()));
splash_random.seed(std::random_device()());
}
}
void splash::init_client(void)
{
splash_init_filename(SPLASHES_FILENAME_CLIENT);
}
void splash::init_server(void)
{
splash_init_filename(SPLASHES_FILENAME_SERVER);
// Server browser GUI should be able to display
// these splash messages without text clipping over
for(int i = 0; i < splash_lines.size(); i++) {
splash_lines[i] = splash_lines[i].substr(0, SPLASH_SERVER_MAX_LENGTH);
}
}
std::string_view splash::get(void)
{
std::uniform_int_distribution<std::size_t> dist(0, splash_lines.size() - 1);
return splash_lines.at(dist(splash_random));
}
|