1#include "KartParamFileManager.hh"
6void KartParamFileManager::clear() {
9 m_bikeDispParam.clear();
10 m_kartDispParam.clear();
11 m_kartCameraParam.clear();
17 m_kartParam.load(
"kartParam.bin");
18 m_driverParam.load(
"driverParam.bin");
19 m_bikeDispParam.load(
"bikePartsDispParam.bin");
20 m_kartDispParam.load(
"kartPartsDispParam.bin");
21 m_kartCameraParam.load(
"kartCameraParam.bin");
23 PANIC(
"Parameter files could not be validated!");
27EGG::RamStream KartParamFileManager::getDriverStream(Character character)
const {
30 case Character::Small_Mii_Outfit_A_Male:
31 case Character::Small_Mii_Outfit_A_Female:
32 case Character::Small_Mii_Outfit_B_Male:
33 case Character::Small_Mii_Outfit_B_Female:
34 case Character::Small_Mii_Outfit_C_Male:
35 case Character::Small_Mii_Outfit_C_Female:
36 case Character::Small_Mii:
39 case Character::Medium_Mii_Outfit_A_Male:
40 case Character::Medium_Mii_Outfit_A_Female:
41 case Character::Medium_Mii_Outfit_B_Male:
42 case Character::Medium_Mii_Outfit_B_Female:
43 case Character::Medium_Mii_Outfit_C_Male:
44 case Character::Medium_Mii_Outfit_C_Female:
45 case Character::Medium_Mii:
48 case Character::Large_Mii_Outfit_A_Male:
49 case Character::Large_Mii_Outfit_A_Female:
50 case Character::Large_Mii_Outfit_B_Male:
51 case Character::Large_Mii_Outfit_B_Female:
52 case Character::Large_Mii_Outfit_C_Male:
53 case Character::Large_Mii_Outfit_C_Female:
54 case Character::Large_Mii:
58 if (character > Character::Rosalina) {
62 idx =
static_cast<s32
>(character);
66 auto *file =
reinterpret_cast<ParamFile<KartParam::Stats> *
>(m_driverParam.file);
68 return EGG::RamStream(&file->params[idx],
sizeof(KartParam::Stats));
71EGG::RamStream KartParamFileManager::getVehicleStream(Vehicle vehicle)
const {
72 if (vehicle >= Vehicle::Max) {
76 s32 idx =
static_cast<s32
>(vehicle);
77 auto *file =
reinterpret_cast<ParamFile<KartParam::Stats> *
>(m_kartParam.file);
79 return EGG::RamStream(&file->params[idx],
sizeof(KartParam::Stats));
82EGG::RamStream KartParamFileManager::getHitboxStream(Vehicle vehicle)
const {
83 if (vehicle >= Vehicle::Max) {
87 auto *resourceManager = System::ResourceManager::Instance();
90 auto *file = resourceManager->getBsp(vehicle, &size);
92 ASSERT(size ==
sizeof(BSP));
93 return EGG::RamStream(file, size);
96EGG::RamStream KartParamFileManager::getBikeDispParamsStream(Vehicle vehicle)
const {
97 if (vehicle < Vehicle::Standard_Bike_S || vehicle >= Vehicle::Max) {
102 constexpr u32 KART_MAX = 18;
103 s32 idx =
static_cast<s32
>(vehicle) - KART_MAX;
105 auto *file =
reinterpret_cast<ParamFile<KartParam::BikeDisp> *
>(m_bikeDispParam.file);
107 return EGG::RamStream(&file->params[idx],
sizeof(KartParam::BikeDisp));
110EGG::RamStream KartParamFileManager::getKartDispParamsStream(Vehicle vehicle)
const {
111 if (vehicle < Vehicle::Standard_Kart_S || vehicle > Vehicle::Honeycoupe) {
115 s32 idx =
static_cast<s32
>(vehicle);
117 auto *file =
reinterpret_cast<ParamFile<KartParam::KartDisp> *
>(m_kartDispParam.file);
119 return EGG::RamStream(&file->params[idx],
sizeof(KartParam::KartDisp));
122EGG::RamStream KartParamFileManager::getKartCameraStream(Character character)
const {
123 WeightClass weightClass = CharacterToWeight(character);
124 if (weightClass == WeightClass::Invalid) {
125 PANIC(
"Invalid weight class when getting KartCamera stream");
128 auto *file =
reinterpret_cast<KartParam::KartCameraParam *
>(m_kartCameraParam.file);
132 return EGG::RamStream(file +
static_cast<u32
>(weightClass) * 4 + 1,
133 sizeof(KartParam::KartCameraParam));
136KartParamFileManager *KartParamFileManager::CreateInstance() {
138 s_instance =
new KartParamFileManager;
142void KartParamFileManager::DestroyInstance() {
144 auto *instance = s_instance;
145 s_instance =
nullptr;
149KartParamFileManager::KartParamFileManager() {
153KartParamFileManager::~KartParamFileManager() {
155 s_instance =
nullptr;
156 WARN(
"KartParamFileManager instance not explicitly handled!");
163 if (!m_kartParam.file || m_kartParam.size == 0) {
168 if (m_kartParam.size != parse<u32>(kartFile->count) *
sizeof(
KartParam::Stats) + 4) {
173 if (!m_driverParam.file || m_driverParam.size == 0) {
178 if (m_driverParam.size != parse<u32>(driverFile->count) *
sizeof(
KartParam::Stats) + 4) {
183 if (!m_bikeDispParam.file || m_bikeDispParam.size == 0) {
188 if (m_bikeDispParam.size != parse<u32>(bikeDispFile->count) *
sizeof(
KartParam::BikeDisp) + 4) {
193 if (!m_kartDispParam.file || m_kartDispParam.size == 0) {
198 if (m_kartDispParam.size != parse<u32>(kartDispFile->count) *
sizeof(
KartParam::KartDisp) + 4) {
203 if (!m_kartCameraParam.file || m_kartCameraParam.size == 0) {
A stream of data stored in memory.
Abstraction for the process of retrieving kart parameters from files.
bool validate() const
Performs a few checks to make sure the files were loaded successfully.
void init()
Loads and validates the kart parameter files.
Pertains to kart-related functionality.
Various character/vehicle-related handling and speed stats.