summaryrefslogtreecommitdiff
path: root/scripts/testing/lsl/cycle_object_animations.lsl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/testing/lsl/cycle_object_animations.lsl')
-rw-r--r--scripts/testing/lsl/cycle_object_animations.lsl105
1 files changed, 85 insertions, 20 deletions
diff --git a/scripts/testing/lsl/cycle_object_animations.lsl b/scripts/testing/lsl/cycle_object_animations.lsl
index 79c8ff4151..e7a378889a 100644
--- a/scripts/testing/lsl/cycle_object_animations.lsl
+++ b/scripts/testing/lsl/cycle_object_animations.lsl
@@ -1,50 +1,115 @@
-cycle_animations()
+integer listenHandle;
+integer verbose;
+integer current_animation_number;
+string NowPlaying;
+
+say_if_verbose(integer channel, string message)
+{
+ if (verbose)
+ {
+ llSay(0, message);
+ }
+}
+
+stop_all_animations()
{
- list AnimationList;
integer count = llGetInventoryNumber(INVENTORY_ANIMATION);
string ItemName;
string NowPlaying;
while (count--)
{
ItemName = llGetInventoryName(INVENTORY_ANIMATION, count);
- if (NowPlaying != "")
- {
- //llSay(0, "Stopping " + NowPlaying);
- llStopObjectAnimation(NowPlaying);
- }
- //llSay(0, "Starting " + ItemName);
- llStartObjectAnimation(ItemName);
- NowPlaying = ItemName;
- llSleep(10);
+ say_if_verbose(0, "Stopping " + ItemName);
+ llStopObjectAnimation(ItemName);
}
+}
+
+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 != "")
{
- //llSay(0, "Stopping " + NowPlaying);
+ say_if_verbose(0, "Stopping " + NowPlaying);
llStopObjectAnimation(NowPlaying);
- llSleep(10);
}
+ if (current_animation_number--)
+ {
+ ItemName = llGetInventoryName(INVENTORY_ANIMATION, current_animation_number);
+ say_if_verbose(0, "Starting " + ItemName);
+ llStartObjectAnimation(ItemName);
+ NowPlaying = ItemName;
+ }
+ else
+ {
+ // Start again at the top
+ current_animation_number = llGetInventoryNumber(INVENTORY_ANIMATION);
+ }
+}
+
+stop_cycle_animations()
+{
+ llSetTimerEvent(0);
}
default
{
state_entry()
{
- llSay(0, "Animated Object here");
+ say_if_verbose(0, "Animated Object here");
+ listenHandle = llListen(-2001,"","","");
+ verbose = 0;
+
+ stop_all_animations();
}
- touch_start(integer total_number)
+ listen(integer channel, string name, key id, string message)
{
- llSay(0, "Touch started.");
- while (1)
+ 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")
{
- cycle_animations();
+ if (option=="on")
+ {
+ verbose = 1;
+ }
+ else if (option=="off")
+ {
+ verbose = 0;
+ }
}
+ }
+ timer()
+ {
+ say_if_verbose(0, "timer triggered");
+ next_animation();
}
- touch_end(integer total_number)
+ touch_start(integer total_number)
{
- llSay(0, "Touch ended.");
+ say_if_verbose(0, "Touch started.");
+ start_cycle_animations();
}
}