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>