mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-22 23:48:12 -05:00
Implement/match LegoBackgroundColor::SetLightColor and related (#758)
This commit is contained in:
parent
369f3fba22
commit
ed9e9efdab
6 changed files with 61 additions and 17 deletions
|
@ -10,8 +10,8 @@ class LegoBackgroundColor : public MxVariable {
|
||||||
LegoBackgroundColor(const char* p_key, const char* p_value);
|
LegoBackgroundColor(const char* p_key, const char* p_value);
|
||||||
|
|
||||||
void SetValue(const char* p_colorString) override;
|
void SetValue(const char* p_colorString) override;
|
||||||
void SetLights(float p_r, float p_g, float p_b);
|
void SetLightColor(float p_r, float p_g, float p_b);
|
||||||
void SetLights();
|
void SetLightColor();
|
||||||
void ToggleDayNight(MxBool);
|
void ToggleDayNight(MxBool);
|
||||||
void ToggleSkyColor();
|
void ToggleSkyColor();
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ void LegoBackgroundColor::ToggleDayNight(MxBool p_sun)
|
||||||
float convertedR, convertedG, convertedB;
|
float convertedR, convertedG, convertedB;
|
||||||
ConvertHSVToRGB(m_h, m_s, m_v, &convertedR, &convertedG, &convertedB);
|
ConvertHSVToRGB(m_h, m_s, m_v, &convertedR, &convertedG, &convertedB);
|
||||||
VideoManager()->SetSkyColor(convertedR, convertedG, convertedB);
|
VideoManager()->SetSkyColor(convertedR, convertedG, convertedB);
|
||||||
SetLights(convertedR, convertedG, convertedB);
|
SetLightColor(convertedR, convertedG, convertedB);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1003c330
|
// FUNCTION: LEGO1 0x1003c330
|
||||||
|
@ -110,18 +110,39 @@ void LegoBackgroundColor::ToggleSkyColor()
|
||||||
float convertedR, convertedG, convertedB;
|
float convertedR, convertedG, convertedB;
|
||||||
ConvertHSVToRGB(m_h, m_s, m_v, &convertedR, &convertedG, &convertedB);
|
ConvertHSVToRGB(m_h, m_s, m_v, &convertedR, &convertedG, &convertedB);
|
||||||
VideoManager()->SetSkyColor(convertedR, convertedG, convertedB);
|
VideoManager()->SetSkyColor(convertedR, convertedG, convertedB);
|
||||||
SetLights(convertedR, convertedG, convertedB);
|
SetLightColor(convertedR, convertedG, convertedB);
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1003c400
|
// FUNCTION: LEGO1 0x1003c400
|
||||||
void LegoBackgroundColor::SetLights(float p_r, float p_g, float p_b)
|
void LegoBackgroundColor::SetLightColor(float p_r, float p_g, float p_b)
|
||||||
{
|
{
|
||||||
|
if (!VideoManager()->GetVideoParam().Flags().GetF2bit0()) {
|
||||||
|
// TODO: Computed constants based on what?
|
||||||
|
p_r *= 4.3478260869565215;
|
||||||
|
p_g *= 1.5873015873015872;
|
||||||
|
p_b *= 1.1764705882352942;
|
||||||
|
|
||||||
|
if (p_r > 1.0) {
|
||||||
|
p_r = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_g > 1.0) {
|
||||||
|
p_g = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_b > 1.0) {
|
||||||
|
p_b = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
VideoManager()->Get3DManager()->GetLego3DView()->SetLightColor(FALSE, p_r, p_g, p_b);
|
||||||
|
VideoManager()->Get3DManager()->GetLego3DView()->SetLightColor(TRUE, p_r, p_g, p_b);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1003c4b0
|
// FUNCTION: LEGO1 0x1003c4b0
|
||||||
void LegoBackgroundColor::SetLights()
|
void LegoBackgroundColor::SetLightColor()
|
||||||
{
|
{
|
||||||
float convertedR, convertedG, convertedB;
|
float convertedR, convertedG, convertedB;
|
||||||
ConvertHSVToRGB(m_h, m_s, m_v, &convertedR, &convertedG, &convertedB);
|
ConvertHSVToRGB(m_h, m_s, m_v, &convertedR, &convertedG, &convertedB);
|
||||||
SetLights(convertedR, convertedG, convertedB);
|
SetLightColor(convertedR, convertedG, convertedB);
|
||||||
}
|
}
|
||||||
|
|
|
@ -350,7 +350,7 @@ MxResult LegoGameState::Load(MxULong p_slot)
|
||||||
}
|
}
|
||||||
} while (status != 2);
|
} while (status != 2);
|
||||||
|
|
||||||
m_backgroundColor->SetLights();
|
m_backgroundColor->SetLightColor();
|
||||||
lightPosition = VariableTable()->GetVariable("lightposition");
|
lightPosition = VariableTable()->GetVariable("lightposition");
|
||||||
|
|
||||||
if (lightPosition) {
|
if (lightPosition) {
|
||||||
|
@ -1072,7 +1072,7 @@ void LegoGameState::RegisterState(LegoState* p_state)
|
||||||
void LegoGameState::Init()
|
void LegoGameState::Init()
|
||||||
{
|
{
|
||||||
m_backgroundColor->SetValue("set 56 54 68");
|
m_backgroundColor->SetValue("set 56 54 68");
|
||||||
m_backgroundColor->SetLights();
|
m_backgroundColor->SetLightColor();
|
||||||
m_tempBackgroundColor->SetValue("set 56 54 68");
|
m_tempBackgroundColor->SetValue("set 56 54 68");
|
||||||
VariableTable()->SetVariable("lightposition", "2");
|
VariableTable()->SetVariable("lightposition", "2");
|
||||||
SetLightPosition(2);
|
SetLightPosition(2);
|
||||||
|
|
|
@ -403,8 +403,8 @@ void SetLightPosition(MxS32 p_index)
|
||||||
CalcLocalTransform(position, direction, up, transform);
|
CalcLocalTransform(position, direction, up, transform);
|
||||||
SETMAT4(in, transform);
|
SETMAT4(in, transform);
|
||||||
|
|
||||||
VideoManager()->Get3DManager()->GetLego3DView()->SetLight(FALSE, matrix);
|
VideoManager()->Get3DManager()->GetLego3DView()->SetLightTransform(FALSE, matrix);
|
||||||
VideoManager()->Get3DManager()->GetLego3DView()->SetLight(TRUE, matrix);
|
VideoManager()->Get3DManager()->GetLego3DView()->SetLightTransform(TRUE, matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1003f3b0
|
// FUNCTION: LEGO1 0x1003f3b0
|
||||||
|
|
|
@ -184,7 +184,7 @@ void LegoView1::Destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100abb60
|
// FUNCTION: LEGO1 0x100abb60
|
||||||
void LegoView1::SetLight(BOOL bDirectionalLight, Tgl::FloatMatrix4& rMatrix)
|
void LegoView1::SetLightTransform(BOOL bDirectionalLight, Tgl::FloatMatrix4& rMatrix)
|
||||||
{
|
{
|
||||||
Tgl::Light* pLight;
|
Tgl::Light* pLight;
|
||||||
|
|
||||||
|
@ -195,11 +195,32 @@ void LegoView1::SetLight(BOOL bDirectionalLight, Tgl::FloatMatrix4& rMatrix)
|
||||||
pLight = m_pDirectionalLight;
|
pLight = m_pDirectionalLight;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetLight(pLight, rMatrix);
|
SetLightTransform(pLight, rMatrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100abb80
|
// FUNCTION: LEGO1 0x100abb80
|
||||||
void LegoView1::SetLight(Tgl::Light* pLight, Tgl::FloatMatrix4& rMatrix)
|
void LegoView1::SetLightTransform(Tgl::Light* pLight, Tgl::FloatMatrix4& rMatrix)
|
||||||
{
|
{
|
||||||
pLight->SetTransformation(rMatrix);
|
pLight->SetTransformation(rMatrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100abba0
|
||||||
|
void LegoView1::SetLightColor(BOOL bDirectionalLight, float red, float green, float blue)
|
||||||
|
{
|
||||||
|
Tgl::Light* pLight;
|
||||||
|
|
||||||
|
if (bDirectionalLight == FALSE) {
|
||||||
|
pLight = m_pSunLight;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pLight = m_pDirectionalLight;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetLightColor(pLight, red, green, blue);
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100abbd0
|
||||||
|
void LegoView1::SetLightColor(Tgl::Light* pLight, float red, float green, float blue)
|
||||||
|
{
|
||||||
|
pLight->SetColor(red, green, blue);
|
||||||
|
}
|
||||||
|
|
|
@ -65,10 +65,12 @@ class LegoView1 : public LegoView {
|
||||||
BOOL Create(const TglSurface::CreateStruct&, Tgl::Renderer*);
|
BOOL Create(const TglSurface::CreateStruct&, Tgl::Renderer*);
|
||||||
void Destroy() override; // vtable+0x08
|
void Destroy() override; // vtable+0x08
|
||||||
|
|
||||||
void SetLight(BOOL bDirectionalLight, Tgl::FloatMatrix4& rMatrix);
|
void SetLightTransform(BOOL bDirectionalLight, Tgl::FloatMatrix4& rMatrix);
|
||||||
|
void SetLightColor(BOOL bDirectionalLight, float red, float green, float blue);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void SetLight(Tgl::Light* pLight, Tgl::FloatMatrix4& rMatrix);
|
void SetLightTransform(Tgl::Light* pLight, Tgl::FloatMatrix4& rMatrix);
|
||||||
|
void SetLightColor(Tgl::Light* pLight, float red, float green, float blue);
|
||||||
|
|
||||||
Tgl::Light* m_pSunLight; // 0x78
|
Tgl::Light* m_pSunLight; // 0x78
|
||||||
Tgl::Light* m_pDirectionalLight; // 0x7c
|
Tgl::Light* m_pDirectionalLight; // 0x7c
|
||||||
|
|
Loading…
Reference in a new issue