mission_script_lua_manifest_internal.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #pragma once
  2. #include <cstdint>
  3. #include <string_view>
  4. #include "mission_script_lua_types.h"
  5. #include "mission_script_vm_internal.h"
  6. namespace sunrise::server::activity::mission::lua_vm::detail::manifest_api {
  7. // Metatable names that lock the manifest userdata shapes a program may hold.
  8. inline constexpr char kManifestMetatable[] = "sunrise.sdk.manifest";
  9. inline constexpr char kManifestCollectionMetatable[] = "sunrise.sdk.manifest_collection";
  10. inline constexpr char kManifestRowMetatable[] = "sunrise.sdk.manifest_row";
  11. inline constexpr char kManifestTagCollectionMetatable[] = "sunrise.sdk.manifest_tag_collection";
  12. inline constexpr char kManifestLocatorCollectionMetatable[] =
  13. "sunrise.sdk.manifest_locator_collection";
  14. // One binding locator row of a manifest variant.
  15. inline constexpr char kManifestLocatorMetatable[] = "sunrise.sdk.manifest_locator";
  16. struct ManifestHandle final {
  17. WorldGenerationIdentity generation{};
  18. };
  19. struct ManifestCollectionHandle final {
  20. WorldGenerationIdentity generation{};
  21. ManifestCollectionKind kind{ManifestCollectionKind::scenarios};
  22. };
  23. struct ManifestRowHandle final {
  24. WorldGenerationIdentity generation{};
  25. ManifestCollectionKind kind{ManifestCollectionKind::scenarios};
  26. std::uint32_t row{};
  27. };
  28. struct ManifestTagCollectionHandle final {
  29. WorldGenerationIdentity generation{};
  30. ManifestVariantTagKind kind{ManifestVariantTagKind::activityRootCandidates};
  31. std::uint32_t variantRow{};
  32. };
  33. struct ManifestLocatorCollectionHandle final {
  34. WorldGenerationIdentity generation{};
  35. std::uint32_t variantRow{};
  36. };
  37. struct ManifestLocatorHandle final {
  38. WorldGenerationIdentity generation{};
  39. std::uint32_t variantRow{};
  40. std::uint32_t localRow{};
  41. };
  42. /** Registers every locked manifest userdata shape. */
  43. void register_metatables(lua_State* state);
  44. /** Pushes context.sdk.manifest and returns whether the key was owned. */
  45. [[nodiscard]] bool push_activity_member(lua_State* state, std::string_view key);
  46. } // namespace sunrise::server::activity::mission::lua_vm::detail::manifest_api