Merge pull request #102 from lioncash/element

CIntElement: Add class to handle RTOI int elements
This commit is contained in:
Jack Andersen 2019-10-06 12:10:15 -10:00 committed by GitHub
commit c4ecf972f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -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));