From 67149a5b35e9c31e28d1fc4be11c77e8fcaa20ec Mon Sep 17 00:00:00 2001 From: fgenesis Date: Thu, 14 Sep 2023 01:13:43 +0200 Subject: [PATCH] Make all LR_* and ACTION_* enum values available to Lua --- Aquaria/CMakeLists.txt | 2 +- Aquaria/GameEnums.cpp | 189 ++++++++++++++++++++++++++++++++++++ Aquaria/GameEnums.h | 33 ++++--- Aquaria/NotEntities.h | 21 ---- Aquaria/ScriptInterface.cpp | 16 +++ 5 files changed, 225 insertions(+), 36 deletions(-) create mode 100644 Aquaria/GameEnums.cpp delete mode 100644 Aquaria/NotEntities.h diff --git a/Aquaria/CMakeLists.txt b/Aquaria/CMakeLists.txt index 35591e5..92e275e 100644 --- a/Aquaria/CMakeLists.txt +++ b/Aquaria/CMakeLists.txt @@ -32,6 +32,7 @@ SET(AQUARIA_SRCS FlockEntity.h Game.cpp Game.h + GameEnums.cpp GameEnums.h GameplayVariables.cpp GameStructs.cpp @@ -60,7 +61,6 @@ SET(AQUARIA_SRCS ModSelector.h Network.cpp Network.h - NotEntities.h ParticleEditor.cpp Path.cpp Path.h diff --git a/Aquaria/GameEnums.cpp b/Aquaria/GameEnums.cpp new file mode 100644 index 0000000..8e06176 --- /dev/null +++ b/Aquaria/GameEnums.cpp @@ -0,0 +1,189 @@ +#include "GameEnums.h" +#include "Base.h" + +// keep in sync with enum Layers +static const char *s_LayerNames[LR_MAX] = +{ + "LR_ZERO", + "LR_BACKDROP", + "LR_BACKGROUND", + "LR_SCENEBACKGROUNDIMAGE", + "LR_BACKDROP_ELEMENTS1", + "LR_BACKDROP_ELEMENTS2", + "LR_ENTITIES_MINUS4_PLACEHOLDER", + "LR_BACKDROP_ELEMENTS3", + "LR_BACKDROP_ELEMENTS4", + "LR_BACKDROP_ELEMENTS5", + "LR_BACKDROP_ELEMENTS6", + "LR_BACKGROUND_ELEMENTS1", + "LR_BACKGROUND_ELEMENTS2", + "LR_ENTITIES_MINUS3_PLACEHOLDER", + "LR_BACKGROUND_ELEMENTS3", + "LR_ENTITIES_MINUS2_PLACEHOLDER", + "LR_BLACKGROUND", + "LR_UPDATE_ELEMENTS_BG", + "LR_ELEMENTS1", + "LR_ELEMENTS2", + "LR_ELEMENTS3", + "LR_ELEMENTS4", + "LR_ELEMENTS5", + "LR_ELEMENTS6", + "LR_ELEMENTS7", + "LR_ELEMENTS8", + "LR_ELEMENTS9", + "LR_ELEMENTS10", + "LR_ELEMENTS11", + "LR_ELEMENTS12", + "LR_ELEMENTS13", + "LR_ELEMENTS14", + "LR_ELEMENTS15", + "LR_ELEMENTS16", + "LR_UPDATE_ELEMENTS_FG", + "LR_ENTITIES_MINUS4", + "LR_ENTITIES_MINUS3", + "LR_ENTITIES_MINUS2", + "LR_ENTITIES00", + "LR_ENTITIES0", + "LR_ENTITIES", + "LR_ENTITIES2", + "LR_WATERSURFACE", + "LR_WATERSURFACE2", + "LR_DARK_LAYER", + "LR_PROJECTILES", + "LR_LIGHTING", + "LR_PARTICLES", + "LR_PARTICLES2", + "LR_FOREGROUND_ELEMENTS1", + "LR_FOREGROUND_ELEMENTS2", + "LR_PARTICLES_TOP", + "LR_AFTER_EFFECTS", + "LR_SCENE_COLOR", + "LR_MENU", + "LR_MENU2", + "LR_HUD", + "LR_HUD2", + "LR_HUD3", + "LR_HUDUNDERLAY", + "LR_MINIMAP", + "LR_RECIPES", + "LR_WORLDMAP", + "LR_WORLDMAPHUD", + "LR_REGISTER_TEXT", + "LR_DAMAGESPRITE", + "LR_HELP", + "LR_TRANSITION", + "LR_OVERLAY", + "LR_FILEMENU", + "LR_CONFIRM", + "LR_CURSOR", + "LR_SUBTITLES", + "LR_PROGRESS", + "LR_DEBUG_TEXT", + "LR_BLACKBARS" +}; + +const char *EnumName(Layers lr) +{ + compile_assert(Countof(s_LayerNames) == LR_MAX); + + return lr < LR_MAX ? s_LayerNames[lr] : NULL; +} + +const char *s_AquariaActionNames_0[ACTION_MAX] = +{ + "ACTION_PRIMARY", + "ACTION_SECONDARY", + "ACTION_ESC", + "ACTION_TOGGLESCENEEDITO", + "ACTION_TOGGLEWORLDMAP", + "ACTION_TOGGLEGRID", + "ACTION_MENULEFT", + "ACTION_MENURIGHT", + "ACTION_MENUUP", + "ACTION_MENUDOWN", + "ACTION_PREVPAGE", + "ACTION_NEXTPAGE", + "ACTION_COOKFOOD", + "ACTION_FOODLEFT", + "ACTION_FOODRIGHT", + "ACTION_FOODDROP", + "ACTION_TOGGLEMENU" +}; + +const char *s_AquariaActionNames_100[ACTION_MAX] = +{ + "ACTION_SWIMUP", + "ACTION_SWIMDOWN", + "ACTION_SWIMLEFT", + "ACTION_SWIMRIGHT", + "ACTION_SINGUP", + "ACTION_SINGDOWN", + "ACTION_SINGLEFT", + "ACTION_SINGRIGHT", + "ACTION_SONGSLOT1", + "ACTION_SONGSLOT2", + "ACTION_SONGSLOT3", + "ACTION_SONGSLOT4", + "ACTION_SONGSLOT5", + "ACTION_SONGSLOT6", + "ACTION_SONGSLOT7", + "ACTION_SONGSLOT8", + "ACTION_SONGSLOT9", + "ACTION_SONGSLOT10", + "ACTION_SONGSLOTEND", + "ACTION_ROLL", + "ACTION_SLOW", + "ACTION_REVERT" +}; + +const char *s_AquariaActionNames_200[ACTION_MAX] = +{ + "ACTION_ZOOMIN", + "ACTION_ZOOMOUT", + "ACTION_CAMLEFT", + "ACTION_CAMRIGHT", + "ACTION_CAMUP", + "ACTION_CAMDOWN", + "ACTION_BONELEFT", + "ACTION_BONERIGHT", + "ACTION_BONEUP", + "ACTION_BONEDOWN", + "ACTION_BGLAYER1", + "ACTION_BGLAYER2", + "ACTION_BGLAYER3", + "ACTION_BGLAYER4", + "ACTION_BGLAYER5", + "ACTION_BGLAYER6", + "ACTION_BGLAYER7", + "ACTION_BGLAYER8", + "ACTION_BGLAYER9", + "ACTION_BGLAYER10", + "ACTION_BGLAYER11", + "ACTION_BGLAYER12", + "ACTION_BGLAYER13", + "ACTION_BGLAYER14", + "ACTION_BGLAYER15", + "ACTION_BGLAYER16", + "ACTION_BGLAYEREND", + "ACTION_MULTISELECT", + "ACTION_TOGGLEWORLDMAPEDITOR", + "ACTION_LOOK", + "ACTION_TOGGLEHELPSCREEN", + "ACTION_PLACE_AVATAR", + "ACTION_SCREENSHOT" +}; + +const char *EnumName(AquariaActions a) +{ + unsigned i = a; + if(i < Countof(s_AquariaActionNames_0)) + return s_AquariaActionNames_0[i]; + i -= 100; // no problem if this underflows + if(i < Countof(s_AquariaActionNames_100)) + return s_AquariaActionNames_100[i]; + i -= 100; + if(i < Countof(s_AquariaActionNames_200)) + return s_AquariaActionNames_200[i]; + + return NULL; +} diff --git a/Aquaria/GameEnums.h b/Aquaria/GameEnums.h index 63690ed..c7d3555 100644 --- a/Aquaria/GameEnums.h +++ b/Aquaria/GameEnums.h @@ -52,21 +52,21 @@ enum CursorType CURSOR_LOOK = 4 }; -enum AquariaActions +enum AquariaActions // Keep in sync with GameEnums.cpp { - ACTION_PRIMARY =0, - ACTION_SECONDARY =1, - ACTION_ESC =2, - ACTION_TOGGLESCENEEDITOR =3, - ACTION_TOGGLEWORLDMAP =4, + ACTION_PRIMARY, + ACTION_SECONDARY, + ACTION_ESC, + ACTION_TOGGLESCENEEDITOR, + ACTION_TOGGLEWORLDMAP, - ACTION_TOGGLEGRID =5, + ACTION_TOGGLEGRID, // Automatically sent on either ACTION_SWIM* or sufficient analog controller input - ACTION_MENULEFT =6, - ACTION_MENURIGHT =7, - ACTION_MENUUP =8, - ACTION_MENUDOWN =9, + ACTION_MENULEFT, + ACTION_MENURIGHT, + ACTION_MENUUP, + ACTION_MENUDOWN, ACTION_PREVPAGE, ACTION_NEXTPAGE, @@ -78,7 +78,7 @@ enum AquariaActions ACTION_TOGGLEMENU, - + // ------------------------ ACTION_SWIMUP = 100, ACTION_SWIMDOWN, ACTION_SWIMLEFT, @@ -106,6 +106,7 @@ enum AquariaActions ACTION_SLOW, // currently unused ACTION_REVERT, + // ------------------------ ACTION_ZOOMIN = 200, ACTION_ZOOMOUT, @@ -144,8 +145,11 @@ enum AquariaActions ACTION_LOOK , ACTION_TOGGLEHELPSCREEN, ACTION_PLACE_AVATAR, - ACTION_SCREENSHOT + ACTION_SCREENSHOT, + + ACTION_MAX }; +const char *EnumName(AquariaActions a); enum AuraType { @@ -232,7 +236,7 @@ enum VisualEffectsType VFX_MAX = 3 }; -enum Layers +enum Layers // keep in sync with GameEnums.cpp { // GAME WILL CLEAR THESE LR_ZERO = 0, @@ -313,6 +317,7 @@ enum Layers LR_BLACKBARS , LR_MAX }; +const char *EnumName(Layers lr); enum IngredientType diff --git a/Aquaria/NotEntities.h b/Aquaria/NotEntities.h deleted file mode 100644 index 565d1ee..0000000 --- a/Aquaria/NotEntities.h +++ /dev/null @@ -1,21 +0,0 @@ -/* -Copyright (C) 2007, 2010 - Bit-Blot - -This file is part of Aquaria. - -Aquaria is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - diff --git a/Aquaria/ScriptInterface.cpp b/Aquaria/ScriptInterface.cpp index fe559a0..0217d48 100644 --- a/Aquaria/ScriptInterface.cpp +++ b/Aquaria/ScriptInterface.cpp @@ -11740,6 +11740,20 @@ static const struct { luaConstant(PATHSHAPE_CIRCLE), }; +template +static void luaRegisterEnums(lua_State *L, T first, T last) +{ + assert(first <= last); + for(T i = first; i <= last; i = T(i + 1)) + { + if(const char *name = EnumName(i)) + { + lua_pushinteger(L, i); + lua_setglobal(L, name); + } + } +} + //============================================================================================ // F U N C T I O N S //============================================================================================ @@ -11828,6 +11842,8 @@ lua_State *ScriptInterface::createLuaVM() lua_pushnumber(state, luaConstantTable[i].value); lua_setglobal(state, luaConstantTable[i].name); } + luaRegisterEnums(state, LR_ZERO, LR_MAX); + luaRegisterEnums(state, ACTION_PRIMARY, ACTION_MAX); // Add hooks to monitor global get/set operations if requested. if (complainOnGlobalVar)