#ifndef _CVISORFLARE #define _CVISORFLARE #include "Kyoto/TToken.hpp" #include "Kyoto/Graphics/CColor.hpp" #include "rstl/vector.hpp" #include "rstl/optional_object.hpp" class CTexture; class CStateManager; class CVector3f; class CActor; class CVisorFlare { public: enum EBlendMode { kBM_Additive = 0, kBM_Blend = 1, }; class CFlareDef { mutable TToken x0_tex; float x8_pos; float xc_scale; CColor x10_color; public: // CFlareDef() = default; // CFlareDef(const CFlareDef& other) // : x0_tex(other.x0_tex) // , x8_pos(other.x8_pos) // , xc_scale(other.xc_scale) // , x10_color(other.x10_color) // {} CFlareDef(const TToken& tex, float pos, float scale, uint color); TToken& GetTexture() const { return x0_tex; } CColor GetColor() const { return x10_color; } float GetPosition() const { return x8_pos; } float GetScale() const { return xc_scale; } }; private: EBlendMode x0_blendMode; rstl::vector x4_flareDefs; bool x14_b1; float x18_f1; float x1c_f2; float x20_f3; float x24_; float x28_; int x2c_w1; int x30_w2; void SetupRenderState(const CStateManager& mgr) const; void ResetTevSwapMode(const CStateManager& mgr) const; void DrawDirect(const CColor& color, float f1, float f2) const; void DrawStreamed(const CColor& color, float f1, float f2) const; public: CVisorFlare(EBlendMode blendMode, bool, float, float, float, uint, uint, const rstl::vector& flares); ~CVisorFlare() {} void Update(float dt, const CVector3f& pos, const CActor* act, CStateManager& mgr); void Render(const CVector3f& pos, const CStateManager& mgr) const; static rstl::optional_object LoadFlareDef(CInputStream& in); }; #endif // _CVISORFLARE