#pragma once

#include <memory>

#include "Runtime/GCNTypes.hpp"
#include "Runtime/Particle/CColorElement.hpp"
#include "Runtime/Particle/CIntElement.hpp"
#include "Runtime/Particle/CModVectorElement.hpp"
#include "Runtime/Particle/CParticleDataFactory.hpp"
#include "Runtime/Particle/CRealElement.hpp"
#include "Runtime/Particle/CUVElement.hpp"
#include "Runtime/Particle/CVectorElement.hpp"

namespace urde {
class CSwooshDescription {
public:
  std::unique_ptr<CIntElement> x0_PSLT;
  std::unique_ptr<CRealElement> x4_TIME;
  std::unique_ptr<CRealElement> x8_LRAD;
  std::unique_ptr<CRealElement> xc_RRAD;
  std::unique_ptr<CIntElement> x10_LENG;
  std::unique_ptr<CColorElement> x14_COLR;
  std::unique_ptr<CIntElement> x18_SIDE;
  std::unique_ptr<CRealElement> x1c_IROT;
  std::unique_ptr<CRealElement> x20_ROTM;
  std::unique_ptr<CVectorElement> x24_POFS;
  std::unique_ptr<CVectorElement> x28_IVEL;
  std::unique_ptr<CVectorElement> x2c_NPOS;
  std::unique_ptr<CModVectorElement> x30_VELM;
  std::unique_ptr<CModVectorElement> x34_VLM2;
  std::unique_ptr<CIntElement> x38_SPLN;
  std::unique_ptr<CUVElement> x3c_TEXR;
  std::unique_ptr<CIntElement> x40_TSPN;
  union {
    struct {
      bool x44_24_LLRD : 1;
      bool x44_25_CROS : 1;
      bool x44_26_VLS1 : 1;
      bool x44_27_VLS2 : 1;
      bool x44_28_SROT : 1;
      bool x44_29_WIRE : 1;
      bool x44_30_TEXW : 1;
      bool x44_31_AALP : 1;
      bool x45_24_ZBUF : 1;
      bool x45_25_ORNT : 1;
      bool x45_26_CRND : 1;
    };
    u32 dummy = 0;
  };

  CSwooshDescription() { x44_25_CROS = true; }
};
} // namespace urde