Course enums

This commit is contained in:
inspectredc
2025-01-03 11:05:00 -06:00
committed by Lywx
parent 9ab2dee1f0
commit 0d9da40626
2 changed files with 431 additions and 21 deletions
+28 -21
View File
@@ -1,10 +1,13 @@
#include "CourseFactory.h"
#include "course/Course.h"
#include "utils/Decompressor.h"
#include "spdlog/spdlog.h"
#include "Companion.h"
#include <types/Vec3D.h>
#define CP_ENUMS_PER_LINE 4
#define ARRAY_COUNT(arr) (int32_t)(sizeof(arr) / sizeof(arr[0]))
#define TRACK_SEGMENT_JOINT_MASK 0x600
@@ -66,10 +69,14 @@ ExportResult FZX::CourseCodeExporter::Export(std::ostream &write, std::shared_pt
write << "CourseData " << symbol << " = {\n";
write << std::dec;
write << fourSpaceTab << (int32_t)course->mCreatorId << ", /* Creator Id */\n";
if (course->mCreatorId == CREATOR_NINTENDO) {
write << fourSpaceTab << "CREATOR_NINTENDO" << ", /* Creator Id */\n";
} else {
write << fourSpaceTab << (int32_t)course->mCreatorId << ", /* Creator Id */\n";
}
write << fourSpaceTab << (int32_t)controlPointCount << ", /* Control Point Count */\n";
write << fourSpaceTab << (int32_t)course->mVenue << ", /* Venue */\n";
write << fourSpaceTab << (int32_t)course->mSkybox << ", /* Skybox */\n";
write << fourSpaceTab << static_cast<Venue>(course->mVenue) << ", /* Venue */\n";
write << fourSpaceTab << static_cast<Skybox>(course->mSkybox) << ", /* Skybox */\n";
write << fourSpaceTab << "0x" << std::hex << std::uppercase << course->CalculateChecksum() << std::dec << ", /* Checksum */\n";
write << fourSpaceTab << (int32_t)course->mFlag << ", /* Flag */\n";
@@ -119,13 +126,13 @@ ExportResult FZX::CourseCodeExporter::Export(std::ostream &write, std::shared_pt
write << fourSpaceTab << "{ /* Pit */";
for (size_t i = 0; i < 64; i++) {
if ((i % 16) == 0) {
if ((i % CP_ENUMS_PER_LINE) == 0) {
write << "\n" << fourSpaceTab << fourSpaceTab;
}
if (i < controlPointCount) {
const ControlPointInfo& controlPointInfo = course->mControlPointInfos.at(i);
write << (int32_t)controlPointInfo.pit << ", ";
write << static_cast<PitZone>(controlPointInfo.pit) << ", ";
} else {
write << "0, ";
}
@@ -134,13 +141,13 @@ ExportResult FZX::CourseCodeExporter::Export(std::ostream &write, std::shared_pt
write << fourSpaceTab << "{ /* Dash */";
for (size_t i = 0; i < 64; i++) {
if ((i % 16) == 0) {
if ((i % CP_ENUMS_PER_LINE) == 0) {
write << "\n" << fourSpaceTab << fourSpaceTab;
}
if (i < controlPointCount) {
const ControlPointInfo& controlPointInfo = course->mControlPointInfos.at(i);
write << (int32_t)controlPointInfo.dash << ", ";
write << static_cast<DashZone>(controlPointInfo.dash) << ", ";
} else {
write << "0, ";
}
@@ -149,13 +156,13 @@ ExportResult FZX::CourseCodeExporter::Export(std::ostream &write, std::shared_pt
write << fourSpaceTab << "{ /* Dirt */";
for (size_t i = 0; i < 64; i++) {
if ((i % 16) == 0) {
if ((i % CP_ENUMS_PER_LINE) == 0) {
write << "\n" << fourSpaceTab << fourSpaceTab;
}
if (i < controlPointCount) {
const ControlPointInfo& controlPointInfo = course->mControlPointInfos.at(i);
write << (int32_t)controlPointInfo.dirt << ", ";
write << static_cast<Dirt>(controlPointInfo.dirt) << ", ";
} else {
write << "0, ";
}
@@ -164,13 +171,13 @@ ExportResult FZX::CourseCodeExporter::Export(std::ostream &write, std::shared_pt
write << fourSpaceTab << "{ /* Ice */";
for (size_t i = 0; i < 64; i++) {
if ((i % 16) == 0) {
if ((i % CP_ENUMS_PER_LINE) == 0) {
write << "\n" << fourSpaceTab << fourSpaceTab;
}
if (i < controlPointCount) {
const ControlPointInfo& controlPointInfo = course->mControlPointInfos.at(i);
write << (int32_t)controlPointInfo.ice << ", ";
write << static_cast<Ice>(controlPointInfo.ice) << ", ";
} else {
write << "0, ";
}
@@ -179,13 +186,13 @@ ExportResult FZX::CourseCodeExporter::Export(std::ostream &write, std::shared_pt
write << fourSpaceTab << "{ /* Jump */";
for (size_t i = 0; i < 64; i++) {
if ((i % 16) == 0) {
if ((i % CP_ENUMS_PER_LINE) == 0) {
write << "\n" << fourSpaceTab << fourSpaceTab;
}
if (i < controlPointCount) {
const ControlPointInfo& controlPointInfo = course->mControlPointInfos.at(i);
write << (int32_t)controlPointInfo.jump << ", ";
write << static_cast<Jump>(controlPointInfo.jump) << ", ";
} else {
write << "0, ";
}
@@ -194,13 +201,13 @@ ExportResult FZX::CourseCodeExporter::Export(std::ostream &write, std::shared_pt
write << fourSpaceTab << "{ /* Landmine */";
for (size_t i = 0; i < 64; i++) {
if ((i % 16) == 0) {
if ((i % CP_ENUMS_PER_LINE) == 0) {
write << "\n" << fourSpaceTab << fourSpaceTab;
}
if (i < controlPointCount) {
const ControlPointInfo& controlPointInfo = course->mControlPointInfos.at(i);
write << (int32_t)controlPointInfo.landmine << ", ";
write << static_cast<Landmine>(controlPointInfo.landmine) << ", ";
} else {
write << "0, ";
}
@@ -209,13 +216,13 @@ ExportResult FZX::CourseCodeExporter::Export(std::ostream &write, std::shared_pt
write << fourSpaceTab << "{ /* Gate */";
for (size_t i = 0; i < 64; i++) {
if ((i % 16) == 0) {
if ((i % CP_ENUMS_PER_LINE) == 0) {
write << "\n" << fourSpaceTab << fourSpaceTab;
}
if (i < controlPointCount) {
const ControlPointInfo& controlPointInfo = course->mControlPointInfos.at(i);
write << (int32_t)controlPointInfo.gate << ", ";
write << static_cast<Gate>(controlPointInfo.gate) << ", ";
} else {
write << "0, ";
}
@@ -224,13 +231,13 @@ ExportResult FZX::CourseCodeExporter::Export(std::ostream &write, std::shared_pt
write << fourSpaceTab << "{ /* Building */";
for (size_t i = 0; i < 64; i++) {
if ((i % 16) == 0) {
if ((i % CP_ENUMS_PER_LINE) == 0) {
write << "\n" << fourSpaceTab << fourSpaceTab;
}
if (i < controlPointCount) {
const ControlPointInfo& controlPointInfo = course->mControlPointInfos.at(i);
write << (int32_t)controlPointInfo.building << ", ";
write << static_cast<Building>(controlPointInfo.building) << ", ";
} else {
write << "0, ";
}
@@ -239,13 +246,13 @@ ExportResult FZX::CourseCodeExporter::Export(std::ostream &write, std::shared_pt
write << fourSpaceTab << "{ /* Sign */";
for (size_t i = 0; i < 64; i++) {
if ((i % 16) == 0) {
if ((i % CP_ENUMS_PER_LINE) == 0) {
write << "\n" << fourSpaceTab << fourSpaceTab;
}
if (i < controlPointCount) {
const ControlPointInfo& controlPointInfo = course->mControlPointInfos.at(i);
write << (int32_t)controlPointInfo.sign << ", ";
write << static_cast<Sign>(controlPointInfo.sign) << ", ";
} else {
write << "0, ";
}
+403
View File
@@ -0,0 +1,403 @@
#pragma once
#include <string>
#include <spdlog/spdlog.h>
#include <spdlog/fmt/ostr.h>
#define CREATOR_NINTENDO 4
namespace FZX {
enum class Venue {
/* 0 */ VENUE_MUTE_CITY,
/* 1 */ VENUE_PORT_TOWN,
/* 2 */ VENUE_BIG_BLUE,
/* 3 */ VENUE_SAND_OCEAN,
/* 4 */ VENUE_DEVILS_FOREST,
/* 5 */ VENUE_WHITE_LAND,
/* 6 */ VENUE_SECTOR,
/* 7 */ VENUE_RED_CANYON,
/* 8 */ VENUE_FIRE_FIELD,
/* 9 */ VENUE_SILENCE,
/* 10 */ VENUE_ENDING,
};
enum class Skybox {
/* 0 */ SKYBOX_PURPLE,
/* 1 */ SKYBOX_TURQUOISE,
/* 2 */ SKYBOX_DESERT,
/* 3 */ SKYBOX_BLUE,
/* 4 */ SKYBOX_NIGHT,
/* 5 */ SKYBOX_ORANGE,
/* 6 */ SKYBOX_SUNSET,
/* 7 */ SKYBOX_SKY_BLUE,
};
enum class PitZone {
/* -1 */ PIT_NONE = -1,
/* 0 */ PIT_BOTH,
/* 1 */ PIT_LEFT,
/* 2 */ PIT_RIGHT,
};
enum class DashZone {
/* -1 */ DASH_NONE = -1,
/* 0 */ DASH_MIDDLE,
/* 1 */ DASH_LEFT,
/* 2 */ DASH_RIGHT,
};
enum class Dirt {
/* -1 */ DIRT_NONE = -1,
/* 0 */ DIRT_BOTH,
/* 1 */ DIRT_LEFT,
/* 2 */ DIRT_RIGHT,
/* 3 */ DIRT_MIDDLE,
};
enum class Ice {
/* -1 */ ICE_NONE = -1,
/* 0 */ ICE_BOTH,
/* 1 */ ICE_LEFT,
/* 2 */ ICE_RIGHT,
/* 3 */ ICE_MIDDLE,
};
enum class Jump {
/* -1 */ JUMP_NONE = -1,
/* 0 */ JUMP_ALL,
/* 1 */ JUMP_LEFT,
/* 2 */ JUMP_RIGHT,
};
enum class Landmine {
/* -1 */ LANDMINE_NONE = -1,
/* 0 */ LANDMINE_MIDDLE,
/* 1 */ LANDMINE_LEFT,
/* 2 */ LANDMINE_RIGHT,
};
enum class Gate {
/* -1 */ GATE_NONE = -1,
/* 0 */ GATE_SQUARE,
/* 1 */ GATE_START,
/* 2 */ GATE_HEXAGONAL,
};
enum class Building {
/* -1 */ BUILDING_NONE = -1,
/* 0 */ BUILDING_TALL_BOTH,
/* 1 */ BUILDING_TALL_LEFT,
/* 2 */ BUILDING_TALL_RIGHT,
/* 3 */ BUILDING_SHORT_BOTH,
/* 4 */ BUILDING_SHORT_LEFT,
/* 5 */ BUILDING_SHORT_RIGHT,
/* 6 */ BUILDING_SPIRE_BOTH,
/* 7 */ BUILDING_SPIRE_LEFT,
/* 8 */ BUILDING_SPIRE_RIGHT,
/* 9 */ BUILDING_MOUNTAIN_BOTH,
/* 10 */ BUILDING_MOUNTAIN_LEFT,
/* 11 */ BUILDING_MOUNTAIN_RIGHT,
/* 12 */ BUILDING_TALL_GOLD_BOTH,
/* 13 */ BUILDING_TALL_GOLD_LEFT,
/* 14 */ BUILDING_TALL_GOLD_RIGHT,
};
enum class Sign {
/* -1 */ SIGN_NONE = -1,
/* 0 */ SIGN_TV,
/* 1 */ SIGN_1,
/* 2 */ SIGN_2,
/* 3 */ SIGN_NINTEX,
/* 4 */ SIGN_OVERHEAD,
};
inline std::ostream& operator<<(std::ostream& out, const Venue& venue) {
std::string output;
switch (venue) {
case Venue::VENUE_MUTE_CITY:
output = "VENUE_MUTE_CITY";
break;
case Venue::VENUE_PORT_TOWN:
output = "VENUE_PORT_TOWN";
break;
case Venue::VENUE_BIG_BLUE:
output = "VENUE_BIG_BLUE";
break;
case Venue::VENUE_SAND_OCEAN:
output = "VENUE_SAND_OCEAN";
break;
case Venue::VENUE_DEVILS_FOREST:
output = "VENUE_DEVILS_FOREST";
break;
case Venue::VENUE_WHITE_LAND:
output = "VENUE_WHITE_LAND";
break;
case Venue::VENUE_SECTOR:
output = "VENUE_SECTOR";
break;
case Venue::VENUE_RED_CANYON:
output = "VENUE_RED_CANYON";
break;
case Venue::VENUE_FIRE_FIELD:
output = "VENUE_FIRE_FIELD";
break;
case Venue::VENUE_SILENCE:
output = "VENUE_SILENCE";
break;
case Venue::VENUE_ENDING:
output = "VENUE_ENDING";
break;
}
return out << output;
}
inline std::ostream& operator<<(std::ostream& out, const Skybox& skybox) {
std::string output;
switch (skybox) {
case Skybox::SKYBOX_PURPLE:
output = "SKYBOX_PURPLE";
break;
case Skybox::SKYBOX_TURQUOISE:
output = "SKYBOX_TURQUOISE";
break;
case Skybox::SKYBOX_DESERT:
output = "SKYBOX_DESERT";
break;
case Skybox::SKYBOX_BLUE:
output = "SKYBOX_BLUE";
break;
case Skybox::SKYBOX_NIGHT:
output = "SKYBOX_NIGHT";
break;
case Skybox::SKYBOX_ORANGE:
output = "SKYBOX_ORANGE";
break;
case Skybox::SKYBOX_SUNSET:
output = "SKYBOX_SUNSET";
break;
case Skybox::SKYBOX_SKY_BLUE:
output = "SKYBOX_SKY_BLUE";
break;
}
return out << output;
}
inline std::ostream& operator<<(std::ostream& out, const PitZone& pitZone) {
std::string output;
switch (pitZone) {
case PitZone::PIT_NONE:
output = "PIT_NONE";
break;
case PitZone::PIT_BOTH:
output = "PIT_BOTH";
break;
case PitZone::PIT_LEFT:
output = "PIT_LEFT";
break;
case PitZone::PIT_RIGHT:
output = "PIT_RIGHT";
break;
}
return out << output;
}
inline std::ostream& operator<<(std::ostream& out, const DashZone& dashZone) {
std::string output;
switch (dashZone) {
case DashZone::DASH_NONE:
output = "DASH_NONE";
break;
case DashZone::DASH_MIDDLE:
output = "DASH_MIDDLE";
break;
case DashZone::DASH_LEFT:
output = "DASH_LEFT";
break;
case DashZone::DASH_RIGHT:
output = "DASH_RIGHT";
break;
}
return out << output;
}
inline std::ostream& operator<<(std::ostream& out, const Dirt& dirt) {
std::string output;
switch (dirt) {
case Dirt::DIRT_NONE:
output = "DIRT_NONE";
break;
case Dirt::DIRT_BOTH:
output = "DIRT_BOTH";
break;
case Dirt::DIRT_LEFT:
output = "DIRT_LEFT";
break;
case Dirt::DIRT_RIGHT:
output = "DIRT_RIGHT";
break;
case Dirt::DIRT_MIDDLE:
output = "DIRT_MIDDLE";
break;
}
return out << output;
}
inline std::ostream& operator<<(std::ostream& out, const Ice& ice) {
std::string output;
switch (ice) {
case Ice::ICE_NONE:
output = "ICE_NONE";
break;
case Ice::ICE_BOTH:
output = "ICE_BOTH";
break;
case Ice::ICE_LEFT:
output = "ICE_LEFT";
break;
case Ice::ICE_RIGHT:
output = "ICE_RIGHT";
break;
case Ice::ICE_MIDDLE:
output = "ICE_MIDDLE";
break;
}
return out << output;
}
inline std::ostream& operator<<(std::ostream& out, const Jump& jump) {
std::string output;
switch (jump) {
case Jump::JUMP_NONE:
output = "JUMP_NONE";
break;
case Jump::JUMP_ALL:
output = "JUMP_ALL";
break;
case Jump::JUMP_LEFT:
output = "JUMP_LEFT";
break;
case Jump::JUMP_RIGHT:
output = "JUMP_RIGHT";
break;
}
return out << output;
}
inline std::ostream& operator<<(std::ostream& out, const Landmine& landmine) {
std::string output;
switch (landmine) {
case Landmine::LANDMINE_NONE:
output = "LANDMINE_NONE";
break;
case Landmine::LANDMINE_MIDDLE:
output = "LANDMINE_MIDDLE";
break;
case Landmine::LANDMINE_LEFT:
output = "LANDMINE_LEFT";
break;
case Landmine::LANDMINE_RIGHT:
output = "LANDMINE_RIGHT";
break;
}
return out << output;
}
inline std::ostream& operator<<(std::ostream& out, const Gate& gate) {
std::string output;
switch (gate) {
case Gate::GATE_NONE:
output = "GATE_NONE";
break;
case Gate::GATE_SQUARE:
output = "GATE_SQUARE";
break;
case Gate::GATE_START:
output = "GATE_START";
break;
case Gate::GATE_HEXAGONAL:
output = "GATE_HEXAGONAL";
break;
}
return out << output;
}
inline std::ostream& operator<<(std::ostream& out, const Building& building) {
std::string output;
switch (building) {
case Building::BUILDING_NONE:
output = "BUILDING_NONE";
break;
case Building::BUILDING_TALL_BOTH:
output = "BUILDING_TALL_BOTH";
break;
case Building::BUILDING_TALL_LEFT:
output = "BUILDING_TALL_LEFT";
break;
case Building::BUILDING_TALL_RIGHT:
output = "BUILDING_TALL_RIGHT";
break;
case Building::BUILDING_SHORT_BOTH:
output = "BUILDING_SHORT_BOTH";
break;
case Building::BUILDING_SHORT_LEFT:
output = "BUILDING_SHORT_LEFT";
break;
case Building::BUILDING_SHORT_RIGHT:
output = "BUILDING_SHORT_RIGHT";
break;
case Building::BUILDING_SPIRE_BOTH:
output = "BUILDING_SPIRE_BOTH";
break;
case Building::BUILDING_SPIRE_LEFT:
output = "BUILDING_SPIRE_LEFT";
break;
case Building::BUILDING_SPIRE_RIGHT:
output = "BUILDING_SPIRE_RIGHT";
break;
case Building::BUILDING_MOUNTAIN_BOTH:
output = "BUILDING_MOUNTAIN_BOTH";
break;
case Building::BUILDING_MOUNTAIN_LEFT:
output = "BUILDING_MOUNTAIN_LEFT";
break;
case Building::BUILDING_MOUNTAIN_RIGHT:
output = "BUILDING_MOUNTAIN_RIGHT";
break;
case Building::BUILDING_TALL_GOLD_BOTH:
output = "BUILDING_TALL_GOLD_BOTH";
break;
case Building::BUILDING_TALL_GOLD_LEFT:
output = "BUILDING_TALL_GOLD_LEFT";
break;
case Building::BUILDING_TALL_GOLD_RIGHT:
output = "BUILDING_TALL_GOLD_RIGHT";
break;
}
return out << output;
}
inline std::ostream& operator<<(std::ostream& out, const Sign& sign) {
std::string output;
switch (sign) {
case Sign::SIGN_NONE:
output = "SIGN_NONE";
break;
case Sign::SIGN_TV:
output = "SIGN_TV";
break;
case Sign::SIGN_1:
output = "SIGN_1";
break;
case Sign::SIGN_2:
output = "SIGN_2";
break;
case Sign::SIGN_NINTEX:
output = "SIGN_NINTEX";
break;
case Sign::SIGN_OVERHEAD:
output = "SIGN_OVERHEAD";
break;
}
return out << output;
}
}