feat(immunity): blink al render alternant paleta normal i pal·la del bloc immunity
This commit is contained in:
1 parent
0db2195404
commit
7956a1382a
1 file changed
+21
@@ -1361,6 +1361,25 @@ void Player::render() {
|
||||
});
|
||||
}
|
||||
|
||||
// Blink d'immunitat: cada `blink_period_ms` ms, el render alterna
|
||||
// entre la paleta normal i la paleta plana. La fase es deriva del
|
||||
// timer restant — al spawn (timer = duration) toca paleta plana
|
||||
// perquè el feedback sigui immediat. La Surface pot ser compartida
|
||||
// entre dos jugadors del mateix personatge: com que el render del
|
||||
// joc és seqüencial, el save/restore al voltant del render del
|
||||
// sprite és segur — quan acaba aquesta funció, la Surface torna a
|
||||
// tenir la paleta normal i la pròxima crida pot fer el seu propi
|
||||
// swap independentment.
|
||||
const bool BLINK_ON =
|
||||
immunity_remaining_ms_ > 0.0F &&
|
||||
immunity_config.blink_period_ms > 0 &&
|
||||
!immunity_config.palette_key.empty() &&
|
||||
surface_ != nullptr &&
|
||||
(static_cast<int>(immunity_remaining_ms_) / immunity_config.blink_period_ms) % 2 == 0;
|
||||
if (BLINK_ON) {
|
||||
surface_->setPalette(Resource::Cache::get().getPalette(immunity_config.palette_key));
|
||||
}
|
||||
|
||||
if (jump_z_ == 0.0F) {
|
||||
AnimatedSprite::render();
|
||||
} else {
|
||||
@@ -1370,6 +1389,8 @@ void Player::render() {
|
||||
pos_.y = SAVED_Y;
|
||||
}
|
||||
|
||||
if (BLINK_ON) { surface_->setPalette(normal_palette_); }
|
||||
|
||||
if (CLIP_HOLE) { Rendering::popClip(); }
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user