User:Jasper Flossberg
Jump to navigation
Jump to search
| LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
This is a KeyFrame Animator Script to simplify construction of keyframed animations. --Jasper Flossberg
<lsl> integer channel=0; integer MODE=0; // 0 NonInit 1 Init 2 Run list keys=[]; vector last_pos; rotation last_rot;
vector start_pos; rotation start_rot;
update_loc() {
last_pos=llGetPos(); last_rot=llGetRot();
}
default {
state_entry()
{
llSay(0, "Welcome to the KeyFrame Setter v1.0 by Jasper Flossberg");
llListen(0,"",NULL_KEY,"");
}
touch_start(integer total_number)
{
channel=(integer)llFrand(4000000);
llDialog(llDetectedKey(0),"Please choose option",["Init","Run","Export"],channel);
llListen(channel,"",NULL_KEY,"");
}
listen(integer channel, string name, key id, string message)
{
if(message=="Init")
{
llSay(0,"Intializing KeyFrame Setter");
llSetKeyframedMotion([],[]);
keys=[];
update_loc();
start_pos=llGetPos();
start_rot=llGetRot();
MODE=1;
}
if(llGetSubString(message,0,2)=="set")
{
if(MODE==1)
{
string time=llList2String(llParseString2List(message,[" "],[]),1);
llSay(0,"Setting new KeyFrame with "+time);
keys+=[llGetPos()-last_pos,ZERO_ROTATION*(llGetRot()/last_rot),(integer)time];
update_loc();
}
}
if(message=="Run")
{
MODE=2;
llSetPrimitiveParams([PRIM_POSITION,start_pos,PRIM_ROTATION,start_rot]);
llSetKeyframedMotion(keys,[KFM_MODE,KFM_LOOP]);
}
if(message=="Export")
{
llSay(0,(string)keys);
}
}
} </lsl>