tidy-fix automàtic (sense naming)
This commit is contained in:
1 parent
358e91ea30
commit
b7a551c158
81 files changed
+1549
-831
No files matched your search
@@ -42,7 +42,9 @@ namespace scenes {
|
||||
switch (phase_) {
|
||||
case Phase::FadingIn:
|
||||
fade_.tick(delta_ms);
|
||||
if (fade_.done()) phase_ = Phase::Showing;
|
||||
if (fade_.done()) {
|
||||
phase_ = Phase::Showing;
|
||||
}
|
||||
break;
|
||||
|
||||
case Phase::Showing:
|
||||
@@ -60,7 +62,9 @@ namespace scenes {
|
||||
|
||||
case Phase::FadingOut:
|
||||
fade_.tick(delta_ms);
|
||||
if (fade_.done()) phase_ = Phase::Done;
|
||||
if (fade_.done()) {
|
||||
phase_ = Phase::Done;
|
||||
}
|
||||
break;
|
||||
|
||||
case Phase::Done:
|
||||
|
||||
@@ -22,8 +22,8 @@ namespace scenes {
|
||||
public:
|
||||
void onEnter() override;
|
||||
void tick(int delta_ms) override;
|
||||
bool done() const override { return phase_ == Phase::Done; }
|
||||
int nextState() const override { return 0; }
|
||||
[[nodiscard]] auto done() const -> bool override { return phase_ == Phase::Done; }
|
||||
[[nodiscard]] auto nextState() const -> int override { return 0; }
|
||||
|
||||
private:
|
||||
enum class Phase { FadingIn,
|
||||
|
||||
@@ -35,10 +35,12 @@ namespace scenes {
|
||||
render();
|
||||
}
|
||||
|
||||
void BootLoaderScene::render() const {
|
||||
void BootLoaderScene::render() {
|
||||
JD8_ClearScreen(BG_COLOR);
|
||||
|
||||
if (!Options::game.show_preload) return;
|
||||
if (!Options::game.show_preload) {
|
||||
return;
|
||||
}
|
||||
|
||||
const float pct = Resource::Cache::get()->getProgress();
|
||||
const int filled = static_cast<int>(static_cast<float>(BAR_W) * pct);
|
||||
|
||||
@@ -15,10 +15,10 @@ namespace scenes {
|
||||
|
||||
void onEnter() override;
|
||||
void tick(int delta_ms) override;
|
||||
bool done() const override { return done_; }
|
||||
[[nodiscard]] auto done() const -> bool override { return done_; }
|
||||
|
||||
private:
|
||||
void render() const;
|
||||
static void render();
|
||||
|
||||
bool done_{false};
|
||||
};
|
||||
|
||||
@@ -18,14 +18,14 @@ namespace {
|
||||
};
|
||||
|
||||
constexpr CocheFrame COCHE_FRAMES[8] = {
|
||||
{214, 152},
|
||||
{214, 104},
|
||||
{214, 56},
|
||||
{214, 104},
|
||||
{214, 152},
|
||||
{214, 8},
|
||||
{108, 152},
|
||||
{214, 8},
|
||||
{.x = 214, .y = 152},
|
||||
{.x = 214, .y = 104},
|
||||
{.x = 214, .y = 56},
|
||||
{.x = 214, .y = 104},
|
||||
{.x = 214, .y = 152},
|
||||
{.x = 214, .y = 8},
|
||||
{.x = 108, .y = 152},
|
||||
{.x = 214, .y = 8},
|
||||
};
|
||||
|
||||
constexpr int CONTADOR_MAX = 3100; // ~62 s de crèdits a 20 ms/tick
|
||||
@@ -101,7 +101,7 @@ namespace scenes {
|
||||
|
||||
void CreditsScene::writeTrickIni() {
|
||||
FILE* ini = std::fopen("trick.ini", "wb");
|
||||
if (ini) {
|
||||
if (ini != nullptr) {
|
||||
std::fwrite("1", 1, 1, ini);
|
||||
std::fclose(ini);
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace scenes {
|
||||
|
||||
void onEnter() override;
|
||||
void tick(int delta_ms) override;
|
||||
bool done() const override { return phase_ == Phase::Done; }
|
||||
[[nodiscard]] auto done() const -> bool override { return phase_ == Phase::Done; }
|
||||
|
||||
private:
|
||||
enum class Phase { Rolling,
|
||||
@@ -36,7 +36,7 @@ namespace scenes {
|
||||
Done };
|
||||
|
||||
void render();
|
||||
void writeTrickIni();
|
||||
static void writeTrickIni();
|
||||
|
||||
SurfaceHandle vaddr2_; // gfx/final.gif (sprites i coches)
|
||||
SurfaceHandle vaddr3_; // gfx/finals.gif (fons / parallax)
|
||||
|
||||
@@ -10,7 +10,9 @@ namespace scenes {
|
||||
loop_(loop) {}
|
||||
|
||||
void FrameAnimator::tick(int delta_ms) {
|
||||
if (finished_) return;
|
||||
if (finished_) {
|
||||
return;
|
||||
}
|
||||
elapsed_ms_ += delta_ms;
|
||||
while (elapsed_ms_ >= frame_ms_) {
|
||||
elapsed_ms_ -= frame_ms_;
|
||||
|
||||
@@ -15,9 +15,9 @@ namespace scenes {
|
||||
|
||||
void tick(int delta_ms);
|
||||
|
||||
int frame() const { return current_frame_; }
|
||||
bool done() const { return !loop_ && finished_; }
|
||||
int numFrames() const { return num_frames_; }
|
||||
[[nodiscard]] auto frame() const -> int { return current_frame_; }
|
||||
[[nodiscard]] auto done() const -> bool { return !loop_ && finished_; }
|
||||
[[nodiscard]] auto numFrames() const -> int { return num_frames_; }
|
||||
|
||||
void reset();
|
||||
void setFrameMs(int frame_ms) { frame_ms_ = frame_ms; }
|
||||
|
||||
@@ -108,14 +108,28 @@ namespace scenes {
|
||||
// els índexs 16..31 (grup del verd brillant del logo).
|
||||
for (int i = 16; i < 32; i++) {
|
||||
if (i == 17) {
|
||||
if (pal_[i].r < 255) pal_[i].r++;
|
||||
if (pal_[i].g < 255) pal_[i].g++;
|
||||
if (pal_[i].b < 255) pal_[i].b++;
|
||||
if (pal_[i].r < 255) {
|
||||
pal_[i].r++;
|
||||
}
|
||||
if (pal_[i].g < 255) {
|
||||
pal_[i].g++;
|
||||
}
|
||||
if (pal_[i].b < 255) {
|
||||
pal_[i].b++;
|
||||
}
|
||||
}
|
||||
if (pal_[i].b < pal_[i].g) {
|
||||
pal_[i].b++;
|
||||
}
|
||||
if (pal_[i].b > pal_[i].g) {
|
||||
pal_[i].b--;
|
||||
}
|
||||
if (pal_[i].r < pal_[i].g) {
|
||||
pal_[i].r++;
|
||||
}
|
||||
if (pal_[i].r > pal_[i].g) {
|
||||
pal_[i].r--;
|
||||
}
|
||||
if (pal_[i].b < pal_[i].g) pal_[i].b++;
|
||||
if (pal_[i].b > pal_[i].g) pal_[i].b--;
|
||||
if (pal_[i].r < pal_[i].g) pal_[i].r++;
|
||||
if (pal_[i].r > pal_[i].g) pal_[i].r--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace scenes {
|
||||
|
||||
void onEnter() override;
|
||||
void tick(int delta_ms) override;
|
||||
bool done() const override { return phase_ == Phase::Done; }
|
||||
[[nodiscard]] auto done() const -> bool override { return phase_ == Phase::Done; }
|
||||
|
||||
private:
|
||||
enum class Phase {
|
||||
|
||||
@@ -27,21 +27,21 @@ namespace {
|
||||
};
|
||||
|
||||
constexpr RevealStep REVEAL_STEPS[] = {
|
||||
{100, 27, 68, false, false}, // J
|
||||
{100, 53, 96, false, false}, // JA
|
||||
{100, 66, 109, false, false}, // JAI
|
||||
{200, 92, 136, false, false}, // JAIL
|
||||
{200, 92, -1, true, false}, // JAIL (clear, sense avió — parpelleig)
|
||||
{100, 118, 160, false, false}, // JAILG
|
||||
{100, 145, 188, false, false}, // JAILGA
|
||||
{100, 178, 221, false, false}, // JAILGAM
|
||||
{100, 205, 248, false, false}, // JAILGAME
|
||||
{200, 0, 274, false, true}, // JAILGAMES (wordmark complet) + avió
|
||||
{200, 0, -1, true, true}, // JAILGAMES (clear, sense avió)
|
||||
{200, 0, 274, false, true}, // JAILGAMES + avió (sense clear)
|
||||
{200, 0, -1, true, true}, // JAILGAMES (clear, sense avió)
|
||||
{200, 0, 274, false, true}, // JAILGAMES + avió (sense clear)
|
||||
{200, 0, -1, true, true}, // JAILGAMES (clear, sense avió)
|
||||
{.duration_ms = 100, .body_w = 27, .plane_x = 68, .clear = false, .wordmark = false}, // J
|
||||
{.duration_ms = 100, .body_w = 53, .plane_x = 96, .clear = false, .wordmark = false}, // JA
|
||||
{.duration_ms = 100, .body_w = 66, .plane_x = 109, .clear = false, .wordmark = false}, // JAI
|
||||
{.duration_ms = 200, .body_w = 92, .plane_x = 136, .clear = false, .wordmark = false}, // JAIL
|
||||
{.duration_ms = 200, .body_w = 92, .plane_x = -1, .clear = true, .wordmark = false}, // JAIL (clear, sense avió — parpelleig)
|
||||
{.duration_ms = 100, .body_w = 118, .plane_x = 160, .clear = false, .wordmark = false}, // JAILG
|
||||
{.duration_ms = 100, .body_w = 145, .plane_x = 188, .clear = false, .wordmark = false}, // JAILGA
|
||||
{.duration_ms = 100, .body_w = 178, .plane_x = 221, .clear = false, .wordmark = false}, // JAILGAM
|
||||
{.duration_ms = 100, .body_w = 205, .plane_x = 248, .clear = false, .wordmark = false}, // JAILGAME
|
||||
{.duration_ms = 200, .body_w = 0, .plane_x = 274, .clear = false, .wordmark = true}, // JAILGAMES (wordmark complet) + avió
|
||||
{.duration_ms = 200, .body_w = 0, .plane_x = -1, .clear = true, .wordmark = true}, // JAILGAMES (clear, sense avió)
|
||||
{.duration_ms = 200, .body_w = 0, .plane_x = 274, .clear = false, .wordmark = true}, // JAILGAMES + avió (sense clear)
|
||||
{.duration_ms = 200, .body_w = 0, .plane_x = -1, .clear = true, .wordmark = true}, // JAILGAMES (clear, sense avió)
|
||||
{.duration_ms = 200, .body_w = 0, .plane_x = 274, .clear = false, .wordmark = true}, // JAILGAMES + avió (sense clear)
|
||||
{.duration_ms = 200, .body_w = 0, .plane_x = -1, .clear = true, .wordmark = true}, // JAILGAMES (clear, sense avió)
|
||||
};
|
||||
constexpr int REVEAL_COUNT = sizeof(REVEAL_STEPS) / sizeof(REVEAL_STEPS[0]);
|
||||
|
||||
@@ -88,7 +88,9 @@ namespace scenes {
|
||||
|
||||
case Phase::Reveal: {
|
||||
const RevealStep& s = REVEAL_STEPS[reveal_index_];
|
||||
if (s.clear) JD8_ClearScreen(0);
|
||||
if (s.clear) {
|
||||
JD8_ClearScreen(0);
|
||||
}
|
||||
if (s.wordmark) {
|
||||
drawWordmark(gfx_);
|
||||
} else if (s.body_w > 0) {
|
||||
@@ -121,14 +123,28 @@ namespace scenes {
|
||||
// els altres convergeixen cap al mateix gris mitjà.
|
||||
for (int i = 16; i < 32; i++) {
|
||||
if (i == 17) {
|
||||
if (pal_[i].r < 255) pal_[i].r++;
|
||||
if (pal_[i].g < 255) pal_[i].g++;
|
||||
if (pal_[i].b < 255) pal_[i].b++;
|
||||
if (pal_[i].r < 255) {
|
||||
pal_[i].r++;
|
||||
}
|
||||
if (pal_[i].g < 255) {
|
||||
pal_[i].g++;
|
||||
}
|
||||
if (pal_[i].b < 255) {
|
||||
pal_[i].b++;
|
||||
}
|
||||
}
|
||||
if (pal_[i].b < pal_[i].g) {
|
||||
pal_[i].b++;
|
||||
}
|
||||
if (pal_[i].b > pal_[i].g) {
|
||||
pal_[i].b--;
|
||||
}
|
||||
if (pal_[i].r < pal_[i].g) {
|
||||
pal_[i].r++;
|
||||
}
|
||||
if (pal_[i].r > pal_[i].g) {
|
||||
pal_[i].r--;
|
||||
}
|
||||
if (pal_[i].b < pal_[i].g) pal_[i].b++;
|
||||
if (pal_[i].b > pal_[i].g) pal_[i].b--;
|
||||
if (pal_[i].r < pal_[i].g) pal_[i].r++;
|
||||
if (pal_[i].r > pal_[i].g) pal_[i].r--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace scenes {
|
||||
|
||||
void onEnter() override;
|
||||
void tick(int delta_ms) override;
|
||||
bool done() const override { return phase_ == Phase::Done; }
|
||||
[[nodiscard]] auto done() const -> bool override { return phase_ == Phase::Done; }
|
||||
|
||||
private:
|
||||
enum class Phase {
|
||||
|
||||
@@ -146,17 +146,17 @@ namespace {
|
||||
}
|
||||
|
||||
constexpr SpritePhase variant_0[] = {
|
||||
{0, 200, v0_walk_right, true},
|
||||
{0, 200, v0_pull_map_right, true},
|
||||
{200, 0, v0_pull_map_right, true}, // guarda el mapa (reprodueix inversament)
|
||||
{200, 80, v0_walk_left_to_80, true},
|
||||
{0, 200, v0_pull_map_left, true},
|
||||
{300, 95, v0_momia_left, true},
|
||||
{0, 50, v0_turn, true},
|
||||
{0, 49, v0_jump1, true},
|
||||
{50, 99, v0_jump2, true},
|
||||
{80, 0, v0_walk_final, true},
|
||||
{0, 150, v0_final, true},
|
||||
{.start_i = 0, .end_i = 200, .render = v0_walk_right, .skippable = true},
|
||||
{.start_i = 0, .end_i = 200, .render = v0_pull_map_right, .skippable = true},
|
||||
{.start_i = 200, .end_i = 0, .render = v0_pull_map_right, .skippable = true}, // guarda el mapa (reprodueix inversament)
|
||||
{.start_i = 200, .end_i = 80, .render = v0_walk_left_to_80, .skippable = true},
|
||||
{.start_i = 0, .end_i = 200, .render = v0_pull_map_left, .skippable = true},
|
||||
{.start_i = 300, .end_i = 95, .render = v0_momia_left, .skippable = true},
|
||||
{.start_i = 0, .end_i = 50, .render = v0_turn, .skippable = true},
|
||||
{.start_i = 0, .end_i = 49, .render = v0_jump1, .skippable = true},
|
||||
{.start_i = 50, .end_i = 99, .render = v0_jump2, .skippable = true},
|
||||
{.start_i = 80, .end_i = 0, .render = v0_walk_final, .skippable = true},
|
||||
{.start_i = 0, .end_i = 150, .render = v0_final, .skippable = true},
|
||||
};
|
||||
|
||||
// =========================================================================
|
||||
@@ -224,13 +224,13 @@ namespace {
|
||||
}
|
||||
|
||||
constexpr SpritePhase variant_1[] = {
|
||||
{0, 200, v1_walk_right, true},
|
||||
{0, 300, v1_pull_map, true},
|
||||
{0, 100, v1_interrogant, true},
|
||||
{0, 200, v1_drop_map, true},
|
||||
{0, 75, v1_stone_fall, true},
|
||||
{0, 19, v1_stone_break, true},
|
||||
{0, 200, v1_final, true},
|
||||
{.start_i = 0, .end_i = 200, .render = v1_walk_right, .skippable = true},
|
||||
{.start_i = 0, .end_i = 300, .render = v1_pull_map, .skippable = true},
|
||||
{.start_i = 0, .end_i = 100, .render = v1_interrogant, .skippable = true},
|
||||
{.start_i = 0, .end_i = 200, .render = v1_drop_map, .skippable = true},
|
||||
{.start_i = 0, .end_i = 75, .render = v1_stone_fall, .skippable = true},
|
||||
{.start_i = 0, .end_i = 19, .render = v1_stone_break, .skippable = true},
|
||||
{.start_i = 0, .end_i = 200, .render = v1_final, .skippable = true},
|
||||
};
|
||||
|
||||
// =========================================================================
|
||||
@@ -268,17 +268,17 @@ namespace {
|
||||
}
|
||||
|
||||
constexpr SpritePhase variant_2[] = {
|
||||
{0, 145, v2_approach, true},
|
||||
{0, 100, v2_still, true},
|
||||
{0, 50, v2_horn, true},
|
||||
{0, 800, v2_ball, true},
|
||||
{.start_i = 0, .end_i = 145, .render = v2_approach, .skippable = true},
|
||||
{.start_i = 0, .end_i = 100, .render = v2_still, .skippable = true},
|
||||
{.start_i = 0, .end_i = 50, .render = v2_horn, .skippable = true},
|
||||
{.start_i = 0, .end_i = 800, .render = v2_ball, .skippable = true},
|
||||
};
|
||||
|
||||
// =========================================================================
|
||||
// Dispatch per variant
|
||||
// =========================================================================
|
||||
|
||||
const SpritePhase* variant_table(int variant) {
|
||||
auto variant_table(int variant) -> const SpritePhase* {
|
||||
switch (variant) {
|
||||
case 0:
|
||||
return variant_0;
|
||||
@@ -290,7 +290,7 @@ namespace {
|
||||
return variant_0;
|
||||
}
|
||||
|
||||
int variant_length(int variant) {
|
||||
auto variant_length(int variant) -> int {
|
||||
switch (variant) {
|
||||
case 0:
|
||||
return sizeof(variant_0) / sizeof(variant_0[0]);
|
||||
@@ -302,11 +302,11 @@ namespace {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int phase_step_count(const SpritePhase& p) {
|
||||
auto phase_step_count(const SpritePhase& p) -> int {
|
||||
return std::abs(p.end_i - p.start_i) + 1;
|
||||
}
|
||||
|
||||
int phase_current_i(const SpritePhase& p, int step) {
|
||||
auto phase_current_i(const SpritePhase& p, int step) -> int {
|
||||
return p.end_i >= p.start_i ? p.start_i + step : p.start_i - step;
|
||||
}
|
||||
|
||||
@@ -334,7 +334,9 @@ namespace scenes {
|
||||
}
|
||||
|
||||
void IntroSpritesScene::tick(int delta_ms) {
|
||||
if (done_) return;
|
||||
if (done_) {
|
||||
return;
|
||||
}
|
||||
|
||||
const SpritePhase* phases = variant_table(variant_);
|
||||
const int num_phases = variant_length(variant_);
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace scenes {
|
||||
|
||||
void onEnter() override;
|
||||
void tick(int delta_ms) override;
|
||||
bool done() const override { return done_; }
|
||||
[[nodiscard]] auto done() const -> bool override { return done_; }
|
||||
|
||||
private:
|
||||
SurfaceHandle gfx_;
|
||||
|
||||
@@ -62,7 +62,9 @@ namespace scenes {
|
||||
switch (phase_) {
|
||||
case Phase::FadingIn:
|
||||
fade_.tick(delta_ms);
|
||||
if (fade_.done()) phase_ = Phase::Showing;
|
||||
if (fade_.done()) {
|
||||
phase_ = Phase::Showing;
|
||||
}
|
||||
break;
|
||||
|
||||
case Phase::Showing: {
|
||||
@@ -70,20 +72,26 @@ namespace scenes {
|
||||
palmeres_acc_ms_ += delta_ms;
|
||||
while (palmeres_acc_ms_ >= 80) {
|
||||
palmeres_acc_ms_ -= 80;
|
||||
if (--palmeres_ < 0) palmeres_ = 319;
|
||||
if (--palmeres_ < 0) {
|
||||
palmeres_ = 319;
|
||||
}
|
||||
}
|
||||
|
||||
// Horitzó: 1 pixel cada 320 ms (= cada 16 ticks × 20 ms)
|
||||
horitzo_acc_ms_ += delta_ms;
|
||||
while (horitzo_acc_ms_ >= 320) {
|
||||
horitzo_acc_ms_ -= 320;
|
||||
if (--horitzo_ < 0) horitzo_ = 319;
|
||||
if (--horitzo_ < 0) {
|
||||
horitzo_ = 319;
|
||||
}
|
||||
}
|
||||
|
||||
camello_.tick(delta_ms);
|
||||
|
||||
blink_ms_ += delta_ms;
|
||||
if (blink_ms_ >= 2000) blink_ms_ %= 2000;
|
||||
if (blink_ms_ >= 2000) {
|
||||
blink_ms_ %= 2000;
|
||||
}
|
||||
|
||||
render();
|
||||
|
||||
@@ -102,7 +110,9 @@ namespace scenes {
|
||||
|
||||
case Phase::FadingOut:
|
||||
fade_.tick(delta_ms);
|
||||
if (fade_.done()) phase_ = Phase::Done;
|
||||
if (fade_.done()) {
|
||||
phase_ = Phase::Done;
|
||||
}
|
||||
break;
|
||||
|
||||
case Phase::Done:
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace scenes {
|
||||
public:
|
||||
void onEnter() override;
|
||||
void tick(int delta_ms) override;
|
||||
bool done() const override { return phase_ == Phase::Done; }
|
||||
[[nodiscard]] auto done() const -> bool override { return phase_ == Phase::Done; }
|
||||
|
||||
private:
|
||||
enum class Phase { FadingIn,
|
||||
|
||||
@@ -32,7 +32,9 @@ namespace scenes {
|
||||
switch (phase_) {
|
||||
case Phase::FadingIn:
|
||||
fade_.tick(delta_ms);
|
||||
if (fade_.done()) phase_ = Phase::Showing;
|
||||
if (fade_.done()) {
|
||||
phase_ = Phase::Showing;
|
||||
}
|
||||
break;
|
||||
|
||||
case Phase::Showing:
|
||||
@@ -53,7 +55,9 @@ namespace scenes {
|
||||
|
||||
case Phase::FadingOut:
|
||||
fade_.tick(delta_ms);
|
||||
if (fade_.done()) phase_ = Phase::Done;
|
||||
if (fade_.done()) {
|
||||
phase_ = Phase::Done;
|
||||
}
|
||||
break;
|
||||
|
||||
case Phase::Done:
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace scenes {
|
||||
public:
|
||||
void onEnter() override;
|
||||
void tick(int delta_ms) override;
|
||||
bool done() const override { return phase_ == Phase::Done; }
|
||||
[[nodiscard]] auto done() const -> bool override { return phase_ == Phase::Done; }
|
||||
|
||||
private:
|
||||
enum class Phase { FadingIn,
|
||||
|
||||
@@ -13,7 +13,9 @@ namespace scenes {
|
||||
}
|
||||
|
||||
void PaletteFade::tick(int /*delta_ms*/) {
|
||||
if (!active_) return;
|
||||
if (!active_) {
|
||||
return;
|
||||
}
|
||||
// El fade té 32 passos interns. Amb un tick per frame (~16ms)
|
||||
// dura ~512ms — el mateix temps que la versió bloquejant original.
|
||||
// Si en el futur volem fer-lo genuinament time-based (p.ex. "fade
|
||||
|
||||
@@ -20,8 +20,8 @@ namespace scenes {
|
||||
|
||||
void tick(int delta_ms);
|
||||
|
||||
bool active() const { return active_; }
|
||||
bool done() const { return !active_; }
|
||||
[[nodiscard]] auto active() const -> bool { return active_; }
|
||||
[[nodiscard]] auto done() const -> bool { return !active_; }
|
||||
|
||||
private:
|
||||
bool active_{false};
|
||||
|
||||
@@ -24,14 +24,14 @@ namespace scenes {
|
||||
|
||||
virtual void tick(int delta_ms) = 0;
|
||||
|
||||
virtual bool done() const = 0;
|
||||
[[nodiscard]] virtual auto done() const -> bool = 0;
|
||||
|
||||
// Valor retornat al caller quan l'escena acaba — equivalent al int
|
||||
// que retornaven les velles funcions `Go()` de ModuleSequence:
|
||||
// 1 = continuar amb la següent escena segons info::ctx
|
||||
// 0 = entrar al gameplay (ModuleGame)
|
||||
// -1 = eixir del joc
|
||||
virtual int nextState() const { return 1; }
|
||||
[[nodiscard]] virtual auto nextState() const -> int { return 1; }
|
||||
};
|
||||
|
||||
} // namespace scenes
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace scenes {
|
||||
|
||||
SceneRegistry& SceneRegistry::instance() {
|
||||
auto SceneRegistry::instance() -> SceneRegistry& {
|
||||
static SceneRegistry inst;
|
||||
return inst;
|
||||
}
|
||||
@@ -11,9 +11,11 @@ namespace scenes {
|
||||
factories_[state_key] = std::move(factory);
|
||||
}
|
||||
|
||||
std::unique_ptr<Scene> SceneRegistry::tryCreate(int state_key) const {
|
||||
auto SceneRegistry::tryCreate(int state_key) const -> std::unique_ptr<Scene> {
|
||||
const auto it = factories_.find(state_key);
|
||||
if (it == factories_.end()) return nullptr;
|
||||
if (it == factories_.end()) {
|
||||
return nullptr;
|
||||
}
|
||||
return it->second();
|
||||
}
|
||||
|
||||
|
||||
@@ -21,13 +21,13 @@ namespace scenes {
|
||||
public:
|
||||
using Factory = std::function<std::unique_ptr<Scene>()>;
|
||||
|
||||
static SceneRegistry& instance();
|
||||
static auto instance() -> SceneRegistry&;
|
||||
|
||||
void registerScene(int state_key, Factory factory);
|
||||
|
||||
// Retorna `nullptr` si no hi ha cap escena registrada per a aquest
|
||||
// state. El caller hauria de caure al path legacy en aquest cas.
|
||||
std::unique_ptr<Scene> tryCreate(int state_key) const;
|
||||
auto tryCreate(int state_key) const -> std::unique_ptr<Scene>;
|
||||
|
||||
private:
|
||||
SceneRegistry() = default;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
namespace scenes {
|
||||
|
||||
namespace {
|
||||
std::string basename(const char* path) {
|
||||
auto basename(const char* path) -> std::string {
|
||||
std::string s = path;
|
||||
auto pos = s.find_last_of("/\\");
|
||||
return pos == std::string::npos ? s : s.substr(pos + 1);
|
||||
@@ -15,7 +15,9 @@ namespace scenes {
|
||||
} // namespace
|
||||
|
||||
void playMusic(const char* filename, int loop) {
|
||||
if (!filename) return;
|
||||
if (filename == nullptr) {
|
||||
return;
|
||||
}
|
||||
Audio::get()->playMusic(basename(filename), loop);
|
||||
}
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@ namespace scenes {
|
||||
|
||||
case Phase::Tomba1ScrollIn: {
|
||||
phase_acc_ms_ += delta_ms;
|
||||
const int contador = std::min(128, phase_acc_ms_ / TICK_MS + 1);
|
||||
const int contador = std::min(128, (phase_acc_ms_ / TICK_MS) + 1);
|
||||
// Dos blits solapats: el primer avança a velocitat completa,
|
||||
// el segon (contingut de la dreta del src) a meitat (contador>>1).
|
||||
JD8_Blit(70, 60, gfx_, 0, contador, 178, 70);
|
||||
@@ -130,7 +130,7 @@ namespace scenes {
|
||||
|
||||
case Phase::Tomba2ScrollIn: {
|
||||
phase_acc_ms_ += delta_ms;
|
||||
const int contador = std::min(94, phase_acc_ms_ / TICK_MS + 1);
|
||||
const int contador = std::min(94, (phase_acc_ms_ / TICK_MS) + 1);
|
||||
JD8_Blit(55, 53, gfx_, 0, 158 - contador, 211, contador);
|
||||
if (phase_acc_ms_ >= TOMBA2_SCROLL_MS) {
|
||||
phase_ = Phase::Tomba2Hold;
|
||||
@@ -150,7 +150,7 @@ namespace scenes {
|
||||
|
||||
case Phase::Tomba2Reveal: {
|
||||
phase_acc_ms_ += delta_ms;
|
||||
const int contador = std::min(80, phase_acc_ms_ / TICK_MS + 1);
|
||||
const int contador = std::min(80, (phase_acc_ms_ / TICK_MS) + 1);
|
||||
// Revelat horitzontal simètric: l'amplada creix 2px per tick
|
||||
// i el src_x es desplaça a l'esquerra el mateix.
|
||||
JD8_Blit(80, 68, gfx_, 160 - (contador * 2), 0, contador * 2, 64);
|
||||
|
||||
@@ -31,8 +31,8 @@ namespace scenes {
|
||||
|
||||
void onEnter() override;
|
||||
void tick(int delta_ms) override;
|
||||
bool done() const override { return phase_ == Phase::Done; }
|
||||
int nextState() const override { return 0; }
|
||||
[[nodiscard]] auto done() const -> bool override { return phase_ == Phase::Done; }
|
||||
[[nodiscard]] auto nextState() const -> int override { return 0; }
|
||||
|
||||
private:
|
||||
enum class Phase {
|
||||
@@ -50,7 +50,7 @@ namespace scenes {
|
||||
};
|
||||
|
||||
void swapToTomba2();
|
||||
void beginRedPulseSetup();
|
||||
static void beginRedPulseSetup();
|
||||
void beginFinalFade();
|
||||
|
||||
SurfaceHandle gfx_;
|
||||
|
||||
@@ -105,7 +105,9 @@ namespace scenes {
|
||||
// el final natural crida JA_FadeOutMusic (beginFinalFade() distingeix).
|
||||
if (!skip_triggered_ && JI_AnyKey()) {
|
||||
skip_triggered_ = true;
|
||||
if (num_piramide_at_start_ != 7) Audio::get()->fadeOutMusic(250);
|
||||
if (num_piramide_at_start_ != 7) {
|
||||
Audio::get()->fadeOutMusic(250);
|
||||
}
|
||||
fade_.startFadeOut();
|
||||
phase_ = Phase::FadeFinal;
|
||||
}
|
||||
@@ -118,7 +120,7 @@ namespace scenes {
|
||||
const int slide_idx = (phase_ == Phase::Slide1Enter ? 0
|
||||
: phase_ == Phase::Slide2Enter ? 1
|
||||
: 2);
|
||||
const float t = std::min(1.0f, static_cast<float>(phase_acc_ms_) / static_cast<float>(SCROLL_MS));
|
||||
const float t = std::min(1.0F, static_cast<float>(phase_acc_ms_) / static_cast<float>(SCROLL_MS));
|
||||
const float eased = Easing::outCubic(t);
|
||||
const int pos_x = Easing::lerpInt(SLIDE_START_X[slide_idx], 0, eased);
|
||||
drawSlide(slide_idx, pos_x);
|
||||
@@ -126,12 +128,13 @@ namespace scenes {
|
||||
if (phase_acc_ms_ >= SCROLL_MS) {
|
||||
// Garanteix posició final exacta (pos_x=0).
|
||||
drawSlide(slide_idx, 0);
|
||||
if (phase_ == Phase::Slide1Enter)
|
||||
if (phase_ == Phase::Slide1Enter) {
|
||||
phase_ = Phase::Slide1Hold;
|
||||
else if (phase_ == Phase::Slide2Enter)
|
||||
} else if (phase_ == Phase::Slide2Enter) {
|
||||
phase_ = Phase::Slide2Hold;
|
||||
else
|
||||
} else {
|
||||
phase_ = Phase::Slide3Hold;
|
||||
}
|
||||
phase_acc_ms_ = 0;
|
||||
}
|
||||
break;
|
||||
@@ -142,10 +145,11 @@ namespace scenes {
|
||||
phase_acc_ms_ += delta_ms;
|
||||
if (phase_acc_ms_ >= HOLD_MS) {
|
||||
fade_.startFadeOut();
|
||||
if (phase_ == Phase::Slide1Hold)
|
||||
if (phase_ == Phase::Slide1Hold) {
|
||||
phase_ = Phase::FadeOut1;
|
||||
else
|
||||
} else {
|
||||
phase_ = Phase::FadeOut2;
|
||||
}
|
||||
phase_acc_ms_ = 0;
|
||||
}
|
||||
break;
|
||||
@@ -163,10 +167,11 @@ namespace scenes {
|
||||
if (fade_.done()) {
|
||||
restorePalette();
|
||||
JD8_ClearScreen(BG_COLOR_INDEX);
|
||||
if (phase_ == Phase::FadeOut1)
|
||||
if (phase_ == Phase::FadeOut1) {
|
||||
phase_ = Phase::Slide2Enter;
|
||||
else
|
||||
} else {
|
||||
phase_ = Phase::Slide3Enter;
|
||||
}
|
||||
phase_acc_ms_ = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -40,8 +40,8 @@ namespace scenes {
|
||||
|
||||
void onEnter() override;
|
||||
void tick(int delta_ms) override;
|
||||
bool done() const override { return phase_ == Phase::Done; }
|
||||
int nextState() const override { return next_state_; }
|
||||
[[nodiscard]] auto done() const -> bool override { return phase_ == Phase::Done; }
|
||||
[[nodiscard]] auto nextState() const -> int override { return next_state_; }
|
||||
|
||||
private:
|
||||
enum class Phase {
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace scenes {
|
||||
y1_ = y1;
|
||||
duration_ms_ = std::max(0, duration_ms);
|
||||
elapsed_ms_ = 0;
|
||||
ease_ = ease ? ease : Easing::linear;
|
||||
ease_ = (ease != nullptr) ? ease : Easing::linear;
|
||||
cur_x_ = x0;
|
||||
cur_y_ = y0;
|
||||
}
|
||||
@@ -38,8 +38,10 @@ namespace scenes {
|
||||
cur_y_ = Easing::lerpInt(y0_, y1_, eased);
|
||||
}
|
||||
|
||||
float SpriteMover::progress() const {
|
||||
if (duration_ms_ <= 0) return 1.0f;
|
||||
auto SpriteMover::progress() const -> float {
|
||||
if (duration_ms_ <= 0) {
|
||||
return 1.0F;
|
||||
}
|
||||
return static_cast<float>(elapsed_ms_) / static_cast<float>(duration_ms_);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,10 +22,10 @@ namespace scenes {
|
||||
|
||||
void tick(int delta_ms);
|
||||
|
||||
int x() const { return cur_x_; }
|
||||
int y() const { return cur_y_; }
|
||||
bool done() const { return elapsed_ms_ >= duration_ms_; }
|
||||
float progress() const; // 0..1 sense easing aplicat
|
||||
[[nodiscard]] auto x() const -> int { return cur_x_; }
|
||||
[[nodiscard]] auto y() const -> int { return cur_y_; }
|
||||
[[nodiscard]] auto done() const -> bool { return elapsed_ms_ >= duration_ms_; }
|
||||
[[nodiscard]] auto progress() const -> float; // 0..1 sense easing aplicat
|
||||
|
||||
private:
|
||||
int x0_{0}, y0_{0}, x1_{0}, y1_{0};
|
||||
|
||||
@@ -6,7 +6,9 @@ namespace scenes {
|
||||
: surface_(JD8_LoadSurface(file)) {}
|
||||
|
||||
SurfaceHandle::~SurfaceHandle() {
|
||||
if (surface_) JD8_FreeSurface(surface_);
|
||||
if (surface_ != nullptr) {
|
||||
JD8_FreeSurface(surface_);
|
||||
}
|
||||
}
|
||||
|
||||
SurfaceHandle::SurfaceHandle(SurfaceHandle&& other) noexcept
|
||||
@@ -14,9 +16,11 @@ namespace scenes {
|
||||
other.surface_ = nullptr;
|
||||
}
|
||||
|
||||
SurfaceHandle& SurfaceHandle::operator=(SurfaceHandle&& other) noexcept {
|
||||
auto SurfaceHandle::operator=(SurfaceHandle&& other) noexcept -> SurfaceHandle& {
|
||||
if (this != &other) {
|
||||
if (surface_) JD8_FreeSurface(surface_);
|
||||
if (surface_ != nullptr) {
|
||||
JD8_FreeSurface(surface_);
|
||||
}
|
||||
surface_ = other.surface_;
|
||||
other.surface_ = nullptr;
|
||||
}
|
||||
@@ -24,16 +28,20 @@ namespace scenes {
|
||||
}
|
||||
|
||||
void SurfaceHandle::reset(const char* file) {
|
||||
if (surface_) JD8_FreeSurface(surface_);
|
||||
surface_ = file ? JD8_LoadSurface(file) : nullptr;
|
||||
if (surface_ != nullptr) {
|
||||
JD8_FreeSurface(surface_);
|
||||
}
|
||||
surface_ = (file != nullptr) ? JD8_LoadSurface(file) : nullptr;
|
||||
}
|
||||
|
||||
void SurfaceHandle::adopt(JD8_Surface raw) {
|
||||
if (surface_) JD8_FreeSurface(surface_);
|
||||
if (surface_ != nullptr) {
|
||||
JD8_FreeSurface(surface_);
|
||||
}
|
||||
surface_ = raw;
|
||||
}
|
||||
|
||||
JD8_Surface SurfaceHandle::release() {
|
||||
auto SurfaceHandle::release() -> JD8_Surface {
|
||||
JD8_Surface r = surface_;
|
||||
surface_ = nullptr;
|
||||
return r;
|
||||
|
||||
@@ -15,10 +15,10 @@ namespace scenes {
|
||||
~SurfaceHandle();
|
||||
|
||||
SurfaceHandle(const SurfaceHandle&) = delete;
|
||||
SurfaceHandle& operator=(const SurfaceHandle&) = delete;
|
||||
auto operator=(const SurfaceHandle&) -> SurfaceHandle& = delete;
|
||||
|
||||
SurfaceHandle(SurfaceHandle&& other) noexcept;
|
||||
SurfaceHandle& operator=(SurfaceHandle&& other) noexcept;
|
||||
auto operator=(SurfaceHandle&& other) noexcept -> SurfaceHandle&;
|
||||
|
||||
// Allibera la surface actual (si n'hi ha) i carrega una nova.
|
||||
// Usat per escenes que recarreguen assets a mitja cinemàtica
|
||||
@@ -34,13 +34,13 @@ namespace scenes {
|
||||
// altre propietari). Usat quan una escena delega a codi legacy que
|
||||
// també allibera la mateixa surface — cal "soltar" el ownership per
|
||||
// evitar double free.
|
||||
[[nodiscard]] JD8_Surface release();
|
||||
[[nodiscard]] auto release() -> JD8_Surface;
|
||||
|
||||
// Conversió implícita per al confort d'ús: JD8_Blit(handle)
|
||||
// en lloc de JD8_Blit(handle.get()).
|
||||
operator JD8_Surface() const { return surface_; }
|
||||
JD8_Surface get() const { return surface_; }
|
||||
bool valid() const { return surface_ != nullptr; }
|
||||
[[nodiscard]] auto get() const -> JD8_Surface { return surface_; }
|
||||
[[nodiscard]] auto valid() const -> bool { return surface_ != nullptr; }
|
||||
|
||||
private:
|
||||
JD8_Surface surface_{nullptr};
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
namespace scenes {
|
||||
|
||||
Timeline& Timeline::step(int duration_ms, StepFn fn) {
|
||||
auto Timeline::step(int duration_ms, StepFn fn) -> Timeline& {
|
||||
Step s;
|
||||
s.duration_ms = duration_ms;
|
||||
s.continuous = std::move(fn);
|
||||
@@ -12,7 +12,7 @@ namespace scenes {
|
||||
return *this;
|
||||
}
|
||||
|
||||
Timeline& Timeline::once(OnceFn fn) {
|
||||
auto Timeline::once(OnceFn fn) -> Timeline& {
|
||||
Step s;
|
||||
s.duration_ms = 0;
|
||||
s.oneshot = std::move(fn);
|
||||
@@ -25,7 +25,9 @@ namespace scenes {
|
||||
auto& s = steps_[current_];
|
||||
if (!s.entered) {
|
||||
s.entered = true;
|
||||
if (s.oneshot) s.oneshot();
|
||||
if (s.oneshot) {
|
||||
s.oneshot();
|
||||
}
|
||||
}
|
||||
++current_;
|
||||
elapsed_in_step_ = 0;
|
||||
@@ -33,21 +35,29 @@ namespace scenes {
|
||||
}
|
||||
|
||||
void Timeline::tick(int delta_ms) {
|
||||
if (skipped_) return;
|
||||
if (skipped_) {
|
||||
return;
|
||||
}
|
||||
flushOneShots();
|
||||
if (current_ >= steps_.size()) return;
|
||||
if (current_ >= steps_.size()) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto& s = steps_[current_];
|
||||
if (!s.entered) {
|
||||
s.entered = true;
|
||||
// Primer tick dins del pas: cridem amb progress=0 si hi ha callback.
|
||||
if (s.continuous) s.continuous(0.0f);
|
||||
if (s.continuous) {
|
||||
s.continuous(0.0F);
|
||||
}
|
||||
}
|
||||
|
||||
elapsed_in_step_ += delta_ms;
|
||||
if (elapsed_in_step_ >= s.duration_ms) {
|
||||
// Tancament del pas: una crida final amb progress=1.
|
||||
if (s.continuous) s.continuous(1.0f);
|
||||
if (s.continuous) {
|
||||
s.continuous(1.0F);
|
||||
}
|
||||
++current_;
|
||||
elapsed_in_step_ = 0;
|
||||
// Pot ser que el següent pas siga una cadena de one-shots.
|
||||
@@ -65,20 +75,26 @@ namespace scenes {
|
||||
}
|
||||
|
||||
void Timeline::reset() {
|
||||
for (auto& s : steps_) s.entered = false;
|
||||
for (auto& s : steps_) {
|
||||
s.entered = false;
|
||||
}
|
||||
current_ = 0;
|
||||
elapsed_in_step_ = 0;
|
||||
skipped_ = false;
|
||||
}
|
||||
|
||||
bool Timeline::done() const {
|
||||
auto Timeline::done() const -> bool {
|
||||
return skipped_ || current_ >= steps_.size();
|
||||
}
|
||||
|
||||
float Timeline::currentProgress() const {
|
||||
if (current_ >= steps_.size()) return 1.0f;
|
||||
auto Timeline::currentProgress() const -> float {
|
||||
if (current_ >= steps_.size()) {
|
||||
return 1.0F;
|
||||
}
|
||||
const auto& s = steps_[current_];
|
||||
if (s.duration_ms <= 0) return 0.0f;
|
||||
if (s.duration_ms <= 0) {
|
||||
return 0.0F;
|
||||
}
|
||||
return static_cast<float>(elapsed_in_step_) / static_cast<float>(s.duration_ms);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,16 +25,16 @@ namespace scenes {
|
||||
using StepFn = std::function<void(float progress_0_1)>;
|
||||
using OnceFn = std::function<void()>;
|
||||
|
||||
Timeline& step(int duration_ms, StepFn fn = nullptr);
|
||||
Timeline& once(OnceFn fn);
|
||||
auto step(int duration_ms, StepFn fn = nullptr) -> Timeline&;
|
||||
auto once(OnceFn fn) -> Timeline&;
|
||||
|
||||
void tick(int delta_ms);
|
||||
void skip();
|
||||
void reset();
|
||||
|
||||
bool done() const;
|
||||
int currentStepIndex() const { return static_cast<int>(current_); }
|
||||
float currentProgress() const;
|
||||
[[nodiscard]] auto done() const -> bool;
|
||||
[[nodiscard]] auto currentStepIndex() const -> int { return static_cast<int>(current_); }
|
||||
[[nodiscard]] auto currentProgress() const -> float;
|
||||
|
||||
private:
|
||||
struct Step {
|
||||
|
||||
Reference in new issue
Block a user