93 lines
2.2 KiB
C++
93 lines
2.2 KiB
C++
#pragma once
|
|
|
|
namespace verus
|
|
{
|
|
namespace Scene
|
|
{
|
|
class LightData
|
|
{
|
|
public:
|
|
Vector4 _color = Vector4::Replicate(1);
|
|
Vector3 _dir = Vector3(0, 0, 1);
|
|
CGI::LightType _lightType = CGI::LightType::omni;
|
|
float _radius = 10;
|
|
float _coneIn = cos(Math::ToRadians(35)); // [0, coneOut-10] angle cosine.
|
|
float _coneOut = cos(Math::ToRadians(45)); // [10, 80] angle cosine.
|
|
};
|
|
VERUS_TYPEDEFS(LightData);
|
|
|
|
//! Light is a scene node with light's info.
|
|
class Light : public SceneNode
|
|
{
|
|
LightData _data;
|
|
//Anim::CShaker _shaker;
|
|
float _intMax = 1;
|
|
bool _async_loadedMesh = false;
|
|
|
|
public:
|
|
struct Desc
|
|
{
|
|
pugi::xml_node _node;
|
|
CSZ _urlIntShaker = nullptr;
|
|
float _intShakerScale = 0.25f;
|
|
LightData _data;
|
|
};
|
|
VERUS_TYPEDEFS(Desc);
|
|
|
|
Light();
|
|
~Light();
|
|
|
|
void Init(RcDesc desc);
|
|
void Done();
|
|
|
|
virtual void Update() override;
|
|
virtual void Draw() override;
|
|
|
|
void SetLightType(CGI::LightType type);
|
|
CGI::LightType GetLightType() const;
|
|
virtual void SetColor(RcVector4 color) override;
|
|
virtual Vector4 GetColor() override;
|
|
void SetIntensity(float i);
|
|
float GetIntensity() const;
|
|
void SetDirection(RcVector3 dir);
|
|
RcVector3 GetDirection() const;
|
|
void SetRadius(float r);
|
|
float GetRadius() const;
|
|
void SetCone(float coneIn = 0, float coneOut = 0);
|
|
float GetConeIn() const;
|
|
float GetConeOut() const;
|
|
Vector4 GetInstData() const;
|
|
|
|
void DirFromPoint(RcPoint3 point, float radiusScale = 0);
|
|
void ConeFromPoint(RcPoint3 point, bool coneIn = false);
|
|
|
|
Transform3 GetTransformNoScale() const;
|
|
virtual void SetTransform(RcTransform3 mat) override;
|
|
VERUS_P(Vector3 ComputeScale());
|
|
VERUS_P(void ComputeTransform());
|
|
|
|
virtual void UpdateBounds() override;
|
|
|
|
// Serialization:
|
|
virtual void SaveXML(pugi::xml_node node) override;
|
|
virtual void LoadXML(pugi::xml_node node) override;
|
|
};
|
|
VERUS_TYPEDEFS(Light);
|
|
|
|
class LightPtr : public Ptr<Light>
|
|
{
|
|
public:
|
|
void Init(Light::RcDesc desc);
|
|
};
|
|
VERUS_TYPEDEFS(LightPtr);
|
|
|
|
class LightPwn : public LightPtr
|
|
{
|
|
public:
|
|
~LightPwn() { Done(); }
|
|
void Done();
|
|
};
|
|
VERUS_TYPEDEFS(LightPwn);
|
|
}
|
|
}
|