48 lines
1.5 KiB
C++
48 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
// Total de "frames" gravats a 60Hz de referencia. Equival a 2000/60 ~ 33.3s
|
|
// reals, independentment del refresc real perque el playback es time-based
|
|
// (index = elapsed_s * 60).
|
|
constexpr int TOTAL_DEMO_DATA = 2000;
|
|
|
|
// Pulsacions per frame de referencia gravades a disc / reproduides al playback.
|
|
struct DemoKeys {
|
|
Uint8 left;
|
|
Uint8 right;
|
|
Uint8 no_input;
|
|
Uint8 fire;
|
|
Uint8 fire_left;
|
|
Uint8 fire_right;
|
|
|
|
explicit DemoKeys(Uint8 l = 0, Uint8 r = 0, Uint8 ni = 0, Uint8 f = 0, Uint8 fl = 0, Uint8 fr = 0)
|
|
: left(l),
|
|
right(r),
|
|
no_input(ni),
|
|
fire(f),
|
|
fire_left(fl),
|
|
fire_right(fr) {}
|
|
};
|
|
|
|
// Una demo completa: vector de frames.
|
|
using DemoData = std::vector<DemoKeys>;
|
|
|
|
// Estat del subsistema de demo dins de Game.
|
|
struct Demo {
|
|
bool enabled{false}; // Mode demo actiu (reproduccio)
|
|
bool recording{false}; // Mode gravacio actiu
|
|
float elapsed_s{0.0F}; // Temps acumulat des de l'inici de la demo
|
|
int index{0}; // index = elapsed_s * 60 (derivat)
|
|
DemoKeys keys; // Buffer de tecles del frame actual (gravacio)
|
|
std::vector<DemoData> data; // Vector de sets de demo carregats (multi-fitxer)
|
|
};
|
|
|
|
// Carrega un fitxer .bin (TOTAL_DEMO_DATA * sizeof(DemoKeys) bytes) i
|
|
// retorna el DemoData. Si el fitxer no es troba, retorna un DemoData buit.
|
|
auto loadDemoDataFromBytes(const std::vector<uint8_t> &bytes) -> DemoData;
|