X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fanim.c;h=fcf7ef36f13633a155a261af15213d1bae404508;hp=933af1dec0b6d713bbc13567f2cf9b9f1147de0b;hb=f4d75550969f97716de4b9f5340b8fcf835ab7fc;hpb=5cad8474aa1d4dc406602ce0aaf8945a60e400e5 diff --git a/src/anim.c b/src/anim.c index 933af1de..fcf7ef36 100644 --- a/src/anim.c +++ b/src/anim.c @@ -19,6 +19,9 @@ #include "screens.h" +#define DEBUG_ANIM_EVENTS 0 + + // values for global toon animation definition #define NUM_GLOBAL_TOON_ANIMS 1 #define NUM_GLOBAL_TOON_PARTS MAX_NUM_TOONS @@ -1099,6 +1102,11 @@ static void InitGlobalAnim_Triggered(struct GlobalAnimPartControlInfo *part, part2->triggered = TRUE; *anything_clicked = clickConsumed(part); // click was on "part"! +#if DEBUG_ANIM_EVENTS + printf("::: => %d.%d TRIGGERED BY %d.%d\n", + part2->old_anim_nr + 1, part2->old_nr + 1, + part->old_anim_nr + 1, part->old_nr + 1); +#endif #if 0 printf("::: %d.%d TRIGGER CLICKED [%d]\n", anim2_nr, part2_nr, part2->control_info.anim_event_action); @@ -1125,6 +1133,21 @@ static void InitGlobalAnim_Triggered(struct GlobalAnimPartControlInfo *part, } } +static void HandleGlobalAnimEvent(struct GlobalAnimPartControlInfo *part, + int event_value, char *info_text) +{ +#if DEBUG_ANIM_EVENTS + printf("::: %d.%d %s\n", part->old_anim_nr + 1, part->old_nr + 1, info_text); +#endif + + boolean anything_clicked = FALSE; + boolean any_event_action = FALSE; + + // check if this event is defined to trigger other animations + InitGlobalAnim_Triggered(part, &anything_clicked, &any_event_action, + event_value); +} + static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state) { @@ -1241,7 +1264,15 @@ static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, if (part->init_delay_counter == 0 && !part->init_event_state) + { PlayGlobalAnimSoundAndMusic(part); + + HandleGlobalAnimEvent(part, ANIM_EVENT_START, "START [ANIM]"); + } + else + { + HandleGlobalAnimEvent(part, ANIM_EVENT_INIT, "START [INIT_DELAY/EVENT]"); + } } if (part->clicked && @@ -1274,6 +1305,8 @@ static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, part->init_event_state = FALSE; PlayGlobalAnimSoundAndMusic(part); + + HandleGlobalAnimEvent(part, ANIM_EVENT_START, "START [ANIM]"); } return ANIM_STATE_WAITING; @@ -1300,6 +1333,8 @@ static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, { StopGlobalAnimSoundAndMusic(part); + HandleGlobalAnimEvent(part, ANIM_EVENT_END, "END [ANIM/OFF-SCREEN]"); + part->post_delay_counter = (c->post_delay_fixed + GetSimpleRandom(c->post_delay_random)); @@ -1321,6 +1356,8 @@ static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, StopGlobalAnimSoundAndMusic(part); + HandleGlobalAnimEvent(part, ANIM_EVENT_END, "END [ANIM_DELAY/EVENT]"); + part->post_delay_counter = (c->post_delay_fixed + GetSimpleRandom(c->post_delay_random)); @@ -1337,7 +1374,11 @@ static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, part->post_delay_counter--; if (part->post_delay_counter == 0) + { + HandleGlobalAnimEvent(part, ANIM_EVENT_POST, "END [POST_DELAY]"); + return ANIM_STATE_RESTART; + } return ANIM_STATE_WAITING; } @@ -1651,6 +1692,11 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, boolean clicked) // always handle "any" click events (clicking anywhere on screen) ... if (isClickablePart(part, ANIM_EVENT_ANY)) { +#if DEBUG_ANIM_EVENTS + printf("::: => %d.%d TRIGGERED BY ANY\n", + part->old_anim_nr + 1, part->old_nr + 1); +#endif + part->clicked = TRUE; anything_clicked = clickConsumed(part); } @@ -1675,6 +1721,11 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, boolean clicked) if (isClickablePart(part, ANIM_EVENT_SELF)) { +#if DEBUG_ANIM_EVENTS + printf("::: => %d.%d TRIGGERED BY SELF\n", + part->old_anim_nr + 1, part->old_nr + 1); +#endif + part->clicked = TRUE; anything_clicked = clickConsumed(part); }