134 lines
3.3 KiB
Plaintext
134 lines
3.3 KiB
Plaintext
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:
|