X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fanim.c;h=b79959dfcbf8fc58215d68090a070ba270cd591c;hb=bd0a11ca4033f0d78d81895d4a511cad928a54fb;hp=cb415db928da6663342e55362da38db7ead0caf5;hpb=f7e45f228121112b91865808415ce4dabbcfd664;p=rocksndiamonds.git diff --git a/src/anim.c b/src/anim.c index cb415db9..b79959df 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 @@ -113,6 +116,7 @@ struct GlobalAnimPartControlInfo boolean init_event_state; boolean anim_event_state; + boolean triggered; boolean clickable; boolean clicked; @@ -1068,7 +1072,7 @@ static boolean clickConsumed(struct GlobalAnimPartControlInfo *part) static void InitGlobalAnim_Triggered(struct GlobalAnimPartControlInfo *part, boolean *anything_clicked, boolean *any_event_action, - int event_value) + int event_value, char *info_text) { struct GlobalAnimControlInfo *ctrl = &global_anim_ctrl[part->mode_nr]; @@ -1095,9 +1099,14 @@ static void InitGlobalAnim_Triggered(struct GlobalAnimPartControlInfo *part, if (isClickablePart(part2, mask)) { - part2->clicked = TRUE; + part2->triggered = TRUE; *anything_clicked = clickConsumed(part); // click was on "part"! +#if DEBUG_ANIM_EVENTS + printf("::: => %d.%d TRIGGERED BY %s OF %d.%d\n", + part2->old_anim_nr + 1, part2->old_nr + 1, info_text, + 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); @@ -1124,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, info_text); +} + static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state) { @@ -1240,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 && @@ -1273,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; @@ -1299,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)); @@ -1320,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)); @@ -1336,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; } @@ -1600,6 +1642,10 @@ static void InitGlobalAnim_Clickable(void) { struct GlobalAnimPartControlInfo *part = &anim->part[part_nr]; + if (part->triggered) + part->clicked = TRUE; + + part->triggered = FALSE; part->clickable = FALSE; } } @@ -1646,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); } @@ -1670,13 +1721,18 @@ 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); } // check if this click is defined to trigger other animations InitGlobalAnim_Triggered(part, &anything_clicked, &any_event_action, - ANIM_EVENT_CLICK); + ANIM_EVENT_CLICK, "CLICK"); } } }