mission_script_manifest_sdk.h 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #pragma once
  2. #include <array>
  3. #include <cstddef>
  4. #include <cstdint>
  5. #include <string_view>
  6. #include "mission_script_world_sdk.h"
  7. namespace sunrise::server::activity::mission::lua_vm {
  8. /** Authenticated generated-world manifest families exposed to Mission Lua. */
  9. enum class ManifestCollectionKind : std::uint8_t {
  10. scenarios,
  11. activityRoots,
  12. activityVariants,
  13. bindingCompleteness,
  14. };
  15. /** Closed value shapes returned by one generated-world manifest field read. */
  16. enum class ManifestFieldKind : std::uint8_t {
  17. absent,
  18. unsignedInteger,
  19. unsignedDecimalString,
  20. boolean,
  21. string,
  22. bytes,
  23. };
  24. /** One copied or immediately consumed immutable manifest field value. */
  25. struct ManifestFieldDefinition final {
  26. ManifestFieldKind kind{ManifestFieldKind::absent};
  27. std::uint64_t unsignedValue{};
  28. std::string_view stringValue{};
  29. std::array<std::byte, 32> bytesValue{};
  30. std::uint8_t valueCount{};
  31. };
  32. /** Which activity-variant-owned package-tag range is selected. */
  33. enum class ManifestVariantTagKind : std::uint8_t {
  34. activityRootCandidates,
  35. scenarioNameCandidates,
  36. evidenceRoots,
  37. };
  38. /** One exact package locator copied from manifest classification evidence. */
  39. struct ManifestLocatorDefinition final {
  40. std::uint32_t tag{};
  41. std::uint64_t offset{};
  42. std::uint32_t localRow{};
  43. };
  44. using ValidateManifestGeneration = bool (*)(const void*, const WorldGenerationIdentity&) noexcept;
  45. using ManifestDefinitionCount = std::size_t (*)(const void*,
  46. const WorldGenerationIdentity&,
  47. ManifestCollectionKind) noexcept;
  48. using ResolveManifestField = bool (*)(const void*,
  49. const WorldGenerationIdentity&,
  50. ManifestCollectionKind,
  51. std::uint32_t,
  52. std::string_view,
  53. ManifestFieldDefinition&) noexcept;
  54. using ManifestVariantTagCount = std::size_t (*)(const void*,
  55. const WorldGenerationIdentity&,
  56. std::uint32_t,
  57. ManifestVariantTagKind) noexcept;
  58. using ResolveManifestVariantTag = bool (*)(const void*,
  59. const WorldGenerationIdentity&,
  60. std::uint32_t,
  61. ManifestVariantTagKind,
  62. std::uint32_t,
  63. std::uint32_t&) noexcept;
  64. using ManifestVariantLocatorCount = std::size_t (*)(const void*,
  65. const WorldGenerationIdentity&,
  66. std::uint32_t) noexcept;
  67. using ResolveManifestVariantLocator = bool (*)(const void*,
  68. const WorldGenerationIdentity&,
  69. std::uint32_t,
  70. std::uint32_t,
  71. ManifestLocatorDefinition&) noexcept;
  72. /** Immutable accessors whose context remains the caller-owned generated-world view. */
  73. struct ManifestDefinitionApi final {
  74. const void* context{};
  75. WorldGenerationIdentity generation{};
  76. ValidateManifestGeneration validate{};
  77. ManifestDefinitionCount count{};
  78. ResolveManifestField resolveField{};
  79. ManifestVariantTagCount variantTagCount{};
  80. ResolveManifestVariantTag resolveVariantTag{};
  81. ManifestVariantLocatorCount variantLocatorCount{};
  82. ResolveManifestVariantLocator resolveVariantLocator{};
  83. };
  84. } // namespace sunrise::server::activity::mission::lua_vm