Grail (C++)  1.3.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
SnapshotGenerator.h
1 // Copyright QED Software 2023.
2 
3 #ifndef GRAIL_SNAPSHOT_GENERATOR_H
4 #define GRAIL_SNAPSHOT_GENERATOR_H
5 
6 #include "IDebugSnapshotReceiver.h"
7 #include "ISnapshotGenerator.h"
8 
9 #include <algorithm>
10 #include <memory>
11 #include <vector>
12 
13 namespace grail
14 {
15  template <typename SnapshotType>
17  {
18  public:
19  SnapshotGenerator() = default;
20  SnapshotGenerator(const SnapshotGenerator&) = default;
22  SnapshotGenerator& operator=(const SnapshotGenerator&) = default;
23  SnapshotGenerator& operator=(SnapshotGenerator&&) = default;
24  virtual ~SnapshotGenerator() override = default;
25 
27  virtual void AddReceiver(IDebugSnapshotReceiver* receiver) override
28  {
29  if(receiver == nullptr)
30  {
31  return;
32  }
33  snapshotReceivers.push_back(receiver);
34  }
35 
37  virtual void RemoveReceiver(IDebugSnapshotReceiver* receiver) override
38  {
39  snapshotReceivers.erase(std::remove(snapshotReceivers.begin(), snapshotReceivers.end(), receiver));
40  }
41 
43  virtual void ProduceSnapshot() override
44  {
45  SnapshotType snapshot;
46  if(TryProduceSnapshot(snapshot))
47  {
48  snapshot.absoluteTime = timestampProvider != nullptr ? timestampProvider->GetTimestamp() : 0.0f;
49  for(auto receiver : snapshotReceivers)
50  {
51  PassSnapshotToReceiver(*receiver, snapshot);
52  }
53  }
54  }
55 
56  virtual void SetTimestampProvider(const std::shared_ptr<ITimestampProvider>& provider) override
57  {
58  timestampProvider = provider;
59  }
60 
61  protected:
62  virtual bool TryProduceSnapshot(SnapshotType& outSnapshot) = 0;
63  virtual void PassSnapshotToReceiver(IDebugSnapshotReceiver& receiver, SnapshotType& snapshot) = 0;
64 
65  private:
66  std::vector<IDebugSnapshotReceiver*> snapshotReceivers{};
67  std::shared_ptr<ITimestampProvider> timestampProvider = nullptr;
68  };
69 }
70 
71 #endif
grail::SnapshotGenerator
Definition: SnapshotGenerator.h:16
grail::SnapshotGenerator::ProduceSnapshot
virtual void ProduceSnapshot() override
Produces a debug snapshot and sends it to all registered receivers.
Definition: SnapshotGenerator.h:43
grail::IDebugSnapshotReceiver
Definition: IDebugSnapshotReceiver.h:16
grail::SnapshotGenerator::AddReceiver
virtual void AddReceiver(IDebugSnapshotReceiver *receiver) override
Registers a receiver for newly created debug snapshots.
Definition: SnapshotGenerator.h:27
grail::ISnapshotGenerator
Definition: ISnapshotGenerator.h:13
grail::SnapshotGenerator::RemoveReceiver
virtual void RemoveReceiver(IDebugSnapshotReceiver *receiver) override
Removes a snapshot receiver.
Definition: SnapshotGenerator.h:37