User:Jasper Flossberg
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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>