X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fanim.c;h=49f346ee8e347959d29388ddf526f42007ae189e;hp=4ea38b41afbb98bbd52e2566cb95ee3226e84b45;hb=5945d4cf6b675d43d102a1a2ab7d6ebd43a49ead;hpb=8595dda36644bace0fb1d2c4bf8fbc9bbf1244b3 diff --git a/src/anim.c b/src/anim.c index 4ea38b41..49f346ee 100644 --- a/src/anim.c +++ b/src/anim.c @@ -990,27 +990,46 @@ static void PlayGlobalAnimSoundIfLoop(struct GlobalAnimPartControlInfo *part) PlayGlobalAnimSound(part); } -static boolean isClickablePart(struct GlobalAnimPartControlInfo *part, int mask) +static boolean checkGlobalAnimEvent(int anim_event, int mask) { - struct GraphicInfo *c = &part->control_info; int trigger_mask = ANIM_EVENT_ANIM_MASK | ANIM_EVENT_PART_MASK; int mask_anim_only = mask & ANIM_EVENT_ANIM_MASK; - int init_event = GetGlobalAnimEventValue(c->init_event, 0); - int anim_event = GetGlobalAnimEventValue(c->anim_event, 0); if (mask & ANIM_EVENT_ANY) - return (init_event & ANIM_EVENT_ANY || - anim_event & ANIM_EVENT_ANY); + return (anim_event & ANIM_EVENT_ANY); else if (mask & ANIM_EVENT_SELF) - return (init_event & ANIM_EVENT_SELF || - anim_event & ANIM_EVENT_SELF); + return (anim_event & ANIM_EVENT_SELF); else - return ((init_event & trigger_mask) == mask || - (anim_event & trigger_mask) == mask || - (init_event & trigger_mask) == mask_anim_only || + return ((anim_event & trigger_mask) == mask || (anim_event & trigger_mask) == mask_anim_only); } +static boolean isClickablePart(struct GlobalAnimPartControlInfo *part, int mask) +{ + struct GraphicInfo *c = &part->control_info; + int num_init_events = GetGlobalAnimEventValueCount(c->init_event); + int num_anim_events = GetGlobalAnimEventValueCount(c->anim_event); + int i; + + for (i = 0; i < num_init_events; i++) + { + int init_event = GetGlobalAnimEventValue(c->init_event, i); + + if (checkGlobalAnimEvent(init_event, mask)) + return TRUE; + } + + for (i = 0; i < num_anim_events; i++) + { + int anim_event = GetGlobalAnimEventValue(c->anim_event, i); + + if (checkGlobalAnimEvent(anim_event, mask)) + return TRUE; + } + + return FALSE; +} + static boolean isClickedPart(struct GlobalAnimPartControlInfo *part, int mx, int my, boolean clicked) {