// // #ifndef FS2_OPEN_ENUMS_H #define FS2_OPEN_ENUMS_H #include "globalincs/pstypes.h" #include "scripting/ade_api.h" #include namespace scripting { namespace api { enum lua_enum : int32_t { LE_ALPHABLEND_FILTER, LE_ALPHABLEND_NONE, LE_CFILE_TYPE_NORMAL, LE_CFILE_TYPE_MEMORY_MAPPED, LE_MOUSE_LEFT_BUTTON, LE_MOUSE_RIGHT_BUTTON, LE_MOUSE_MIDDLE_BUTTON, LE_MOUSE_X1_BUTTON, LE_MOUSE_X2_BUTTON, LE_ORDER_ATTACK, LE_ORDER_ATTACK_ANY, LE_ORDER_DEPART, LE_ORDER_DISABLE, LE_ORDER_DISABLE_TACTICAL, LE_ORDER_DISARM, LE_ORDER_DISARM_TACTICAL, LE_ORDER_DOCK, LE_ORDER_EVADE, LE_ORDER_FLY_TO, LE_ORDER_FORM_ON_WING, LE_ORDER_GUARD, LE_ORDER_IGNORE, LE_ORDER_IGNORE_NEW, LE_ORDER_KEEP_SAFE_DISTANCE, LE_ORDER_PLAY_DEAD, LE_ORDER_PLAY_DEAD_PERSISTENT, LE_ORDER_REARM, LE_ORDER_STAY_NEAR, LE_ORDER_STAY_STILL, LE_ORDER_UNDOCK, LE_ORDER_WAYPOINTS, LE_ORDER_WAYPOINTS_ONCE, LE_ORDER_ATTACK_WING, LE_ORDER_GUARD_WING, LE_ORDER_ATTACK_SHIP_CLASS, LE_PARTICLE_DEBUG, LE_PARTICLE_BITMAP, LE_PARTICLE_FIRE, LE_PARTICLE_SMOKE, LE_PARTICLE_SMOKE2, LE_PARTICLE_PERSISTENT_BITMAP, LE_SEXPVAR_CAMPAIGN_PERSISTENT, LE_SEXPVAR_NOT_PERSISTENT, LE_SEXPVAR_PLAYER_PERSISTENT, LE_SEXPVAR_TYPE_NUMBER, LE_SEXPVAR_TYPE_STRING, LE_TEXTURE_STATIC, LE_TEXTURE_DYNAMIC, LE_LOCK, LE_UNLOCK, LE_NONE, LE_SHIELD_FRONT, LE_SHIELD_LEFT, LE_SHIELD_RIGHT, LE_SHIELD_BACK, LE_MISSION_REPEAT, LE_NORMAL_CONTROLS, LE_LUA_STEERING_CONTROLS, LE_LUA_FULL_CONTROLS, LE_NORMAL_BUTTON_CONTROLS, LE_LUA_ADDITIVE_BUTTON_CONTROL, LE_LUA_OVERRIDE_BUTTON_CONTROL, LE_VM_INTERNAL, LE_VM_EXTERNAL, LE_VM_TRACK, LE_VM_DEAD_VIEW, LE_VM_CHASE, LE_VM_OTHER_SHIP, LE_VM_EXTERNAL_CAMERA_LOCKED, LE_VM_CAMERA_LOCKED, LE_VM_WARP_CHASE, LE_VM_PADLOCK_UP, LE_VM_PADLOCK_REAR, LE_VM_PADLOCK_LEFT, LE_VM_PADLOCK_RIGHT, LE_VM_WARPIN_ANCHOR, LE_VM_TOPDOWN, LE_VM_FREECAMERA, LE_VM_CENTERING, LE_MESSAGE_PRIORITY_LOW, LE_MESSAGE_PRIORITY_NORMAL, LE_MESSAGE_PRIORITY_HIGH, LE_OPTION_TYPE_SELECTION, LE_OPTION_TYPE_RANGE, LE_ASF_EVENTMUSIC, LE_ASF_MENUMUSIC, LE_ASF_VOICE, LE_CONTEXT_VALID, LE_CONTEXT_SUSPENDED, LE_CONTEXT_INVALID, LE_FIREBALL_MEDIUM_EXPLOSION, LE_FIREBALL_LARGE_EXPLOSION, LE_FIREBALL_WARP_EFFECT, LE_GR_RESIZE_NONE, // the sequence and offsets of the LE_GR_* #defines should correspond to the GR_* #defines LE_GR_RESIZE_FULL, LE_GR_RESIZE_FULL_CENTER, LE_GR_RESIZE_MENU, LE_GR_RESIZE_MENU_ZOOMED, LE_GR_RESIZE_MENU_NO_OFFSET, LE_TBOX_FLASH_NAME, LE_TBOX_FLASH_CARGO, LE_TBOX_FLASH_HULL, LE_TBOX_FLASH_STATUS, LE_TBOX_FLASH_SUBSYS, LE_LUAAI_ACHIEVABLE, LE_LUAAI_NOT_YET_ACHIEVABLE, LE_LUAAI_UNACHIEVABLE, LE_OS_NONE, LE_OS_MAIN, LE_OS_ENGINE, LE_OS_TURRET_BASE_ROTATION, LE_OS_TURRET_GUN_ROTATION, LE_OS_SUBSYS_ALIVE, LE_OS_SUBSYS_DEAD, LE_OS_SUBSYS_DAMAGED, LE_OS_SUBSYS_ROTATION, LE_OS_PLAY_ON_PLAYER, LE_OS_LOOPING_DISABLED, LE_MOVIE_PRE_FICTION, // the sequence and offsets of the LE_MOVIE_* #defines should correspond to the MOVIE_* #defines LE_MOVIE_PRE_CMD_BRIEF, LE_MOVIE_PRE_BRIEF, LE_MOVIE_PRE_GAME, LE_MOVIE_PRE_DEBRIEF, LE_MOVIE_POST_DEBRIEF, LE_MOVIE_END_CAMPAIGN, LE_SCORE_BRIEFING, // the sequence and offsets of the LE_SCORE_* #defines should correspond to the SCORE_* #defines LE_SCORE_DEBRIEFING_SUCCESS, LE_SCORE_DEBRIEFING_AVERAGE, LE_SCORE_DEBRIEFING_FAILURE, LE_SCORE_FICTION_VIEWER, LE_INVALID, // the sequence and offsets of these five #defines should correspond to the ShipStatus enums LE_NOT_YET_PRESENT, LE_PRESENT, LE_DEATH_ROLL, LE_EXITED, LE_DC_IS_HULL, LE_DC_VAPORIZE, LE_DC_SET_VELOCITY, LE_DC_FIRE_HOOK, LE_RPC_SERVER, LE_RPC_CLIENTS, LE_RPC_BOTH, LE_RPC_RELIABLE, LE_RPC_ORDERED, LE_RPC_UNRELIABLE, LE_HOTKEY_LINE_NONE, // the sequence and offsets of these five #defines should correspond to the HotkeyLineType enums LE_HOTKEY_LINE_HEADING, LE_HOTKEY_LINE_WING, LE_HOTKEY_LINE_SHIP, LE_HOTKEY_LINE_SUBSHIP, LE_SCROLLBACK_SOURCE_COMPUTER, LE_SCROLLBACK_SOURCE_TRAINING, LE_SCROLLBACK_SOURCE_HIDDEN, LE_SCROLLBACK_SOURCE_IMPORTANT, LE_SCROLLBACK_SOURCE_FAILED, LE_SCROLLBACK_SOURCE_SATISFIED, LE_SCROLLBACK_SOURCE_COMMAND, LE_SCROLLBACK_SOURCE_NETPLAYER, ENUM_NEXT_INDEX, ENUM_COMBINATION, ENUM_INVALID }; struct lua_enum_def_list : public flag_def_list_new { tl::optional value; constexpr lua_enum_def_list(const char* enum_name, lua_enum flag, bool used) : flag_def_list_new{ enum_name, flag, used, false }, value(tl::nullopt) {} constexpr lua_enum_def_list(const char* enum_name, lua_enum flag, int32_t val, bool used) : flag_def_list_new{ enum_name, flag, used, false }, value(val) {} }; extern const lua_enum_def_list Enumerations[]; extern const size_t Num_enumerations; struct enum_h { private: enum class last_combine_op { NATIVE, AND, OR }; tl::optional name; last_combine_op last_op = last_combine_op::NATIVE; public: lua_enum index; bool is_constant; tl::optional value; enum_h(); explicit enum_h(lua_enum n_index); SCP_string getName() const; bool isValid() const; friend enum_h operator&(const enum_h& l, const enum_h& other); friend enum_h operator|(const enum_h& l, const enum_h& other); void serialize(lua_State* /*L*/, const scripting::ade_table_entry& /*tableEntry*/, const luacpp::LuaValue& value, ubyte* data, int& packet_size); void deserialize(lua_State* /*L*/, const scripting::ade_table_entry& /*tableEntry*/, char* data_ptr, ubyte* data, int& offset); }; DECLARE_ADE_OBJ(l_Enum, enum_h); } } #endif //FS2_OPEN_ENUMS_H