2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-08 22:27:43 +00:00

Lots of CPlayer implementations

This commit is contained in:
Jack Andersen
2017-06-11 18:23:34 -10:00
parent 46c70ecf11
commit 4f33422423
50 changed files with 940 additions and 245 deletions

View File

@@ -19,66 +19,11 @@ class CStaticInterference
{
std::vector<CStaticInterferenceSource> m_sources;
public:
CStaticInterference(int sourceCount)
{
m_sources.reserve(sourceCount);
}
void AddSource(TUniqueId id, float magnitude, float duration)
{
for (CStaticInterferenceSource& src : m_sources)
{
if (src.id == id)
{
src.magnitude = magnitude;
src.timeLeft = duration;
return;
}
}
m_sources.push_back({id, magnitude, duration});
}
void RemoveSource(TUniqueId id)
{
auto iter = std::find_if(m_sources.begin(), m_sources.end(), [&id](const CStaticInterferenceSource& src)->bool{
return src.id == id;
});
if (iter != m_sources.end())
m_sources.erase(iter);
}
void Update(CStateManager&, float dt)
{
std::vector<CStaticInterferenceSource> newSources;
newSources.reserve(m_sources.size());
for (CStaticInterferenceSource& src : m_sources)
{
if (src.timeLeft >= 0.0)
{
src.timeLeft -= dt;
newSources.push_back(src);
}
}
m_sources = std::move(newSources);
}
float GetTotalInterference() const
{
float validAccum = 0.0;
float invalidAccum = 0.0;
for (const CStaticInterferenceSource& src : m_sources)
{
if (src.id == kInvalidUniqueId)
invalidAccum += src.magnitude;
else
validAccum += src.magnitude;
}
if (validAccum > 0.80000001)
validAccum = 0.80000001;
validAccum += invalidAccum;
if (validAccum > 1.0)
return 1.0;
return validAccum;
}
CStaticInterference(int sourceCount);
void RemoveSource(TUniqueId id);
void Update(CStateManager&, float dt);
float GetTotalInterference() const;
void AddSource(TUniqueId id, float magnitude, float duration);
};
}