From 936ccff59f2045f5747a0730570784608f39a7b4 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Thu, 31 Aug 2017 16:48:26 +0100
Subject: [PATCH] SL-751 - updated lsl test scripts with bug fix, added a
 version that uses the new command llGetObjectAnimationNames()

---
 .../testing/lsl/cycle_object_animations.lsl   |   4 +-
 .../lsl/cycle_object_animations_v2.lsl        | 133 ++++++++++++++++++
 2 files changed, 135 insertions(+), 2 deletions(-)
 create mode 100644 scripts/testing/lsl/cycle_object_animations_v2.lsl

diff --git a/scripts/testing/lsl/cycle_object_animations.lsl b/scripts/testing/lsl/cycle_object_animations.lsl
index e7a378889a0..46910e36561 100644
--- a/scripts/testing/lsl/cycle_object_animations.lsl
+++ b/scripts/testing/lsl/cycle_object_animations.lsl
@@ -7,7 +7,7 @@ say_if_verbose(integer channel, string message)
 {
     if (verbose)
     {
-        llSay(0, message);
+        llSay(channel, message);
     }
 }
 
@@ -71,7 +71,7 @@ default
 
     listen(integer channel, string name, key id, string message)
     {
-        llOwnerSay("got message " + name + " " + (string) id + " " + message);
+        //llOwnerSay("got message " + name + " " + (string) id + " " + message);
         list words = llParseString2List(message,[" "],[]);
         string command = llList2String(words,0);
         string option = llList2String(words,1);
diff --git a/scripts/testing/lsl/cycle_object_animations_v2.lsl b/scripts/testing/lsl/cycle_object_animations_v2.lsl
new file mode 100644
index 00000000000..60879fcce2e
--- /dev/null
+++ b/scripts/testing/lsl/cycle_object_animations_v2.lsl
@@ -0,0 +1,133 @@
+integer listenHandle; 
+integer verbose;
+integer current_animation_number;
+string NowPlaying;
+
+say_if_verbose(integer channel, string message)
+{
+    if (verbose)
+    {
+        llSay(channel, message);
+    }
+}
+
+stop_all_animations()
+{
+    list curr_anims = llGetObjectAnimationNames();
+    say_if_verbose(0,"stopping all, curr_anims are " + (string) curr_anims);
+    integer length = llGetListLength(curr_anims);
+    integer index = 0;
+    while (index < length)
+    {
+        string anim = llList2String(curr_anims, index);
+        say_if_verbose(0, "Stopping " + anim);
+        llStopObjectAnimation(anim);
+        // This check isn't really needed, just included to demonstrate is_animation_running()
+        if (is_animation_running(anim))
+        {
+            say_if_verbose(0, "ERROR - failed to stop " + anim + "!");
+        }
+        ++index;
+    }
+}
+
+integer is_animation_running(string anim)
+{
+    list curr_anims = llGetObjectAnimationNames();
+    return ~llListFindList(curr_anims, (list)anim);
+}
+
+start_cycle_animations()
+{
+    current_animation_number = llGetInventoryNumber(INVENTORY_ANIMATION);
+    next_animation(); // Do first iteration without waiting for timer
+    llSetTimerEvent(5.0);
+}
+
+next_animation()
+{
+    string ItemName;
+    if (NowPlaying != "")
+    {
+        say_if_verbose(0, "Stopping " + NowPlaying);
+        llStopObjectAnimation(NowPlaying);
+    }
+    if (current_animation_number--)
+    {
+        ItemName = llGetInventoryName(INVENTORY_ANIMATION, current_animation_number);
+        say_if_verbose(0, "Starting " + ItemName);
+        llStartObjectAnimation(ItemName);
+        key anim_id = llGetInventoryKey(ItemName);
+        say_if_verbose(0, "Started item " + ItemName + " inv key " + (string) anim_id);
+        NowPlaying = ItemName;
+    }
+    else
+    {
+        // Start again at the top
+        current_animation_number = llGetInventoryNumber(INVENTORY_ANIMATION);
+    }
+}
+
+stop_cycle_animations()
+{
+    llSetTimerEvent(0);
+}
+
+default
+{
+    state_entry()
+    {
+        say_if_verbose(0, "Animated Object here");
+        listenHandle = llListen(-2001,"","","");  
+        verbose = 0;
+
+        stop_all_animations();
+    }
+
+    listen(integer channel, string name, key id, string message)
+    {
+        //llOwnerSay("got message " + name + " " + (string) id + " " + message);
+        list words = llParseString2List(message,[" "],[]);
+        string command = llList2String(words,0);
+        string option = llList2String(words,1);
+        if (command=="anim")
+        {
+            stop_all_animations();
+            if (option=="start")
+            {
+                start_cycle_animations();
+            }
+            else if (option=="stop")
+            {
+                stop_cycle_animations();
+            }
+        }
+        if (command=="verbose")
+        {
+            if (option=="on")
+            {
+                verbose = 1;
+            }
+            else if (option=="off")
+            {
+                verbose = 0;
+            }
+        }
+    }
+
+    timer()
+    {
+        say_if_verbose(0, "timer triggered");
+        next_animation();
+    }
+    
+    touch_start(integer total_number)
+    {
+        say_if_verbose(0, "Touch started.");
+        start_cycle_animations();
+    }
+}
+
+// Local Variables:
+// shadow-file-name: "$SW_HOME/axon/scripts/testing/lsl/cycle_object_animations_v2.lsl"
+// End:
-- 
GitLab