From b78110338eed0cf59d21fc3ea9448ba427f58ca5 Mon Sep 17 00:00:00 2001 From: Caner Karaca Date: Tue, 25 Aug 2026 14:35:16 +0300 Subject: [PATCH] feat(lights): provide dynamic material color for low/high beams via RegisterMaterialColProvider --- src/features/lights.cpp | 17 +++++++++++++++++ src/features/lights/manager.cpp | 12 ++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/features/lights.cpp b/src/features/lights.cpp index e98a41a4..522031be 100755 --- a/src/features/lights.cpp +++ b/src/features/lights.cpp @@ -114,6 +114,23 @@ void Lights::Init() } }; + ModelInfoMgr::RegisterMaterialColProvider([](CVehicle *pVeh, RpMaterial *pMat, eMaterialType type) -> MatStateColor + { + if (type == eMaterialType::HeadLightLeft || type == eMaterialType::HeadLightRight) + { + bool longLights = pVeh && m_VehData.Get(pVeh).m_bLongLightsOn; + if (longLights) + { + return { CRGBA(255, 255, 255, 255), DEFAULT_MAT_COL }; + } + else + { + return { CRGBA(190, 190, 190, 255), DEFAULT_MAT_COL }; + } + } + return { DEFAULT_MAT_COL, DEFAULT_MAT_COL }; + }); + ModelInfoMgr::RegisterMaterial([](CVehicle *pVeh, RpMaterial *pMat) { if (!m_bEnabled) { diff --git a/src/features/lights/manager.cpp b/src/features/lights/manager.cpp index 00e271cf..4f161314 100644 --- a/src/features/lights/manager.cpp +++ b/src/features/lights/manager.cpp @@ -34,6 +34,18 @@ void LightManager::Init() { m_Components.push_back(std::make_unique()); m_Components.push_back(std::make_unique()); m_Components.push_back(std::make_unique()); + + ModelInfoMgr::RegisterMaterialColProvider([](CVehicle* pVeh, RpMaterial* pMat, eMaterialType type) -> MatStateColor { + if (type == eMaterialType::HeadLightLeft || type == eMaterialType::HeadLightRight) { + bool longLights = pVeh && m_VehData.Get(pVeh).bLongLightsOn; + if (longLights) { + return { CRGBA(255, 255, 255, 255), DEFAULT_MAT_COL }; + } else { + return { CRGBA(190, 190, 190, 255), DEFAULT_MAT_COL }; + } + } + return { DEFAULT_MAT_COL, DEFAULT_MAT_COL }; + }); } DummyConfig LightManager::CreateBaseConfig(CVehicle* pVeh, RwFrame* pFrame) {