metaforce/Runtime/Particle/CParticleGen.hpp

68 lines
2.1 KiB
C++
Raw Normal View History

2018-10-07 03:42:33 +00:00
#pragma once
2016-02-13 05:49:59 +00:00
#include "RetroTypes.hpp"
2016-03-04 23:04:53 +00:00
#include "Graphics/CLight.hpp"
#include "zeus/CColor.hpp"
#include "zeus/CVector3f.hpp"
#include "zeus/CTransform.hpp"
#include "zeus/CAABox.hpp"
2016-02-13 05:49:59 +00:00
#include <list>
2016-03-04 23:04:53 +00:00
namespace urde
2016-02-13 05:49:59 +00:00
{
2017-09-10 09:04:51 +00:00
class CWarp;
2018-05-14 21:44:09 +00:00
class CActorLights;
2017-09-10 09:04:51 +00: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 = {0.f, 0.f, 0.f, 1.f};
};
2016-02-13 05:49:59 +00:00
class CParticleGen
{
2017-09-10 09:04:51 +00:00
protected:
2017-06-04 01:01:09 +00:00
std::list<CWarp*> x4_modifierList;
2016-02-13 05:49:59 +00:00
public:
virtual ~CParticleGen() = default;
virtual bool Update(double)=0;
2018-05-14 21:44:09 +00:00
virtual void Render(const CActorLights* = nullptr)=0;
2016-03-04 23:04:53 +00: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;
2016-02-13 05:49:59 +00:00
virtual void SetParticleEmission(bool)=0;
2016-03-04 23:04:53 +00:00
virtual void SetModulationColor(const zeus::CColor&)=0;
2017-06-04 01:01:09 +00:00
virtual void SetGeneratorRate(float rate) {}
2016-03-04 23:04:53 +00:00
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;
2017-06-04 01:01:09 +00:00
virtual float GetGeneratorRate() const { return 1.f; }
2016-02-13 05:49:59 +00:00
virtual bool IsSystemDeletable() const=0;
virtual std::experimental::optional<zeus::CAABox> GetBounds() const=0;
2016-02-13 05:49:59 +00: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;
2016-02-18 04:44:06 +00:00
virtual void Reset()=0;
2017-06-04 01:01:09 +00:00
virtual FourCC Get4CharId() const=0;
2016-02-13 05:49:59 +00:00
virtual void AddModifier(CWarp* mod);
};
}