1
0
Fork 0

Codechange: strongly type StoryPageID and StoryPageElementID

pull/13511/head
Rubidium 2025-02-01 00:28:08 +01:00 committed by rubidium42
parent 5ca5790ac8
commit 3aa60fd479
5 changed files with 13 additions and 11 deletions

View File

@ -56,7 +56,7 @@ static inline bool StoryPageElementTypeRequiresText(StoryPageElementType type)
c, title != nullptr ? title->GetEncodedText() : std::string{})) return STORY_PAGE_INVALID; c, title != nullptr ? title->GetEncodedText() : std::string{})) return STORY_PAGE_INVALID;
/* In case of test-mode, we return StoryPageID 0 */ /* In case of test-mode, we return StoryPageID 0 */
return static_cast<StoryPageID>(0); return StoryPageID::Begin();
} }
/* static */ StoryPageElementID ScriptStoryPage::NewElement(StoryPageID story_page_id, StoryPageElementType type, SQInteger reference, Text *text) /* static */ StoryPageElementID ScriptStoryPage::NewElement(StoryPageID story_page_id, StoryPageElementType type, SQInteger reference, Text *text)
@ -103,7 +103,7 @@ static inline bool StoryPageElementTypeRequiresText(StoryPageElementType type)
encoded_text)) return STORY_PAGE_ELEMENT_INVALID; encoded_text)) return STORY_PAGE_ELEMENT_INVALID;
/* In case of test-mode, we return StoryPageElementID 0 */ /* In case of test-mode, we return StoryPageElementID 0 */
return static_cast<StoryPageElementID>(0); return StoryPageElementID::Begin();
} }
/* static */ bool ScriptStoryPage::UpdateElement(StoryPageElementID story_page_element_id, SQInteger reference, Text *text) /* static */ bool ScriptStoryPage::UpdateElement(StoryPageElementID story_page_element_id, SQInteger reference, Text *text)

View File

@ -17,8 +17,8 @@
#include "vehicle_type.h" #include "vehicle_type.h"
#include "core/pool_type.hpp" #include "core/pool_type.hpp"
typedef Pool<StoryPageElement, StoryPageElementID, 64, 64000> StoryPageElementPool; using StoryPageElementPool = Pool<StoryPageElement, StoryPageElementID, 64, StoryPageElementID::End().base()>;
typedef Pool<StoryPage, StoryPageID, 64, 64000> StoryPagePool; using StoryPagePool = Pool<StoryPage, StoryPageID, 64, StoryPageID::End().base()>;
extern StoryPageElementPool _story_page_element_pool; extern StoryPageElementPool _story_page_element_pool;
extern StoryPagePool _story_page_pool; extern StoryPagePool _story_page_pool;
extern uint32_t _story_page_element_next_sort_value; extern uint32_t _story_page_element_next_sort_value;

View File

@ -251,11 +251,11 @@ protected:
for (const StoryPage *p : this->story_pages) { for (const StoryPage *p : this->story_pages) {
bool current_page = p->index == this->selected_page_id; bool current_page = p->index == this->selected_page_id;
if (!p->title.empty()) { if (!p->title.empty()) {
list.push_back(MakeDropDownListStringItem(p->title, p->index, current_page)); list.push_back(MakeDropDownListStringItem(p->title, p->index.base(), current_page));
} else { } else {
/* No custom title => use a generic page title with page number. */ /* No custom title => use a generic page title with page number. */
SetDParam(0, page_num); SetDParam(0, page_num);
list.push_back(MakeDropDownListStringItem(STR_STORY_BOOK_GENERIC_PAGE_ITEM, p->index, current_page)); list.push_back(MakeDropDownListStringItem(STR_STORY_BOOK_GENERIC_PAGE_ITEM, p->index.base(), current_page));
} }
page_num++; page_num++;
} }
@ -633,7 +633,7 @@ public:
void SetSelectedPage(StoryPageID page_index) void SetSelectedPage(StoryPageID page_index)
{ {
if (this->selected_page_id != page_index) { if (this->selected_page_id != page_index) {
if (this->active_button_id) ResetObjectToPlace(); if (this->active_button_id != 0) ResetObjectToPlace();
this->active_button_id = INVALID_STORY_PAGE_ELEMENT; this->active_button_id = INVALID_STORY_PAGE_ELEMENT;
this->selected_page_id = page_index; this->selected_page_id = page_index;
this->RefreshSelectedPage(); this->RefreshSelectedPage();

View File

@ -11,15 +11,16 @@
#define STORY_TYPE_H #define STORY_TYPE_H
#include "core/enum_type.hpp" #include "core/enum_type.hpp"
#include "core/pool_type.hpp"
typedef uint16_t StoryPageElementID; ///< ID of a story page element using StoryPageElementID = PoolID<uint16_t, struct StoryPageElementIDTag, 64000, 0xFFFF>; ///< ID of a story page element
typedef uint16_t StoryPageID; ///< ID of a story page using StoryPageID = PoolID<uint16_t, struct StoryPageIDTag, 64000, 0xFFFF>; ///< ID of a story page
struct StoryPageElement; struct StoryPageElement;
struct StoryPage; struct StoryPage;
enum StoryPageElementType : uint8_t; enum StoryPageElementType : uint8_t;
static const StoryPageElementID INVALID_STORY_PAGE_ELEMENT = 0xFFFF; ///< Constant representing a non-existing story page element. static constexpr StoryPageElementID INVALID_STORY_PAGE_ELEMENT = StoryPageElementID::Invalid(); ///< Constant representing a non-existing story page element.
static const StoryPageID INVALID_STORY_PAGE = 0xFFFF; ///< Constant representing a non-existing story page. static constexpr StoryPageID INVALID_STORY_PAGE = StoryPageID::Invalid(); ///< Constant representing a non-existing story page.
#endif /* STORY_TYPE_H */ #endif /* STORY_TYPE_H */

View File

@ -36,6 +36,7 @@ void InputLoop();
void InvalidateWindowData(WindowClass cls, WindowNumber number, int data = 0, bool gui_scope = false); void InvalidateWindowData(WindowClass cls, WindowNumber number, int data = 0, bool gui_scope = false);
void InvalidateWindowClassesData(WindowClass cls, int data = 0, bool gui_scope = false); void InvalidateWindowClassesData(WindowClass cls, int data = 0, bool gui_scope = false);
void InvalidateWindowClassesData(WindowClass cls, ConvertibleThroughBase auto data, bool gui_scope = false) { InvalidateWindowClassesData(cls, data.base(), gui_scope); }
void CloseNonVitalWindows(); void CloseNonVitalWindows();
void CloseAllNonVitalWindows(); void CloseAllNonVitalWindows();