Additional CStateManager imps

This commit is contained in:
Jack Andersen 2017-03-26 09:36:07 -10:00
parent afa846e469
commit f016a251db
7 changed files with 102 additions and 23 deletions

View File

@ -493,9 +493,17 @@ void CStateManager::CacheReflection()
g_Renderer->CacheReflection(ReflectionDrawer, this, true); g_Renderer->CacheReflection(ReflectionDrawer, this, true);
} }
bool CStateManager::CanCreateProjectile(TUniqueId, EWeaponType, int) const { return false; } bool CStateManager::CanCreateProjectile(TUniqueId uid, EWeaponType type, int test) const
{
int num = x878_weaponManager->GetNumActive(uid, type);
int xorv = test ^ num;
return ((xorv >> 1) - xorv & test) >> 31;
}
const CGameLightList* CStateManager::GetDynamicLightList() const { return nullptr; } const std::vector<CLight>& CStateManager::GetDynamicLightList() const
{
return x8e0_dynamicLights;
}
void CStateManager::BuildDynamicLightListForWorld() void CStateManager::BuildDynamicLightListForWorld()
{ {
@ -523,11 +531,49 @@ void CStateManager::BuildDynamicLightListForWorld()
void CStateManager::DrawDebugStuff() const {} void CStateManager::DrawDebugStuff() const {}
void CStateManager::RenderCamerasAndAreaLights() const {} void CStateManager::RenderCamerasAndAreaLights() const
{
x870_cameraManager->RenderCameras(*this);
for (const CCameraFilterPass& filter : xb84_camFilterPasses)
filter.Draw();
}
void CStateManager::DrawE3DeathEffect() const {} void CStateManager::DrawE3DeathEffect() const
{
CPlayer& player = *x84c_player;
if (player.x9f4_deathTime > 0.f)
{
if (player.x2f8_morphTransState != CPlayer::EPlayerMorphBallState::Unmorphed)
{
float blurAmt = zeus::clamp(0.f, (player.x9f4_deathTime - 1.f) / (6.f - 1.f), 1.f);
if (blurAmt > 0.f)
{
CCameraBlurPass blur;
blur.SetBlur(CCameraBlurPass::EBlurType::HiBlur, 7.f * blurAmt, 0.f);
blur.Draw();
}
}
float whiteAmt = zeus::clamp(0.f, 1.f - player.x9f4_deathTime / (0.05f * 6.f), 1.f);
zeus::CColor color = zeus::CColor::skWhite;
color.a = whiteAmt;
CCameraFilterPass::DrawFilter(CCameraFilterPass::EFilterType::Add,
CCameraFilterPass::EFilterShape::Fullscreen,
color, nullptr, 1.f);
}
}
void CStateManager::DrawAdditionalFilters() const {} void CStateManager::DrawAdditionalFilters() const
{
if (xf0c_escapeTimer < 1.f && xf0c_escapeTimer > 0.f &&
!x870_cameraManager->IsInCinematicCamera())
{
zeus::CColor color = zeus::CColor::skWhite;
color.a = 1.f - xf0c_escapeTimer;
CCameraFilterPass::DrawFilter(CCameraFilterPass::EFilterType::Add,
CCameraFilterPass::EFilterShape::Fullscreen,
color, nullptr, 1.f);
}
}
zeus::CFrustum CStateManager::SetupViewForDraw(const SViewport& vp) const zeus::CFrustum CStateManager::SetupViewForDraw(const SViewport& vp) const
{ {
@ -1176,8 +1222,19 @@ std::pair<TEditorId, TUniqueId> CStateManager::LoadScriptObject(TAreaId aid, ESc
return {id, ent->GetUniqueId()}; return {id, ent->GetUniqueId()};
} }
std::pair<TEditorId, TUniqueId> CStateManager::GenerateObject(TEditorId) std::pair<TEditorId, TUniqueId> CStateManager::GenerateObject(TEditorId eid)
{ {
std::pair<const SScriptObjectStream*, TEditorId> build = GetBuildForScript(eid);
if (build.first)
{
CGameArea* area = x850_world->GetArea(build.second.AreaNum());
if (area->IsPostConstructed())
{
std::pair<const u8*, u32> buf = area->GetLayerScriptBuffer(build.second.LayerNum());
CMemoryInStream stream(buf.first + build.first->x4_position, build.first->x8_length);
return LoadScriptObject(build.second.AreaNum(), build.first->x0_type, build.first->x8_length, stream);
}
}
return {kInvalidEditorId, kInvalidUniqueId}; return {kInvalidEditorId, kInvalidUniqueId};
} }
@ -1193,7 +1250,23 @@ void CStateManager::InitScriptObjects(const std::vector<TEditorId>& ids)
MurderScriptInstanceNames(); MurderScriptInstanceNames();
} }
void CStateManager::InformListeners(const zeus::CVector3f&, EListenNoiseType) {} void CStateManager::InformListeners(const zeus::CVector3f& pos, EListenNoiseType type)
{
for (CEntity* ent : GetListeningAiObjectList())
{
if (TCastToPtr<CAi> ai = ent)
{
if (!ai->GetActive())
continue;
CGameArea* area = x850_world->GetArea(ai->GetAreaIdAlways());
CGameArea::EOcclusionState occState = CGameArea::EOcclusionState::NotOccluded;
if (area->IsPostConstructed())
occState = area->GetPostConstructed()->x10dc_occlusionState;
if (occState != CGameArea::EOcclusionState::NotOccluded)
ai->Listen(pos, type);
}
}
}
bool CStateManager::ApplyKnockBack(CActor& actor, const CDamageInfo& info, const CDamageVulnerability&, bool CStateManager::ApplyKnockBack(CActor& actor, const CDamageInfo& info, const CDamageVulnerability&,
const zeus::CVector3f&, float) const zeus::CVector3f&, float)
@ -1304,7 +1377,7 @@ void CStateManager::Update(float dt)
UpdateThermalVisor(); UpdateThermalVisor();
UpdateGameState(); UpdateGameState();
bool _9f4_gt0 = x84c_player->x9f4_ > 0.f; bool dying = x84c_player->x9f4_deathTime > 0.f;
if (x904_ == 0) if (x904_ == 0)
{ {
@ -1329,10 +1402,10 @@ void CStateManager::Update(float dt)
if (x904_ == 0) if (x904_ == 0)
{ {
if (!_9f4_gt0) if (!dying)
CDecalManager::Update(dt, *this); CDecalManager::Update(dt, *this);
UpdateSortedLists(); UpdateSortedLists();
if (!_9f4_gt0) if (!dying)
{ {
MovePlatforms(dt); MovePlatforms(dt);
MoveDoors(dt); MoveDoors(dt);
@ -1341,7 +1414,7 @@ void CStateManager::Update(float dt)
if (x904_ != 1) if (x904_ != 1)
CGameCollision::Move(*this, *x84c_player, dt, nullptr); CGameCollision::Move(*this, *x84c_player, dt, nullptr);
UpdateSortedLists(); UpdateSortedLists();
if (!_9f4_gt0) if (!dying)
CrossTouchActors(); CrossTouchActors();
} }
else else
@ -1349,7 +1422,7 @@ void CStateManager::Update(float dt)
ProcessPlayerInput(); ProcessPlayerInput();
} }
if (!_9f4_gt0 && x904_ == 0) if (!dying && x904_ == 0)
x884_actorModelParticles->Update(dt, *this); x884_actorModelParticles->Update(dt, *this);
if (x904_ == 0 || x904_ == 1) if (x904_ == 0 || x904_ == 1)
@ -1381,13 +1454,13 @@ void CStateManager::Update(float dt)
xf88_ = -1; xf88_ = -1;
} }
if (!_9f4_gt0 && x904_ == 0 && !x870_cameraManager->IsInCinematicCamera()) if (!dying && x904_ == 0 && !x870_cameraManager->IsInCinematicCamera())
UpdateEscapeSequenceTimer(dt); UpdateEscapeSequenceTimer(dt);
x850_world->Update(dt); x850_world->Update(dt);
x88c_rumbleManager->Update(dt); x88c_rumbleManager->Update(dt);
if (!_9f4_gt0) if (!dying)
x880_envFxManager->Update(dt, *this); x880_envFxManager->Update(dt, *this);
UpdateAreaSounds(); UpdateAreaSounds();
@ -1457,7 +1530,7 @@ void CStateManager::UpdateHintState(float dt)
void CStateManager::PreThinkEffects(float dt) void CStateManager::PreThinkEffects(float dt)
{ {
if (x84c_player->x9f4_ > 0.f) if (x84c_player->x9f4_deathTime > 0.f)
{ {
x84c_player->DoPreThink(dt, *this); x84c_player->DoPreThink(dt, *this);
return; return;
@ -1566,7 +1639,7 @@ void CStateManager::CrossTouchActors()
void CStateManager::ThinkEffectsAndActors(float dt) void CStateManager::ThinkEffectsAndActors(float dt)
{ {
if (x84c_player->x9f4_ > 0.f) if (x84c_player->x9f4_deathTime > 0.f)
{ {
x84c_player->DoThink(dt, *this); x84c_player->DoThink(dt, *this);
return; return;

View File

@ -277,7 +277,7 @@ public:
static void ReflectionDrawer(void*, const zeus::CVector3f&); static void ReflectionDrawer(void*, const zeus::CVector3f&);
void CacheReflection(); void CacheReflection();
bool CanCreateProjectile(TUniqueId, EWeaponType, int) const; bool CanCreateProjectile(TUniqueId, EWeaponType, int) const;
const CGameLightList* GetDynamicLightList() const; const std::vector<CLight>& GetDynamicLightList() const;
void BuildDynamicLightListForWorld(); void BuildDynamicLightListForWorld();
void DrawDebugStuff() const; void DrawDebugStuff() const;
void RenderCamerasAndAreaLights() const; void RenderCamerasAndAreaLights() const;

View File

@ -36,16 +36,14 @@ public:
RandomStatic, RandomStatic,
CookieCutterDepthRandomStatic CookieCutterDepthRandomStatic
}; };
private:
static void DrawFilter(EFilterType type, EFilterShape shape, const zeus::CColor& color, static void DrawFilter(EFilterType type, EFilterShape shape, const zeus::CColor& color,
const CTexture* tex, float uvScale); const CTexture* tex, float uvScale);
static void DrawFilterShape(EFilterShape shape, const zeus::CColor& color, static void DrawFilterShape(EFilterShape shape, const zeus::CColor& color,
const CTexture* tex, float uvScale); const CTexture* tex, float uvScale);
public:
void Update(float dt); void Update(float dt);
void SetFilter(EFilterType type, EFilterShape shape, float, const zeus::CColor& color, u32) {} void SetFilter(EFilterType type, EFilterShape shape, float, const zeus::CColor& color, u32) {}
void DisableFilter(float) {} void DisableFilter(float) {}
void Draw() const {}
}; };
class CCameraBlurPass class CCameraBlurPass

View File

@ -297,4 +297,10 @@ void CCameraManager::ProcessInput(const CFinalInput& input, CStateManager& state
cam.ProcessInput(input, stateMgr); cam.ProcessInput(input, stateMgr);
} }
} }
void CCameraManager::RenderCameras(const CStateManager& mgr)
{
for (CEntity* cam : mgr.GetCameraObjectList())
static_cast<CGameCamera*>(cam)->Render(mgr);
}
} }

