metaforce/Runtime/Particle/CParticleGen.hpp

68 lines
2.1 KiB
C++
Raw Normal View History

2018-10-06 20:42:33 -07:00
#pragma once
2016-02-12 21:49:59 -08:00
#include <list>
#include <optional>
#include "Runtime/RetroTypes.hpp"
#include "Runtime/Graphics/CLight.hpp"
#include <zeus/CAABox.hpp>
#include <zeus/CColor.hpp>
#include <zeus/CTransform.hpp>
#include <zeus/CVector3f.hpp>
2016-02-12 21:49:59 -08:00
2021-04-10 01:42:06 -07:00
namespace metaforce {
2017-09-10 02:04:51 -07:00
class CWarp;
2018-05-14 14:44:09 -07:00
class CActorLights;
2017-09-10 02:04:51 -07:00
2018-12-07 21:30:43 -08:00
struct CParticle {
int x0_endFrame = 0;
zeus::CVector3f x4_pos;
zeus::CVector3f x10_prevPos;
zeus::CVector3f x1c_vel;
int x28_startFrame = 0;
float x2c_lineLengthOrSize = 0.f;
float x30_lineWidthOrRota = 0.f;
zeus::CColor x34_color = {1.f, 0.f, 1.f, 1.f};
2017-09-10 02:04:51 -07:00
};
2016-02-12 21:49:59 -08:00
2018-12-07 21:30:43 -08:00
class CParticleGen {
2017-09-10 02:04:51 -07:00
protected:
2018-12-07 21:30:43 -08:00
std::list<CWarp*> x4_modifierList;
2016-02-12 21:49:59 -08:00
public:
2018-12-07 21:30:43 -08:00
virtual ~CParticleGen() = default;
2016-02-12 21:49:59 -08:00
2018-12-07 21:30:43 -08:00
virtual bool Update(double) = 0;
virtual void Render() = 0;
2018-12-07 21:30:43 -08:00
virtual void SetOrientation(const zeus::CTransform&) = 0;
virtual void SetTranslation(const zeus::CVector3f&) = 0;
virtual void SetGlobalOrientation(const zeus::CTransform&) = 0;
virtual void SetGlobalTranslation(const zeus::CVector3f&) = 0;
virtual void SetGlobalScale(const zeus::CVector3f&) = 0;
virtual void SetLocalScale(const zeus::CVector3f&) = 0;
virtual void SetParticleEmission(bool) = 0;
virtual void SetModulationColor(const zeus::CColor&) = 0;
virtual void SetGeneratorRate(float rate) {}
virtual const zeus::CTransform& GetOrientation() const = 0;
virtual const zeus::CVector3f& GetTranslation() const = 0;
virtual const zeus::CTransform& GetGlobalOrientation() const = 0;
virtual const zeus::CVector3f& GetGlobalTranslation() const = 0;
virtual const zeus::CVector3f& GetGlobalScale() const = 0;
virtual const zeus::CColor& GetModulationColor() const = 0;
virtual float GetGeneratorRate() const { return 1.f; }
virtual bool IsSystemDeletable() const = 0;
virtual std::optional<zeus::CAABox> GetBounds() const = 0;
2018-12-07 21:30:43 -08:00
virtual u32 GetParticleCount() const = 0;
virtual bool SystemHasLight() const = 0;
virtual CLight GetLight() const = 0;
virtual bool GetParticleEmission() const = 0;
virtual void DestroyParticles() = 0;
virtual void Reset() = 0;
virtual FourCC Get4CharId() const = 0;
2016-02-12 21:49:59 -08:00
2018-12-07 21:30:43 -08:00
virtual void AddModifier(CWarp* mod);
2016-02-12 21:49:59 -08:00
};
2021-04-10 01:42:06 -07:00
} // namespace metaforce