OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
gamemenu.h
Go to the documentation of this file.
1#pragma once
2
3#include <Tempest/Widget>
4#include <Tempest/Texture2d>
5#include <Tempest/Timer>
6#include <Tempest/Color>
7
8#include <zenkit/DaedalusVm.hh>
9#include <zenkit/addon/daedalus.hh>
10
11#include <memory>
12
13#include "game/savegameheader.h"
14#include "game/questlog.h"
15#include "utils/keycodec.h"
16
17class Gothic;
18class MenuRoot;
19class Npc;
20class GthFont;
21
22class GameMenu : public Tempest::Widget {
23 public:
24 GameMenu(MenuRoot& owner, KeyCodec& keyCodec, zenkit::DaedalusVm& vm, std::string_view menuSection, KeyCodec::Action keyClose);
25 ~GameMenu() override;
26 void resetVm(zenkit::DaedalusVm* vm);
27
28 void setPlayer(const Npc& pl);
29
31 void onTick();
32 void processMusicTheme();
33
34 KeyCodec::Action keyClose() const { return kClose; }
35
36 protected:
37 void paintEvent (Tempest::PaintEvent& event) override;
38 void resizeEvent(Tempest::SizeEvent& event) override;
39
40 private:
41 enum class QuestStat : uint8_t {
42 Current = uint8_t(QuestLog::Status::Running),
43 Old = uint8_t(QuestLog::Status::Failed),
44 Failed = uint8_t(QuestLog::Status::Success),
45 Log = uint8_t(5),
46 };
47
48 struct ListContentDialog;
49 struct ListViewDialog;
50 struct KeyEditDialog;
51 struct SavNameDialog;
52 struct Item {
53 std::string name;
54 std::shared_ptr<zenkit::IMenuItem> handle={};
55 const Tempest::Texture2d* img=nullptr;
56 SaveGameHeader savHdr;
57 Tempest::Pixmap savPriview;
58 int32_t value = 0;
59 int32_t scroll = 0;
60 bool visible = true;
61 };
62
63 MenuRoot& owner;
64 KeyCodec& keyCodec;
65 zenkit::DaedalusVm* vm = nullptr;
66 Tempest::Timer timer;
67 const Tempest::Texture2d* up = nullptr;
68 const Tempest::Texture2d* down = nullptr;
69
70 std::shared_ptr<zenkit::IMenu> menu={};
71 const Tempest::Texture2d* back=nullptr;
72 const Tempest::Texture2d* slider=nullptr;
73 Tempest::Texture2d savThumb;
74 std::vector<char> textBuf;
75
76 Item hItems[zenkit::IMenu::item_count];
77 Item* ctrlInput = nullptr;
78 uint32_t curItem=0;
79 bool exitFlag=false;
80 bool closeFlag=false;
81
83
84 void drawItem(Tempest::Painter& p, Item& it);
85 void drawSlider(Tempest::Painter& p, Item& it, int x, int y, int w, int h);
86 void drawQuestList(Tempest::Painter& p, Item& it, int x, int y, int w, int h,
87 const QuestLog& log, QuestStat st);
88
89 Item* selectedItem();
90 Item* selectedNextItem(Item* cur);
91 Item* selectedContentItem(Item* it);
92 void setSelection(int cur, int seek=1);
93 void initItems();
94 void getText(const Item &it, std::vector<char>& out);
95 const GthFont& getTextFont(const Item &it);
96
97 static bool isSelectable(const std::shared_ptr<zenkit::IMenuItem>& item);
98 static bool isHorSelectable(const std::shared_ptr<zenkit::IMenuItem>& item);
99 static bool isEnabled(const std::shared_ptr<zenkit::IMenuItem>& item);
100 static bool isHidden(const std::shared_ptr<zenkit::IMenuItem>& item);
101
102 void exec (Item &item, int slideDx, KeyCodec::Action hint);
103 void execSingle (Item &it, int slideDx, KeyCodec::Action hint);
104 void execChgOption(Item &item, int slideDx);
105 void execSaveGame (const Item& item);
106 bool execLoadGame (const Item& item);
107 void execCommands (std::string str, bool isClick, KeyCodec::Action hint);
108
109 bool implUpdateSavThumb(Item& sel);
110 size_t saveSlotId(const Item& sel);
111
112 std::string_view strEnum(std::string_view en, int id, std::vector<char> &out);
113 size_t strEnumSize(std::string_view en);
114
115 void updateValues();
116 void updateItem (Item &item);
117 void updateSavTitle(Item& sel);
118 void updateSavThumb(Item& sel);
119 void updateVideo();
120 void setDefaultKeys(std::string_view preset);
121
122 static QuestStat toStatus(std::string_view str);
123 static bool isCompatible(const QuestLog::Quest& q, QuestStat st);
124 static int32_t numQuests(const QuestLog* q, QuestStat st);
125
126 void set(std::string_view item, const Tempest::Texture2d* value);
127 void set(std::string_view item, const uint32_t value);
128 void set(std::string_view item, const int32_t value);
129 void set(std::string_view item, const int32_t value, const int32_t max);
130 void set(std::string_view item, std::string_view value);
131 };
void setPlayer(const Npc &pl)
void onKeyboard(KeyCodec::Action k)
Definition gamemenu.cpp:594
~GameMenu() override
Definition gamemenu.cpp:312
void resizeEvent(Tempest::SizeEvent &event) override
Definition gamemenu.cpp:590
void paintEvent(Tempest::PaintEvent &event) override
Definition gamemenu.cpp:381
void resetVm(zenkit::DaedalusVm *vm)
Definition gamemenu.cpp:318
void onTick()
Definition gamemenu.cpp:627
KeyCodec::Action keyClose() const
Definition gamemenu.h:34
void processMusicTheme()
Definition gamemenu.cpp:652
Definition item.h:14
Definition npc.h:25