#include "anim.h"
#include "main.h"
#include "tools.h"
+#include "events.h"
+#include "screens.h"
/* values for global toon animation definition */
if (!setup.sound_music)
return;
- PlayMusic(music);
+ if (IS_LOOP_MUSIC(music))
+ PlayMusicLoop(music);
+ else
+ PlayMusic(music);
#if 0
printf("::: PLAY MUSIC %d.%d.%d: %d\n",
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;
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;
return FALSE;
boolean action_executed = (DoGadgetAction(anim_event_action) ||
- DoScreenAction(anim_event_action));
+ DoScreenAction(anim_event_action) ||
+ DoKeysymAction(anim_event_action));
// check if further actions are allowed to be executed
if (part->control_info.style & STYLE_MULTIPLE_ACTIONS)
if (!any_event_action && DoGlobalAnim_EventAction(part))
any_event_action = TRUE;
- any_part_clicked = TRUE;
+ // determine if mouse clicks should be blocked from other animations
+ any_part_clicked = clickConsumed(part);
if (isClickablePart(part, ANIM_EVENT_SELF))
{