summaryrefslogtreecommitdiff
path: root/scripts/testing/lsl/cycle_object_animations_v2.lsl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/testing/lsl/cycle_object_animations_v2.lsl')
-rw-r--r--scripts/testing/lsl/cycle_object_animations_v2.lsl133
1 files changed, 133 insertions, 0 deletions
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 0000000000..60879fcce2
--- /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: