2020-01-15 07:07:48 -05:00
|
|
|
#include "Runtime/Character/CTransitionDatabaseGame.hpp"
|
|
|
|
|
|
|
|
|
|
#include "Runtime/rstl.hpp"
|
|
|
|
|
#include "Runtime/Character/CHalfTransition.hpp"
|
|
|
|
|
#include "Runtime/Character/CTransition.hpp"
|
|
|
|
|
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
#include <utility>
|
2016-04-12 20:07:23 -10:00
|
|
|
|
2021-04-10 01:42:06 -07:00
|
|
|
namespace metaforce {
|
2016-04-12 20:07:23 -10:00
|
|
|
|
|
|
|
|
CTransitionDatabaseGame::CTransitionDatabaseGame(const std::vector<CTransition>& transitions,
|
|
|
|
|
const std::vector<CHalfTransition>& halfTransitions,
|
2020-03-09 11:48:14 -04:00
|
|
|
std::shared_ptr<IMetaTrans> defaultTrans)
|
|
|
|
|
: x10_defaultTrans(std::move(defaultTrans)) {
|
2018-12-07 19:30:43 -10:00
|
|
|
x14_transitions.reserve(transitions.size());
|
|
|
|
|
for (const CTransition& trans : transitions)
|
|
|
|
|
x14_transitions.emplace_back(trans.GetAnimPair(), trans.GetMetaTrans());
|
2019-03-08 22:58:27 -10:00
|
|
|
std::sort(x14_transitions.begin(), x14_transitions.end(),
|
2021-06-07 12:29:18 -07:00
|
|
|
[](const auto& a, const auto& b) { return a.first < b.first; });
|
2016-04-12 20:07:23 -10:00
|
|
|
|
2018-12-07 19:30:43 -10:00
|
|
|
x24_halfTransitions.reserve(halfTransitions.size());
|
|
|
|
|
for (const CHalfTransition& trans : halfTransitions)
|
|
|
|
|
x24_halfTransitions.emplace_back(trans.GetId(), trans.GetMetaTrans());
|
2019-03-08 22:58:27 -10:00
|
|
|
std::sort(x24_halfTransitions.begin(), x24_halfTransitions.end(),
|
2021-06-07 12:29:18 -07:00
|
|
|
[](const auto& a, const auto& b) { return a.first < b.first; });
|
2016-04-12 20:07:23 -10:00
|
|
|
}
|
|
|
|
|
|
2018-12-07 19:30:43 -10:00
|
|
|
const std::shared_ptr<IMetaTrans>& CTransitionDatabaseGame::GetMetaTrans(u32 a, u32 b) const {
|
2020-04-10 23:51:16 -04:00
|
|
|
const auto it = rstl::binary_find(x14_transitions.cbegin(), x14_transitions.cend(), std::make_pair(a, b),
|
|
|
|
|
[](const auto& p) { return p.first; });
|
|
|
|
|
if (it != x14_transitions.cend()) {
|
2018-12-07 19:30:43 -10:00
|
|
|
return it->second;
|
2020-04-10 23:51:16 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const auto it2 = rstl::binary_find(x24_halfTransitions.cbegin(), x24_halfTransitions.cend(), b,
|
|
|
|
|
[](const auto& p) { return p.first; });
|
|
|
|
|
if (it2 != x24_halfTransitions.cend()) {
|
2019-03-04 22:34:43 -10:00
|
|
|
return it2->second;
|
2020-04-10 23:51:16 -04:00
|
|
|
}
|
|
|
|
|
|
2018-12-07 19:30:43 -10:00
|
|
|
return x10_defaultTrans;
|
2016-04-12 20:07:23 -10:00
|
|
|
}
|
|
|
|
|
|
2021-04-10 01:42:06 -07:00
|
|
|
} // namespace metaforce
|