XJ music engine  1.9.6
In-game runtime engine for XJ music.
CraftWork.h
Go to the documentation of this file.
1 // Copyright (c) XJ Music Inc. (https://xjmusic.com) All Rights Reserved.
2 
3 #ifndef XJMUSIC_WORK_CRAFT_WORK_H
4 #define XJMUSIC_WORK_CRAFT_WORK_H
5 
6 #include <optional>
7 #include <set>
8 #include <string>
9 
13 
14 namespace XJ
15 {
16 
28  class CraftWork final
29  {
30  SegmentEntityStore* store;
31  ContentEntityStore* content;
32  bool running = true;
33  long craftAheadMicros = 0;
34  long deadlineMicros = 0;
35  long persistenceWindowMicros = 0;
36  bool nextCycleRewrite = false;
37  std::optional<const Program*> nextCycleOverrideMacroProgram = std::nullopt;
38  std::set<std::string> nextCycleOverrideMemes = {};
39  bool didOverride = false;
40 
41  public:
42  explicit CraftWork(
43  SegmentEntityStore* store,
44  ContentEntityStore* content,
45  int persistenceWindowSeconds,
46  int craftAheadSeconds,
47  int deadlineSeconds);
48 
52  void start();
53 
57  void finish();
58 
64  bool isFinished() const;
65 
69  void runCycle(const unsigned long long int atChainMicros);
70 
77 
85  std::vector<const Segment*> getSegmentsIfReady(unsigned long long fromChainMicros, unsigned long long toChainMicros) const;
86 
94  std::optional<const Segment*> getSegmentAtChainMicros(unsigned long long chainMicros) const;
95 
102  std::optional<const Segment*> getSegmentAtOffset(int offset) const;
103 
110  std::set<const SegmentChoiceArrangementPick*> getPicks(const std::vector<const Segment*>& segments) const;
111 
118  const Instrument* getInstrument(const InstrumentAudio* audio) const;
119 
127 
134  std::optional<const Program*> getMainProgram(const Segment* segment) const;
135 
142  std::optional<const Program*> getMacroProgram(const Segment& segment) const;
143 
148 
154  bool isReady() const;
155 
162  void doOverrideMacro(const Program* macroProgram);
163 
170  void doOverrideMemes(std::set<std::string> memes);
171 
177  bool getAndResetDidOverride();
178 
184  std::set<const SegmentChoice*> getChoices(const Segment* segment) const;
185 
191  std::set<const SegmentChoiceArrangement*> getArrangements(const SegmentChoice* choice) const;
192 
198  std::set<const SegmentChoiceArrangementPick*> getPicks(const SegmentChoiceArrangement* arrangement) const;
199 
200  private:
207  void didFailWhile(const std::string& msgWhile, const std::exception& e);
208 
218  static const Segment*
219  updateSegmentState(Fabricator* fabricator, const Segment* inputSegment, const Segment::State fromState, const Segment::State toState);
220 
229  void doFabrication(const unsigned long long int craftToChainMicros);
230 
239  void doFabricationDefault(unsigned long long toChainMicros, std::optional<const Program*> overrideMacroProgram, const std::set<std::string>& overrideMemes);
240 
255  void doFabricationRewrite(unsigned long long toChainMicros, std::optional<const Program*> overrideMacroProgram, std::set<std::string> overrideMemes);
256 
263  void doCutoffLastSegment(const Segment* inputSegment, float cutoffAfterBeats) const;
264 
275  void doFabricationWork(const Segment* inputSegment, std::optional<Segment::Type> overrideSegmentType, const std::optional<const Program*> overrideMacroProgram, const std::set<std::string>& overrideMemes) const;
276 
282  void doSegmentCleanup(const unsigned long long int shippedToChainMicros) const;
283 
289  Segment buildSegmentInitial() const;
290 
297  Segment buildSegmentFollowing(const Segment* last) const;
298 
304  void doNextCycleRewriteUnlessInitialSegment();
305  };
306 
307 } // namespace XJ
308 
309 #endif // XJMUSIC_WORK_CRAFT_WORK_H
Definition: ContentEntityStore.h:41
Definition: CraftWork.h:29
bool isReady() const
Definition: CraftWork.cpp:179
void start()
Definition: CraftWork.cpp:32
const Instrument * getInstrument(const InstrumentAudio *audio) const
Definition: CraftWork.cpp:105
std::optional< const Program * > getMainProgram(const Segment *segment) const
Definition: CraftWork.cpp:130
const InstrumentAudio * getInstrumentAudio(const SegmentChoiceArrangementPick *pick) const
Definition: CraftWork.cpp:115
bool getAndResetDidOverride()
Definition: CraftWork.cpp:199
ContentEntityStore * getSourceMaterial() const
Definition: CraftWork.cpp:158
void runCycle(const unsigned long long int atChainMicros)
Definition: CraftWork.cpp:163
std::optional< const Segment * > getSegmentAtOffset(int offset) const
Definition: CraftWork.cpp:89
void doOverrideMemes(std::set< std::string > memes)
Definition: CraftWork.cpp:191
CraftWork(SegmentEntityStore *store, ContentEntityStore *content, int persistenceWindowSeconds, int craftAheadSeconds, int deadlineSeconds)
Definition: CraftWork.cpp:17
TemplateConfig getTemplateConfig() const
Definition: CraftWork.cpp:52
void finish()
Definition: CraftWork.cpp:44
std::set< const SegmentChoiceArrangement * > getArrangements(const SegmentChoice *choice) const
Definition: CraftWork.cpp:457
std::vector< const Segment * > getSegmentsIfReady(unsigned long long fromChainMicros, unsigned long long toChainMicros) const
Definition: CraftWork.cpp:58
std::set< const SegmentChoiceArrangementPick * > getPicks(const std::vector< const Segment * > &segments) const
Definition: CraftWork.cpp:100
void doOverrideMacro(const Program *macroProgram)
Definition: CraftWork.cpp:184
std::optional< const Segment * > getSegmentAtChainMicros(unsigned long long chainMicros) const
Definition: CraftWork.cpp:78
std::set< const SegmentChoice * > getChoices(const Segment *segment) const
Definition: CraftWork.cpp:452
bool isFinished() const
Definition: CraftWork.cpp:125
std::optional< const Program * > getMacroProgram(const Segment &segment) const
Definition: CraftWork.cpp:144
Definition: Fabricator.h:48
Definition: InstrumentAudio.h:13
Definition: Instrument.h:14
Definition: Program.h:14
Definition: SegmentChoiceArrangementPick.h:14
Definition: SegmentChoiceArrangement.h:14
Definition: SegmentChoice.h:15
Definition: SegmentEntityStore.h:43
Definition: Segment.h:13
State
Definition: Segment.h:24
Definition: TemplateConfig.h:16
Definition: ActiveAudio.h:11