Skip to content

Commit 272daa5

Browse files
authored
Merge pull request #470 from Ghabry/enum-tags
EnumTags: Support non-monotonic enums (e.g. EventCommands)
2 parents 28fd197 + 0a2de2f commit 272daa5

File tree

9 files changed

+897
-23
lines changed

9 files changed

+897
-23
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,7 @@ endif()
462462
if(LIBLCF_ENABLE_TESTS)
463463
file(GLOB TEST_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tests/*.cpp)
464464
add_executable(test_runner_lcf EXCLUDE_FROM_ALL ${TEST_FILES})
465+
target_compile_definitions(test_runner_lcf PRIVATE DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING=1)
465466
set_target_properties(test_runner_lcf PROPERTIES OUTPUT_NAME "test_runner")
466467
target_link_libraries(test_runner_lcf lcf)
467468
add_custom_target(check_lcf COMMAND test_runner_lcf)

Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ test_runner_SOURCES = \
332332
tests/dbbitarray.cpp \
333333
tests/dbstring.cpp \
334334
tests/doctest.h \
335+
tests/enum_tags.cpp \
335336
tests/flag_set.cpp \
336337
tests/test_main.cpp \
337338
tests/time_stamp.cpp \
@@ -342,6 +343,7 @@ test_runner_CPPFLAGS = \
342343
-I$(srcdir)/src/generated
343344
test_runner_CXXFLAGS = \
344345
-std=gnu++17 \
346+
-DDOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING=1 \
345347
$(EXPAT_CXXFLAGS) \
346348
$(ICU_CXXFLAGS)
347349
test_runner_LDADD = \

generator/templates/rpg_header.tmpl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,16 @@ namespace rpg {
5252
"{{ field.0 }}"{%- if not loop.last %},{% endif %}
5353
{%- endfor %}
5454
);
55+
{%- else %}
56+
static constexpr auto k{{ name }}Tags = lcf::EnumTags{
57+
{%- for field in enum %}
58+
{%- if name != "Code" %}
59+
{{ name }}_{{ field.0 }}, "{{ field.0 }}"{%- if not loop.last %},{% endif %}
60+
{%- else %}
61+
{{ name }}::{{ field.0 }}, "{{ field.0 }}"{%- if not loop.last %},{% endif %}
62+
{%- endif %}
63+
{%- endfor %}
64+
};
5565
{%- endif %}
5666
{%- endfor %}
5767
{% endif %}

src/generated/lcf/rpg/battleranimation.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ namespace rpg {
3434
Speed_medium = 14,
3535
Speed_fast = 8
3636
};
37+
static constexpr auto kSpeedTags = lcf::EnumTags{
38+
Speed_slow, "slow",
39+
Speed_medium, "medium",
40+
Speed_fast, "fast"
41+
};
3742
enum Pose {
3843
Pose_Idle = 0,
3944
Pose_AttackRight = 1,

src/generated/lcf/rpg/commonevent.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ namespace rpg {
3434
Trigger_parallel = 4,
3535
Trigger_call = 5
3636
};
37+
static constexpr auto kTriggerTags = lcf::EnumTags{
38+
Trigger_automatic, "automatic",
39+
Trigger_parallel, "parallel",
40+
Trigger_call, "call"
41+
};
3742

3843
int ID = 0;
3944
DBString name;

src/generated/lcf/rpg/eventcommand.h

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,162 @@ namespace rpg {
184184
Maniac_EditTile = 3028,
185185
Maniac_ControlTextProcessing = 3029
186186
};
187+
static constexpr auto kCodeTags = lcf::EnumTags{
188+
Code::END, "END",
189+
Code::CallCommonEvent, "CallCommonEvent",
190+
Code::ForceFlee, "ForceFlee",
191+
Code::EnableCombo, "EnableCombo",
192+
Code::ChangeClass, "ChangeClass",
193+
Code::ChangeBattleCommands, "ChangeBattleCommands",
194+
Code::OpenLoadMenu, "OpenLoadMenu",
195+
Code::ExitGame, "ExitGame",
196+
Code::ToggleAtbMode, "ToggleAtbMode",
197+
Code::ToggleFullscreen, "ToggleFullscreen",
198+
Code::OpenVideoOptions, "OpenVideoOptions",
199+
Code::ShowMessage, "ShowMessage",
200+
Code::MessageOptions, "MessageOptions",
201+
Code::ChangeFaceGraphic, "ChangeFaceGraphic",
202+
Code::ShowChoice, "ShowChoice",
203+
Code::InputNumber, "InputNumber",
204+
Code::ControlSwitches, "ControlSwitches",
205+
Code::ControlVars, "ControlVars",
206+
Code::TimerOperation, "TimerOperation",
207+
Code::ChangeGold, "ChangeGold",
208+
Code::ChangeItems, "ChangeItems",
209+
Code::ChangePartyMembers, "ChangePartyMembers",
210+
Code::ChangeExp, "ChangeExp",
211+
Code::ChangeLevel, "ChangeLevel",
212+
Code::ChangeParameters, "ChangeParameters",
213+
Code::ChangeSkills, "ChangeSkills",
214+
Code::ChangeEquipment, "ChangeEquipment",
215+
Code::ChangeHP, "ChangeHP",
216+
Code::ChangeSP, "ChangeSP",
217+
Code::ChangeCondition, "ChangeCondition",
218+
Code::FullHeal, "FullHeal",
219+
Code::SimulatedAttack, "SimulatedAttack",
220+
Code::ChangeHeroName, "ChangeHeroName",
221+
Code::ChangeHeroTitle, "ChangeHeroTitle",
222+
Code::ChangeSpriteAssociation, "ChangeSpriteAssociation",
223+
Code::ChangeActorFace, "ChangeActorFace",
224+
Code::ChangeVehicleGraphic, "ChangeVehicleGraphic",
225+
Code::ChangeSystemBGM, "ChangeSystemBGM",
226+
Code::ChangeSystemSFX, "ChangeSystemSFX",
227+
Code::ChangeSystemGraphics, "ChangeSystemGraphics",
228+
Code::ChangeScreenTransitions, "ChangeScreenTransitions",
229+
Code::EnemyEncounter, "EnemyEncounter",
230+
Code::OpenShop, "OpenShop",
231+
Code::ShowInn, "ShowInn",
232+
Code::EnterHeroName, "EnterHeroName",
233+
Code::Teleport, "Teleport",
234+
Code::MemorizeLocation, "MemorizeLocation",
235+
Code::RecallToLocation, "RecallToLocation",
236+
Code::EnterExitVehicle, "EnterExitVehicle",
237+
Code::SetVehicleLocation, "SetVehicleLocation",
238+
Code::ChangeEventLocation, "ChangeEventLocation",
239+
Code::TradeEventLocations, "TradeEventLocations",
240+
Code::StoreTerrainID, "StoreTerrainID",
241+
Code::StoreEventID, "StoreEventID",
242+
Code::EraseScreen, "EraseScreen",
243+
Code::ShowScreen, "ShowScreen",
244+
Code::TintScreen, "TintScreen",
245+
Code::FlashScreen, "FlashScreen",
246+
Code::ShakeScreen, "ShakeScreen",
247+
Code::PanScreen, "PanScreen",
248+
Code::WeatherEffects, "WeatherEffects",
249+
Code::ShowPicture, "ShowPicture",
250+
Code::MovePicture, "MovePicture",
251+
Code::ErasePicture, "ErasePicture",
252+
Code::ShowBattleAnimation, "ShowBattleAnimation",
253+
Code::PlayerVisibility, "PlayerVisibility",
254+
Code::FlashSprite, "FlashSprite",
255+
Code::MoveEvent, "MoveEvent",
256+
Code::ProceedWithMovement, "ProceedWithMovement",
257+
Code::HaltAllMovement, "HaltAllMovement",
258+
Code::Wait, "Wait",
259+
Code::PlayBGM, "PlayBGM",
260+
Code::FadeOutBGM, "FadeOutBGM",
261+
Code::MemorizeBGM, "MemorizeBGM",
262+
Code::PlayMemorizedBGM, "PlayMemorizedBGM",
263+
Code::PlaySound, "PlaySound",
264+
Code::PlayMovie, "PlayMovie",
265+
Code::KeyInputProc, "KeyInputProc",
266+
Code::ChangeMapTileset, "ChangeMapTileset",
267+
Code::ChangePBG, "ChangePBG",
268+
Code::ChangeEncounterSteps, "ChangeEncounterSteps",
269+
Code::TileSubstitution, "TileSubstitution",
270+
Code::TeleportTargets, "TeleportTargets",
271+
Code::ChangeTeleportAccess, "ChangeTeleportAccess",
272+
Code::EscapeTarget, "EscapeTarget",
273+
Code::ChangeEscapeAccess, "ChangeEscapeAccess",
274+
Code::OpenSaveMenu, "OpenSaveMenu",
275+
Code::ChangeSaveAccess, "ChangeSaveAccess",
276+
Code::OpenMainMenu, "OpenMainMenu",
277+
Code::ChangeMainMenuAccess, "ChangeMainMenuAccess",
278+
Code::ConditionalBranch, "ConditionalBranch",
279+
Code::Label, "Label",
280+
Code::JumpToLabel, "JumpToLabel",
281+
Code::Loop, "Loop",
282+
Code::BreakLoop, "BreakLoop",
283+
Code::EndEventProcessing, "EndEventProcessing",
284+
Code::EraseEvent, "EraseEvent",
285+
Code::CallEvent, "CallEvent",
286+
Code::Comment, "Comment",
287+
Code::GameOver, "GameOver",
288+
Code::ReturntoTitleScreen, "ReturntoTitleScreen",
289+
Code::ChangeMonsterHP, "ChangeMonsterHP",
290+
Code::ChangeMonsterMP, "ChangeMonsterMP",
291+
Code::ChangeMonsterCondition, "ChangeMonsterCondition",
292+
Code::ShowHiddenMonster, "ShowHiddenMonster",
293+
Code::ChangeBattleBG, "ChangeBattleBG",
294+
Code::ShowBattleAnimation_B, "ShowBattleAnimation_B",
295+
Code::ConditionalBranch_B, "ConditionalBranch_B",
296+
Code::TerminateBattle, "TerminateBattle",
297+
Code::ShowMessage_2, "ShowMessage_2",
298+
Code::ShowChoiceOption, "ShowChoiceOption",
299+
Code::ShowChoiceEnd, "ShowChoiceEnd",
300+
Code::VictoryHandler, "VictoryHandler",
301+
Code::EscapeHandler, "EscapeHandler",
302+
Code::DefeatHandler, "DefeatHandler",
303+
Code::EndBattle, "EndBattle",
304+
Code::Transaction, "Transaction",
305+
Code::NoTransaction, "NoTransaction",
306+
Code::EndShop, "EndShop",
307+
Code::Stay, "Stay",
308+
Code::NoStay, "NoStay",
309+
Code::EndInn, "EndInn",
310+
Code::ElseBranch, "ElseBranch",
311+
Code::EndBranch, "EndBranch",
312+
Code::EndLoop, "EndLoop",
313+
Code::Comment_2, "Comment_2",
314+
Code::ElseBranch_B, "ElseBranch_B",
315+
Code::EndBranch_B, "EndBranch_B",
316+
Code::Maniac_GetSaveInfo, "Maniac_GetSaveInfo",
317+
Code::Maniac_Save, "Maniac_Save",
318+
Code::Maniac_Load, "Maniac_Load",
319+
Code::Maniac_EndLoadProcess, "Maniac_EndLoadProcess",
320+
Code::Maniac_GetMousePosition, "Maniac_GetMousePosition",
321+
Code::Maniac_SetMousePosition, "Maniac_SetMousePosition",
322+
Code::Maniac_ShowStringPicture, "Maniac_ShowStringPicture",
323+
Code::Maniac_GetPictureInfo, "Maniac_GetPictureInfo",
324+
Code::Maniac_ControlBattle, "Maniac_ControlBattle",
325+
Code::Maniac_ControlAtbGauge, "Maniac_ControlAtbGauge",
326+
Code::Maniac_ChangeBattleCommandEx, "Maniac_ChangeBattleCommandEx",
327+
Code::Maniac_GetBattleInfo, "Maniac_GetBattleInfo",
328+
Code::Maniac_ControlVarArray, "Maniac_ControlVarArray",
329+
Code::Maniac_KeyInputProcEx, "Maniac_KeyInputProcEx",
330+
Code::Maniac_RewriteMap, "Maniac_RewriteMap",
331+
Code::Maniac_ControlGlobalSave, "Maniac_ControlGlobalSave",
332+
Code::Maniac_ChangePictureId, "Maniac_ChangePictureId",
333+
Code::Maniac_SetGameOption, "Maniac_SetGameOption",
334+
Code::Maniac_CallCommand, "Maniac_CallCommand",
335+
Code::Maniac_ControlStrings, "Maniac_ControlStrings",
336+
Code::Maniac_GetGameInfo, "Maniac_GetGameInfo",
337+
Code::Maniac_EditPicture, "Maniac_EditPicture",
338+
Code::Maniac_WritePicture, "Maniac_WritePicture",
339+
Code::Maniac_AddMoveRoute, "Maniac_AddMoveRoute",
340+
Code::Maniac_EditTile, "Maniac_EditTile",
341+
Code::Maniac_ControlTextProcessing, "Maniac_ControlTextProcessing"
342+
};
187343

188344
int32_t code = 0;
189345
int32_t indent = 0;

src/generated/lcf/rpg/eventpage.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,14 @@ namespace rpg {
123123
MoveSpeed_double = 5,
124124
MoveSpeed_fourfold = 6
125125
};
126+
static constexpr auto kMoveSpeedTags = lcf::EnumTags{
127+
MoveSpeed_eighth, "eighth",
128+
MoveSpeed_quarter, "quarter",
129+
MoveSpeed_half, "half",
130+
MoveSpeed_normal, "normal",
131+
MoveSpeed_double, "double",
132+
MoveSpeed_fourfold, "fourfold"
133+
};
126134
enum ManiacEventInfo {
127135
ManiacEventInfo_action = 0,
128136
ManiacEventInfo_touched = 1,
@@ -136,6 +144,19 @@ namespace rpg {
136144
ManiacEventInfo_common_event = 32,
137145
ManiacEventInfo_battle_event = 64
138146
};
147+
static constexpr auto kManiacEventInfoTags = lcf::EnumTags{
148+
ManiacEventInfo_action, "action",
149+
ManiacEventInfo_touched, "touched",
150+
ManiacEventInfo_collision, "collision",
151+
ManiacEventInfo_auto_start, "auto_start",
152+
ManiacEventInfo_parallel, "parallel",
153+
ManiacEventInfo_called, "called",
154+
ManiacEventInfo_battle_start, "battle_start",
155+
ManiacEventInfo_battle_parallel, "battle_parallel",
156+
ManiacEventInfo_map_event, "map_event",
157+
ManiacEventInfo_common_event, "common_event",
158+
ManiacEventInfo_battle_event, "battle_event"
159+
};
139160

140161
int ID = 0;
141162
EventPageCondition condition;

0 commit comments

Comments
 (0)