View File

@ -122,6 +122,8 @@ public:
float CalculateFogDensity(CStateManager&, const CScriptWater*); float CalculateFogDensity(CStateManager&, const CScriptWater*);
void ProcessInput(const CFinalInput& input, CStateManager& stateMgr); void ProcessInput(const CFinalInput& input, CStateManager& stateMgr);
void RenderCameras(const CStateManager& mgr);
}; };
} }

View File

@ -47,9 +47,9 @@ void CPlayer::Update(float, CStateManager& mgr) {}
bool CPlayer::IsPlayerDeadEnough() const bool CPlayer::IsPlayerDeadEnough() const
{ {
if (x2f8_morphTransState == CPlayer::EPlayerMorphBallState::Unmorphed) if (x2f8_morphTransState == CPlayer::EPlayerMorphBallState::Unmorphed)
return x9f4_ < 2.5f; return x9f4_deathTime < 2.5f;
else if (x2f8_morphTransState == CPlayer::EPlayerMorphBallState::Morphed) else if (x2f8_morphTransState == CPlayer::EPlayerMorphBallState::Morphed)
return x9f4_ < 6.f; return x9f4_deathTime < 6.f;
return false; return false;
} }

View File

@ -275,7 +275,7 @@ private:
float x9e0_ = 0.f; float x9e0_ = 0.f;
u32 x9e4_ = 0; u32 x9e4_ = 0;
float x9f4_ = 0.f; float x9f4_deathTime = 0.f;
float x9f8_ = 0.f; float x9f8_ = 0.f;
float x9fc_ = 0.f; float x9fc_ = 0.f;
TUniqueId xa00_ = kInvalidUniqueId; TUniqueId xa00_ = kInvalidUniqueId;