mirror of https://github.com/AxioDL/metaforce.git
68 lines
1.8 KiB
C++
68 lines
1.8 KiB
C++
#include "CScriptAreaAttributes.hpp"
|
|
#include "CEnvFxManager.hpp"
|
|
#include "CStateManager.hpp"
|
|
#include "CWorld.hpp"
|
|
|
|
namespace urde
|
|
{
|
|
|
|
CScriptAreaAttributes::CScriptAreaAttributes(TUniqueId uid, const CEntityInfo& info, bool showSkybox, EEnvFxType fxType,
|
|
float envFxDensity, float thermalHeat, float xrayFogDistance,
|
|
float worldLightingLevel, ResId skybox, EPhazonType phazonType)
|
|
: CEntity(uid, info, true, std::string()),
|
|
x34_24_showSkybox(showSkybox),
|
|
x38_envFx(fxType),
|
|
x3c_envFxDensity(envFxDensity),
|
|
x40_thermalHeat(thermalHeat),
|
|
x44_xrayFogDistance(xrayFogDistance),
|
|
x48_worldLightingLevel(worldLightingLevel),
|
|
x4c_skybox(skybox),
|
|
x50_phazon(phazonType)
|
|
{
|
|
}
|
|
|
|
void CScriptAreaAttributes::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId objId, CStateManager& stateMgr)
|
|
{
|
|
AcceptScriptMsg(msg, objId, stateMgr);
|
|
if (x4_areaId == kInvalidAreaId)
|
|
return;
|
|
|
|
if (msg == EScriptObjectMessage::InternalMessage13)
|
|
{
|
|
CGameArea* area = stateMgr.GetWorld()->GetArea(x4_areaId);
|
|
area->SetAreaAttributes(this);
|
|
stateMgr.GetEnvFxManager()->SetFxDensity(500, x3c_envFxDensity);
|
|
}
|
|
else if (msg >= EScriptObjectMessage::InternalMessage12)
|
|
{
|
|
CGameArea* area = stateMgr.GetWorld()->GetArea(x4_areaId);
|
|
|
|
if (!area->IsPostConstructed())
|
|
return;
|
|
|
|
area->SetAreaAttributes(nullptr);
|
|
}
|
|
}
|
|
|
|
bool CScriptAreaAttributes::GetNeedsSky() const
|
|
{
|
|
return x34_24_showSkybox;
|
|
}
|
|
|
|
bool CScriptAreaAttributes::GetNeedsEnvFx() const
|
|
{
|
|
return x38_envFx != EEnvFxType::None;
|
|
}
|
|
|
|
float CScriptAreaAttributes::GetThermalHeat() const
|
|
{
|
|
return x40_thermalHeat;
|
|
}
|
|
|
|
float CScriptAreaAttributes::GetWorldLightingLevel() const
|
|
{
|
|
return x48_worldLightingLevel;
|
|
}
|
|
|
|
}
|