[sldev] Incorporating multiple animations in an object
Dana Moore
dana.virtual at gmail.com
Wed May 23 19:27:54 PDT 2007
Just a follow up on my previous posting
there were a number of syntax and other problems (undeclared variables, etc)
with the donated script as written.
I have corrected it in an effort to make sure we donate things that are
correct as possible.
Although this compiles and will work for a few iterations of timer(), it
seems to lose its way after a while and not fire the next animation. I am
investigating and will report back to y'all as I discover why.
Cheers,
________ BEGIN CUT __________________
float maxTime = 20; // Maximum time between animation changes
key avatar;
key trigger;
string animation;
string HOVERTEXT="Se reposer";
string SIT_TEXT="Relax";
string HOVER_RGB="255,255,255";
integer LISTEN=TRUE;
integer CHANNEL=0;
vector POSITION=<0.0, 0.0, 0.05>;
// Function to randomly select and play an animation
randomAnimation()
{
// Get the total number of animations in the inventory
integer max = llGetInventoryNumber(INVENTORY_ANIMATION);
// Pick a random animation to play
integer anim = (integer)llFrand(max);
// Start the animation
animation = llGetInventoryName(INVENTORY_ANIMATION,anim);
llSay(0, "Timer elapsed... aimation chosen is :"+animation);
llStartAnimation(animation);
llSetTimerEvent(llFrand(maxTime));
}
set_text()
{
if (llStringLength(HOVERTEXT)>0)
{
rgb=llCSV2List(HOVER_RGB);
llSetText(HOVERTEXT,<llList2Float(rgb,0)*
0.003921568627450980392156862745098,
llList2Float(rgb,1)*0.003921568627450980392156862745098,
llList2Float(rgb,2)*0.003921568627450980392156862745098>,1.0);
}
else
llSetText("",<0,0,0>,0.0);
}
start_listen()
{
llListenRemove(listener);
if (LISTEN==TRUE)
listener=llListen(CHANNEL,"","","");
}
hide_me()
{
llSetAlpha(0.0, ALL_SIDES);
llSetText("",<0,0,0>,0.0);
}
show_me()
{
llSetAlpha(1.0, ALL_SIDES);
set_text();
}
list rgb;
integer listener;
default{
state_entry(){
if (llStringLength(SIT_TEXT)>0)
llSetSitText(SIT_TEXT);
llSitTarget(POSITION, ZERO_ROTATION);
set_text();
start_listen();
}
on_rez(integer r)
{
start_listen();
}
listen(integer channel, string name, key id, string msg)
{
if (msg=="hide")
{
hide_me();
llMessageLinked(LINK_SET,0,"hide", NULL_KEY);
}
else if (msg=="show")
{
show_me();
llMessageLinked(LINK_SET,0,"show", NULL_KEY);
}
}
changed(integer change)
{
if(change & CHANGED_LINK)
{
avatar = llAvatarOnSitTarget();
if(llKey2Name(avatar))
{
if(trigger != avatar)
llRequestPermissions(avatar,
PERMISSION_TRIGGER_ANIMATION);
}
else if(trigger)
{
llSetTimerEvent(0);
if(trigger == llGetPermissionsKey())//right user?
if(llGetPermissions() &
PERMISSION_TRIGGER_ANIMATION)//got permissions?
if(llKey2Name(trigger))
llStopAnimation(animation);
}
}
}
run_time_permissions(integer perm)
{
avatar = llAvatarOnSitTarget();
if(perm & PERMISSION_TRIGGER_ANIMATION && llKey2Name(avatar) != ""
&& avatar == llGetPermissionsKey())
{
trigger = avatar;
llStopAnimation("sit");
randomAnimation();
llSetTimerEvent(llFrand(maxTime));
}
}
timer()
{
randomAnimation();
}
}
____________________ END CUT ________________
On 5/23/07, Harold Brown <labrat.hb at gmail.com> wrote:
>
> float maxTime = 10; // Maximum time between animation changes
>
>
> // Function to randomly select and play an animation
> function randomAnimation()
> {
> // Get the total number of animations in the inventory
> integer max = llGetInventoryNumber(INVENTORY_ANIMATION);
>
> // Pick a random animation to play
> integer anim = (integer)llFrand(max);
>
> // Start the animation
> llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,anim));
>
> llSetTimerEvent(llFrand(maxTime));
> }
>
> default()
> {
> state_entry()
> {
> // Do setup code here
> }
>
> changed(integer change)
> {
> if(change & CHANGED_LINK)
> {
> avatar = llAvatarOnSitTarget();
> if(llKey2Name(avatar))
> {
> if(trigger != avatar)
> llRequestPermissions(avatar,
> PERMISSION_TRIGGER_ANIMATION);
> }
> else if(trigger)
> {
> llSetTimerEvent(0);
> if(trigger == llGetPermissionsKey())//right user?
> if(llGetPermissions() &
> PERMISSION_TRIGGER_ANIMATION)//got permissions?
> if(llKey2Name(trigger)) //user in the sim? modern
> permision system makes this last check unnecessary.
> llStopAnimation(animation);
> }
> }
> }
>
> run_time_permissions(integer perm)
> {
> avatar = llAvatarOnSitTarget();
> if(perm & PERMISSION_TRIGGER_ANIMATION && llKey2Name(avatar) != ""
> && avatar == llGetPermissionsKey())
> {
> trigger = avatar;
> llStopAnimation("sit");
> randomAnimation();
> llSetTimerEvent(llFrand(maxTime));
> }
> }
>
> timer()
> {
> randomAnimation();
> }
>
> }
>
>
> On 5/23/07, Dana Moore <dana.virtual at gmail.com> wrote:
>
> > Forgive what is probably a nOOb question, but I have googled for an
> > answer and poked about in the FAQs and can't seem to get this one.
> > Suppose I have a pose ball attached to a chair and I have several
> > individual sit animations.
> > I would like them to fire randomly, and perhaps have a stock sit action
> > to tween.
> > I thought perhaps that simply including them in the content of the pose
> > ball might be all I would need to do (silly me).
> > Perhaps someone with a larger cranial capacity could suggest the right
> > way to do this?
> >
> >
> > Dana Moore
> > Division Scientist
> > BBN Technologies
> > YM: dana_virtual
> > SL: ElectricSheep Expedition
> >
> > _______________________________________________
> > Click here to unsubscribe or manage your list subscription:
> > /index.html
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.secondlife.com/pipermail/sldev/attachments/20070523/b1b0dbf2/attachment-0001.htm
More information about the SLDev
mailing list