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