#ifndef _CPARTICLEELECTRIC
#define _CPARTICLEELECTRIC

#include "Kyoto/Particles/CParticleGen.hpp"

#include "Kyoto/Math/CVector3f.hpp"
#include "Kyoto/TToken.hpp"

class CElectricDescription;

class CParticleElectric : public CParticleGen {
public:
  explicit CParticleElectric(TToken< CElectricDescription > desc);

  ~CParticleElectric() override;
  void Update(double) override;
  void Render() const override;
  void SetOrientation(const CTransform4f& orientation) override;
  void SetTranslation(const CVector3f& translation) override;
  void SetGlobalOrientation(const CTransform4f& orientation) override;
  void SetGlobalTranslation(const CVector3f& translation) override;
  void SetGlobalScale(const CVector3f& scale) override;
  void SetLocalScale(const CVector3f& scale) override;
  void SetParticleEmission(bool emission) override;
  void SetModulationColor(const CColor& col) override;
  void SetGeneratorRate(float rate) {}
  const CTransform4f& GetOrientation() const override;
  const CVector3f& GetTranslation() const override;
  CTransform4f GetGlobalOrientation() const override;
  CVector3f GetGlobalTranslation() const override;
  CVector3f GetGlobalScale() const override;
  bool GetParticleEmission() const override;
  CColor GetModulationColor() const override;
  bool IsSystemDeletable() const override;
  rstl::optional_object< CAABox > GetBounds() const override;
  int GetParticleCount() const override;
  bool SystemHasLight() const override;
  CLight GetLight() override;
  void DestroyParticles() override;
  void AddModifier(CWarp*) override;
  uint Get4CharId() const override;

  void SetOverrideIPos(const CVector3f& vec) { x178_overrideIPos = vec; }
  void SetOverrideIVel(const CVector3f& vec) { x188_overrideIVel = vec; }
  void SetOverrideFPos(const CVector3f& vec) { x198_overrideFPos = vec; }
  void SetOverrideFVel(const CVector3f& vec) { x1a8_overrideFVel = vec; }

private:
  uchar x1c_pad[0x15c];
  rstl::optional_object< CVector3f > x178_overrideIPos;
  rstl::optional_object< CVector3f > x188_overrideIVel;
  rstl::optional_object< CVector3f > x198_overrideFPos;
  rstl::optional_object< CVector3f > x1a8_overrideFVel;
  uchar x1b8_pad[0x2a0];
};
CHECK_SIZEOF(CParticleElectric, 0x458)

#endif // _CPARTICLEELECTRIC
