activity_sdk_lua_artifacts.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #pragma once
  2. #include <array>
  3. #include <cstddef>
  4. #include <cstdint>
  5. #include <span>
  6. #include <string>
  7. #include <vector>
  8. #include "../../../state/activity_sdk/format.h"
  9. namespace sunrise::state::activity_sdk {
  10. class Catalog;
  11. }
  12. namespace sunrise::client::content::activity::sdk_generation::lua_artifacts {
  13. namespace format = state::activity_sdk::format;
  14. /** Direct Lua declarations derived from one generated-world scenario shard. */
  15. struct ScenarioWorldSource final {
  16. std::uint32_t scenarioTag{};
  17. std::string source{};
  18. };
  19. /** Generation and publication outcomes stay stable for worker diagnostics. */
  20. enum class Status : std::uint8_t {
  21. ready,
  22. invalidInput,
  23. unsupportedAbi,
  24. buildFailure,
  25. directoryFailure,
  26. writeFailure,
  27. };
  28. /** Borrowed named mission rows used to write direct Lua source modules. */
  29. struct Source final {
  30. std::array<std::byte, 32> sdkBuildSha256{};
  31. std::array<std::byte, 32> sdkPayloadSha256{};
  32. std::array<std::byte, 32> contentKeySha256{};
  33. std::array<std::byte, 32> logicalIrSha256{};
  34. std::span<const std::byte> strings{};
  35. std::span<const format::Activity> activities{};
  36. std::span<const format::Scenario> scenarios{};
  37. std::span<const format::Bubble> bubbles{};
  38. std::span<const format::State> states{};
  39. std::span<const format::Object> objects{};
  40. std::span<const format::Occurrence> occurrences{};
  41. std::span<const format::Slot> slots{};
  42. std::span<const format::Squad> squads{};
  43. std::span<const format::SquadMember> squadMembers{};
  44. std::span<const format::SquadAnchor> squadAnchors{};
  45. std::span<const format::AuthoredSceneResource> authoredSceneResources{};
  46. std::span<const format::AuthoredSceneSquadEdge> authoredSceneSquadEdges{};
  47. std::span<const format::TaskTarget> taskTargets{};
  48. std::span<const format::DialogueCueText> dialogueCueTexts{};
  49. std::span<const format::DirectiveElement> directiveElements{};
  50. std::span<const format::BehaviorProgram> behaviorPrograms{};
  51. std::span<const format::BehaviorInput> behaviorInputs{};
  52. std::span<const format::BehaviorChannelWrite> behaviorChannelWrites{};
  53. std::span<const format::BehaviorOwner> behaviorOwners{};
  54. std::span<const format::BehaviorActivityBinding> behaviorActivityBindings{};
  55. std::span<const format::ActorClass> actorClasses{};
  56. std::span<const format::ActorMessageSchema> actorMessageSchemas{};
  57. std::span<const format::ActorCommandDefinition> actorCommandDefinitions{};
  58. std::span<const format::ActorBehaviorProfile> actorBehaviorProfiles{};
  59. std::span<const format::SimulationEventDefinition> simulationEventDefinitions{};
  60. std::span<const format::RuntimeSchema> runtimeSchemas{};
  61. std::span<const format::RuntimeField> runtimeFields{};
  62. std::span<const format::RuntimeTypeDefinition> runtimeTypeDefinitions{};
  63. std::span<const format::SobjectRsat> sobjectRsats{};
  64. std::span<const format::SobjectRsatDescriptor> sobjectRsatDescriptors{};
  65. std::span<const format::EntityTypeDefinition> entityTypeDefinitions{};
  66. std::span<const format::SobjectRsatFieldBinding> sobjectRsatFieldBindings{};
  67. std::span<const format::ActorStateName> actorStateNames{};
  68. std::span<const format::ActorSequenceTable> actorSequenceTables{};
  69. std::span<const format::ActorSequenceEntry> actorSequenceEntries{};
  70. std::span<const format::ActorSequenceBinding> actorSequenceBindings{};
  71. std::span<const ScenarioWorldSource> scenarioWorldSources{};
  72. std::span<const format::CombatObjectiveGroup> combatObjectiveGroups{};
  73. std::span<const format::ActorAbility> actorAbilities{};
  74. std::span<const format::AuthoredSceneEventKey> authoredSceneEventKeys{};
  75. };
  76. /** One readable generated Lua module with a filesystem-safe canonical name. */
  77. struct SourceModule final {
  78. std::string stem{};
  79. std::string source{};
  80. };
  81. /** Complete in-memory transaction before any artifact path changes. */
  82. struct Bundle final {
  83. std::string activityIndex{};
  84. std::string missionIndex{};
  85. std::string activitySdkModule{};
  86. std::string behaviorModule{};
  87. std::string manifestJson{};
  88. /** The mission Lua API schema, rendered from the table the VM dispatches from. */
  89. std::string missionApiJson{};
  90. std::vector<SourceModule> activityModules{};
  91. std::vector<SourceModule> missionModules{};
  92. };
  93. /** Counts and bytes returned only after the index commit file is published. */
  94. struct Result final {
  95. std::uint32_t activityCount{};
  96. std::uint32_t fileCount{};
  97. std::uint64_t byteCount{};
  98. };
  99. /** @return Stable text for one native Lua artifact result. */
  100. [[nodiscard]] const char* status_name(Status value) noexcept;
  101. /** Builds every declaration in memory without touching the artifact tree. */
  102. [[nodiscard]] Status build(const Source& source, Bundle& output) noexcept;
  103. /** Publishes complete files below sdkDirectory/lua and commits activities.lua last. */
  104. [[nodiscard]] Status
  105. publish_bundle(const wchar_t* sdkDirectory, const Bundle& bundle, Result& output) noexcept;
  106. /** @return True when the committed Lua manifest exactly matches the loaded SDK. */
  107. [[nodiscard]] bool is_current(const wchar_t* sdkDirectory,
  108. const state::activity_sdk::Catalog& catalog) noexcept;
  109. } // namespace sunrise::client::content::activity::sdk_generation::lua_artifacts