text: #pragma once
  
  #include <utility>
  #include <vector>
  
  #include "Runtime/CToken.hpp"
  #include "Runtime/IOStreams.hpp"
  #include "Runtime/RetroTypes.hpp"
  
  namespace urde {
  class CSimplePool;
  class CGenDescription;
  
  class CSpawnSystemKeyframeData {
  public:
    class CSpawnSystemKeyframeInfo {
      friend class CSpawnSystemKeyframeData;
      u32 x0_id;
      u32 x4;
      u32 x8;
      u32 xc;
      TLockedToken<CGenDescription> x10_token;
      bool x18_found = false;
      void LoadToken(CSimplePool* pool);
  
    public:
      explicit CSpawnSystemKeyframeInfo(CInputStream& in);
      TLockedToken<CGenDescription>& GetToken() { return x10_token; }
    };
  
  private:
    u32 x0;
    u32 x4;
    u32 x8_endFrame;
    u32 xc;
    std::vector<std::pair<u32, std::vector<CSpawnSystemKeyframeInfo>>> x10_spawns;
  
  public:
    explicit CSpawnSystemKeyframeData(CInputStream& in);
    void LoadAllSpawnedSystemTokens(CSimplePool* pool);
    std::vector<CSpawnSystemKeyframeInfo>& GetSpawnedSystemsAtFrame(u32 frame);
  };
  
  } // namespace urde
  