mirror of
https://github.com/open-goal/jak-project
synced 2026-06-10 04:54:31 -04:00
a7eee4fdc9
* fix typo * more typo * shorten discord rpc text * allow expanding enums after the fact (untested) * make `game_text` work similar to subtitles * update progress decomp * update some types + `do-not-decompile` in bitfield * fixes and fall back to original progress code * update `progress` decomp with new enums * update config files * fix enums and debug menu * always allocate (but not use) a lot of particles * small rework to display mode options * revert resolution/aspect-ratio symbol mess * begin the override stuff * make `progress-draw` more readable * more fixes * codacy good boy points * first step overriding code * finish progress overrides, game options menu fully functional! * minor fixes * Update game.gp * Update sparticle-launcher.gc * clang * change camera controls text * oops * some cleanup * derp * nice job * implement menu scrolling lol * make scrollable menus less cramped, fix arrows * make some carousell things i guess * add msaa carousell to test * oops * Update progress-pc.gc * make `pc-get-screen-size` (untested) * resolution menu * input fixes * return when selecting resolution * scroll fixes * Update progress-pc.gc * add "fit to screen" button * bug * complete resolutions menu * aspect ratio menu * subtitles language * subtitle speaker * final adjustments * ref test * fix tests * fix ref! * reduce redundancy a bit * fix mem leaks? * save settings on progress exit * fix init reorder * remove unused code * rename goal project-like files to the project extension * sha display toggle * aspect ratio settings fixes * dont store text db's in compiler * properly save+load native aspect stuff
63 lines
1.8 KiB
C++
63 lines
1.8 KiB
C++
#pragma once
|
|
#include "common/util/FontUtils.h"
|
|
#include "common/util/Assert.h"
|
|
#include <string>
|
|
#include <map>
|
|
#include <unordered_map>
|
|
#include <unordered_set>
|
|
#include <memory>
|
|
|
|
class GameTextBank {
|
|
public:
|
|
GameTextBank(int lang_id) : m_lang_id(lang_id) {}
|
|
|
|
int lang() const { return m_lang_id; }
|
|
const std::map<int, std::string>& lines() const { return m_lines; }
|
|
|
|
bool line_exists(int id) const { return m_lines.find(id) != m_lines.end(); }
|
|
std::string line(int id) { return m_lines.at(id); }
|
|
void set_line(int id, std::string line) { m_lines[id] = line; }
|
|
|
|
private:
|
|
int m_lang_id;
|
|
std::map<int, std::string> m_lines;
|
|
};
|
|
|
|
/*!
|
|
* The text database contains a text bank for each language for each text group.
|
|
* Each text bank contains a list of text lines. Very simple.
|
|
*/
|
|
class GameTextDB {
|
|
public:
|
|
const std::unordered_map<std::string, std::map<int, std::shared_ptr<GameTextBank>>>& groups()
|
|
const {
|
|
return m_banks;
|
|
}
|
|
const std::map<int, std::shared_ptr<GameTextBank>>& banks(std::string group) const {
|
|
return m_banks.at(group);
|
|
}
|
|
|
|
bool bank_exists(std::string group, int id) const {
|
|
if (m_banks.find(group) == m_banks.end())
|
|
return false;
|
|
return m_banks.at(group).find(id) != m_banks.at(group).end();
|
|
}
|
|
|
|
std::shared_ptr<GameTextBank> add_bank(std::string group, std::shared_ptr<GameTextBank> bank) {
|
|
ASSERT(!bank_exists(group, bank->lang()));
|
|
m_banks[group][bank->lang()] = bank;
|
|
return bank;
|
|
}
|
|
std::shared_ptr<GameTextBank> bank_by_id(std::string group, int id) {
|
|
if (!bank_exists(group, id)) {
|
|
return nullptr;
|
|
}
|
|
return m_banks.at(group).at(id);
|
|
}
|
|
|
|
private:
|
|
std::unordered_map<std::string, std::map<int, std::shared_ptr<GameTextBank>>> m_banks;
|
|
};
|
|
|
|
void compile_game_text(const std::vector<std::string>& filenames, GameTextVersion text_ver);
|