Initial Vectorail GC format library

This commit is contained in:
2026-08-02 17:05:27 +02:00
commit 8c4e1bcacb
28 changed files with 3426 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
#include "gc/GcTargetEffect.hpp"
#include <cstdlib>
#include <iostream>
#include <set>
#include <string>
int main(int argc, char** argv) {
if (argc < 3) {
std::cerr << "usage: opencoaster-effect-probe EFC_DATA UV_DATA [first [last]]\n";
return 2;
}
GcTargetEffectBank bank;
std::string error;
if (!bank.load(argv[1], argv[2], &error)) {
std::cerr << error << '\n';
return 1;
}
const int first = argc > 3 ? std::atoi(argv[3]) : 0;
const int last = argc > 4 ? std::atoi(argv[4]) : first;
const int uvBase = argc > 5 ? std::atoi(argv[5]) : 0;
for (int effect = first; effect <= last; ++effect) {
std::cout << "effect " << effect << " lifetime=" << bank.lifetime(effect) << '\n';
const int lifetime = bank.lifetime(effect);
const int sampleTicks[] = {0, 1, lifetime / 2, lifetime > 0 ? lifetime - 1 : 0};
std::set<int> seenTicks;
for (const int tick : sampleTicks) {
if (!seenTicks.insert(tick).second) continue;
const auto sprites = bank.evaluate(effect, static_cast<float>(tick), uvBase);
std::cout << " tick " << tick << " sprites=" << sprites.size() << '\n';
for (const auto& sprite : sprites) {
const GcUvCell* cell = bank.uvCell(sprite.uvRecord, sprite.frame);
std::cout << " uv=" << sprite.uvRecord << " tex="
<< bank.uvTexture(sprite.uvRecord) << " frame=" << sprite.frame;
if (cell) {
std::cout << " cell=" << cell->x << ',' << cell->y << ' '
<< cell->width << 'x' << cell->height;
}
std::cout << " pos=" << sprite.offsetPixels.x << ',' << sprite.offsetPixels.y
<< " scale=" << sprite.scale.x << ',' << sprite.scale.y
<< " rot=" << sprite.rotationDegrees
<< " rgba=" << sprite.color.r << ',' << sprite.color.g << ','
<< sprite.color.b << ',' << sprite.color.a << '\n';
}
}
}
}