added new animation mode (modifier) 'once' for global animations
authorHolger Schemel <info@artsoft.org>
Wed, 9 Mar 2016 20:14:56 +0000 (21:14 +0100)
committerHolger Schemel <info@artsoft.org>
Wed, 9 Mar 2016 20:14:56 +0000 (21:14 +0100)
src/cartoons.c
src/libgame/misc.c
src/libgame/system.h

index 4797420cfaba5e0284c1b066cf9371cc849298a3..4423d2717871b9c1822c863d76a29831f422d336 100644 (file)
@@ -888,6 +888,10 @@ void HandleGlobalAnim_Main(struct GlobalAnimMainControlInfo *anim, int action)
 
   if (anim->state & ANIM_STATE_RESTART)
     anim->part_counter++;
+
+  if (anim->part_counter == anim->num_parts &&
+      c->anim_mode & ANIM_ONCE)
+    anim->state = ANIM_STATE_INACTIVE;
 }
 
 void HandleGlobalAnim_Mode(struct GlobalAnimControlInfo *ctrl, int action)
index c34cddd322cf7a1294ee33c074e73f736327e2c9..ff86123df0eb47d240a8c19997724dd73a99b28c 100644 (file)
@@ -2705,6 +2705,9 @@ int get_parameter_value(char *value_raw, char *suffix, int type)
              string_has_parameter(value, "all")        ? ANIM_ALL :
              ANIM_DEFAULT);
 
+    if (string_has_parameter(value, "once"))
+      result |= ANIM_ONCE;
+
     if (string_has_parameter(value, "reverse"))
       result |= ANIM_REVERSE;
 
index 1ad2f70956bc0fc70cb64eee63d42c04f0e9b22e..97acf9340534e210dc596a1f3ac760c2b7637e19 100644 (file)
                                 MV_NONE)
 
 /* values for animation mode (frame order and direction) */
+/* (stored in level files -- never change existing values) */
 #define ANIM_NONE              0
 #define ANIM_LOOP              (1 << 0)
 #define ANIM_LINEAR            (1 << 1)
 #define ANIM_OPAQUE_PLAYER     (1 << 9)
 
 /* values for special (non game element) animation modes */
+/* (not stored in level files -- can be changed, if needed) */
 #define ANIM_HORIZONTAL                (1 << 10)
 #define ANIM_VERTICAL          (1 << 11)
 #define ANIM_CENTERED          (1 << 12)
 #define ANIM_STATIC_PANEL      (1 << 13)
 #define ANIM_ALL               (1 << 14)
+#define ANIM_ONCE              (1 << 15)
 
 #define ANIM_DEFAULT           ANIM_LOOP