Poseball

Written by Kitsune
string floattext = "";
string standanimation = "stand";
string sitanimation = "";

stop_all_animations () {
    list animationlist = llGetAnimationList(avatar);
    integer i;
    for (i = 0; i < llGetListLength(animationlist); i++) {
        llStopAnimation(llList2Key(animationlist,i));
    }
}
 
start_animation(string animation,float alpha){
    llSetAlpha(alpha,ALL_SIDES);
    llSetText(floattext,<1,1,1>,alpha);
    llStartAnimation(animation);
}                   

integer dance = TRUE;

key avatar;

default {
    state_entry() {
        floattext = llGetObjectDesc();
        sitanimation = llGetInventoryName(INVENTORY_ANIMATION,0);
        llSetText(floattext,<1,1,1>,1.0);
        llSetSitText("Pose!");
        llSitTarget(<0,0,0.1>,ZERO_ROTATION);
    }
    changed(integer change) {
        if (change & CHANGED_LINK) {
            if (llAvatarOnSitTarget() != NULL_KEY) {
                avatar = llAvatarOnSitTarget();
                integer perm = llGetPermissions();
                if (perm & PERMISSION_TRIGGER_ANIMATION && avatar == llGetPermissionsKey()) {
                    stop_all_animations(); 
                    start_animation(sitanimation,0.0);
                }
                else {
                    dance = TRUE;
                    llRequestPermissions(avatar, PERMISSION_TRIGGER_ANIMATION);
                }
            }
            else if(llGetPermissionsKey() != NULL_KEY){
                if (llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) {
                    stop_all_animations();
                    start_animation(standanimation,1.0);
                }
                else {
                    dance = FALSE;
                    llRequestPermissions(avatar, PERMISSION_TRIGGER_ANIMATION);
                }
            }
        }
    }
    run_time_permissions(integer perm) {
        if (perm & PERMISSION_TRIGGER_ANIMATION) {
            stop_all_animations();
            if (dance) {
                start_animation(sitanimation,0.0);
            }
            else {
                start_animation(standanimation,1.0);
            }
        }
    }
}