summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
ad93f89)
When playing the game, loop sounds are automatically expired if they
are not "refreshed" at regular intervals (to prevent playing sounds
for game elements that do not exist on the playfield anymore).
However, this also affects loop sounds for global animations played
during the game, so special care has to be taken to prevent them from
accidentally being expired, too.
StopGlobalAnimMusic(part);
}
StopGlobalAnimMusic(part);
}
+static void PlayGlobalAnimSoundIfLoop(struct GlobalAnimPartControlInfo *part)
+{
+ // when drawing animations to fading buffer, do not play sounds
+ if (drawing_to_fading_buffer)
+ return;
+
+ // loop sounds only expire when playing
+ if (game_status != GAME_MODE_PLAYING)
+ return;
+
+ // check if any sound is defined for this animation part
+ if (part->sound == SND_UNDEFINED)
+ return;
+
+ // normal (non-loop) sounds do not expire when playing
+ if (!IS_LOOP_SOUND(part->sound))
+ return;
+
+ // prevent expiring loop sounds when playing
+ PlayGlobalAnimSound(part);
+}
+
static boolean isClickablePart(struct GlobalAnimPartControlInfo *part, int mask)
{
struct GraphicInfo *c = &part->control_info;
static boolean isClickablePart(struct GlobalAnimPartControlInfo *part, int mask)
{
struct GraphicInfo *c = &part->control_info;
return ANIM_STATE_WAITING;
}
return ANIM_STATE_WAITING;
}
+ // special case to prevent expiring loop sounds when playing
+ PlayGlobalAnimSoundIfLoop(part);
+
if (!DelayReachedExt(&part->step_delay, part->step_delay_value,
anim_sync_frame))
return ANIM_STATE_RUNNING;
if (!DelayReachedExt(&part->step_delay, part->step_delay_value,
anim_sync_frame))
return ANIM_STATE_RUNNING;