mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 02:27:43 +00:00
New code style refactor
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
#include "CWorldLight.hpp"
|
||||
#include <cfloat>
|
||||
|
||||
namespace urde
|
||||
{
|
||||
namespace urde {
|
||||
CWorldLight::CWorldLight(CInputStream& in)
|
||||
: x0_type(EWorldLightType(in.readUint32Big()))
|
||||
, x4_color(zeus::CVector3f::ReadBig(in))
|
||||
@@ -14,66 +13,59 @@ CWorldLight::CWorldLight(CInputStream& in)
|
||||
, x34_castShadows(in.readBool())
|
||||
, x38_(in.readFloatBig())
|
||||
, x3c_falloff(EFalloffType(in.readUint32Big()))
|
||||
, x40_(in.readFloatBig())
|
||||
{
|
||||
, x40_(in.readFloatBig()) {}
|
||||
|
||||
std::tuple<float, float, float> CalculateLightFalloff(EFalloffType falloff, float q) {
|
||||
float constant = 0.f;
|
||||
float linear = 0.f;
|
||||
float quadratic = 0.f;
|
||||
|
||||
if (falloff == EFalloffType::Constant)
|
||||
constant = 2.f / q;
|
||||
else if (falloff == EFalloffType::Linear)
|
||||
linear = 250.f / q;
|
||||
else if (falloff == EFalloffType::Quadratic)
|
||||
quadratic = 25000.f / q;
|
||||
|
||||
return {constant, linear, quadratic};
|
||||
}
|
||||
|
||||
std::tuple<float, float, float> CalculateLightFalloff(EFalloffType falloff, float q)
|
||||
{
|
||||
float constant = 0.f;
|
||||
float linear = 0.f;
|
||||
float quadratic = 0.f;
|
||||
CLight CWorldLight::GetAsCGraphicsLight() const {
|
||||
zeus::CVector3f float_color = x4_color;
|
||||
float q = x28_q;
|
||||
if (q < FLT_EPSILON)
|
||||
q = 0.000001f;
|
||||
|
||||
if (falloff == EFalloffType::Constant)
|
||||
constant = 2.f / q;
|
||||
else if (falloff == EFalloffType::Linear)
|
||||
linear = 250.f / q;
|
||||
else if (falloff == EFalloffType::Quadratic)
|
||||
quadratic = 25000.f / q;
|
||||
if (x0_type == EWorldLightType::LocalAmbient) {
|
||||
float_color *= zeus::CVector3f(q);
|
||||
if (float_color.x() >= 1.f)
|
||||
float_color.x() = 1.f;
|
||||
|
||||
return {constant, linear, quadratic};
|
||||
}
|
||||
|
||||
CLight CWorldLight::GetAsCGraphicsLight() const
|
||||
{
|
||||
zeus::CVector3f float_color = x4_color;
|
||||
float q = x28_q;
|
||||
if (q < FLT_EPSILON)
|
||||
q = 0.000001f;
|
||||
|
||||
if (x0_type == EWorldLightType::LocalAmbient)
|
||||
{
|
||||
float_color *= zeus::CVector3f(q);
|
||||
if (float_color.x() >= 1.f)
|
||||
float_color.x() = 1.f;
|
||||
|
||||
if (float_color.y() >= 1.f)
|
||||
float_color.y() = 1.f;
|
||||
|
||||
if (float_color.z() >= 1.f)
|
||||
float_color.z() = 1.f;
|
||||
|
||||
return CLight::BuildLocalAmbient(x10_position, zeus::CColor(float_color.x(), float_color.y(), float_color.z(), 1.f));
|
||||
}
|
||||
else if (x0_type == EWorldLightType::Directional)
|
||||
{
|
||||
return CLight::BuildDirectional(x1c_direction, zeus::CColor{x4_color.x(), x4_color.y(), x4_color.z(), 1.f});
|
||||
}
|
||||
else if (x0_type == EWorldLightType::Spot)
|
||||
{
|
||||
CLight light = CLight::BuildSpot(x10_position, x1c_direction.normalized(),
|
||||
zeus::CColor{x4_color.x(), x4_color.y(), x4_color.z(), 1.f}, x2c_cutoffAngle * .5f);
|
||||
|
||||
float c, l, q;
|
||||
std::tie(c, l, q) = CalculateLightFalloff(x3c_falloff, x28_q);
|
||||
|
||||
light.SetAttenuation(c, l, q);
|
||||
return light;
|
||||
}
|
||||
float distC, distL, distQ;
|
||||
std::tie(distC, distL, distQ) = CalculateLightFalloff(x3c_falloff, x28_q);
|
||||
return CLight::BuildCustom(x10_position, zeus::CVector3f{0.f, 1.f, 0.f},
|
||||
zeus::CColor{x4_color.x(), x4_color.y(), x4_color.z(), 1.f}, distC, distL, distQ, 1.f, 0.f,
|
||||
0.f);
|
||||
}
|
||||
if (float_color.y() >= 1.f)
|
||||
float_color.y() = 1.f;
|
||||
|
||||
if (float_color.z() >= 1.f)
|
||||
float_color.z() = 1.f;
|
||||
|
||||
return CLight::BuildLocalAmbient(x10_position,
|
||||
zeus::CColor(float_color.x(), float_color.y(), float_color.z(), 1.f));
|
||||
} else if (x0_type == EWorldLightType::Directional) {
|
||||
return CLight::BuildDirectional(x1c_direction, zeus::CColor{x4_color.x(), x4_color.y(), x4_color.z(), 1.f});
|
||||
} else if (x0_type == EWorldLightType::Spot) {
|
||||
CLight light =
|
||||
CLight::BuildSpot(x10_position, x1c_direction.normalized(),
|
||||
zeus::CColor{x4_color.x(), x4_color.y(), x4_color.z(), 1.f}, x2c_cutoffAngle * .5f);
|
||||
|
||||
float c, l, q;
|
||||
std::tie(c, l, q) = CalculateLightFalloff(x3c_falloff, x28_q);
|
||||
|
||||
light.SetAttenuation(c, l, q);
|
||||
return light;
|
||||
}
|
||||
float distC, distL, distQ;
|
||||
std::tie(distC, distL, distQ) = CalculateLightFalloff(x3c_falloff, x28_q);
|
||||
return CLight::BuildCustom(x10_position, zeus::CVector3f{0.f, 1.f, 0.f},
|
||||
zeus::CColor{x4_color.x(), x4_color.y(), x4_color.z(), 1.f}, distC, distL, distQ, 1.f, 0.f,
|
||||
0.f);
|
||||
}
|
||||
} // namespace urde
|
||||
|
||||
Reference in New Issue
Block a user