Commit c4ecf972 authored by Jack Andersen's avatar Jack Andersen Committed by GitHub

Merge pull request #102 from lioncash/element

CIntElement: Add class to handle RTOI int elements
parents 5f0f3ea4 8b58cdc2
......@@ -284,4 +284,20 @@ int CIESubtract::GetMaxValue() const {
return a - b;
}
bool CIERealToInt::GetValue(int frame, int& valOut) const {
float a = 0.0f;
float b = 1.0f;
x8_b->GetValue(frame, b);
x4_a->GetValue(frame, a);
valOut = static_cast<int>(a * b);
return false;
}
int CIERealToInt::GetMaxValue() const {
// TODO: Implement
return 1;
}
} // namespace urde
......@@ -206,4 +206,16 @@ public:
int GetMaxValue() const override;
};
class CIERealToInt final : public CIntElement {
std::unique_ptr<CRealElement> x4_a;
std::unique_ptr<CRealElement> x8_b;
public:
explicit CIERealToInt(std::unique_ptr<CRealElement>&& a, std::unique_ptr<CRealElement>&& b)
: x4_a{std::move(a)}, x8_b{std::move(b)} {}
bool GetValue(int frame, int& valOut) const override;
int GetMaxValue() const override;
};
} // namespace urde
......@@ -666,6 +666,11 @@ std::unique_ptr<CIntElement> CParticleDataFactory::GetIntElement(CInputStream& i
auto b = GetIntElement(in);
return std::make_unique<CIERandom>(std::move(a), std::move(b));
}
case SBIG('RTOI'): {
auto a = GetRealElement(in);
auto b = GetRealElement(in);
return std::make_unique<CIERealToInt>(std::move(a), std::move(b));
}
case SBIG('TSCL'): {
auto a = GetRealElement(in);
return std::make_unique<CIETimeScale>(std::move(a));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment