Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
archiv:opensim:downloads:scripts:prim_mover [2024/01/24 16:39] – Externe Bearbeitung 127.0.0.1 | archiv:opensim:downloads:scripts:prim_mover [Unbekanntes Datum] (aktuell) – Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ===== Prim Mover ===== | ||
+ | |||
+ | < | ||
+ | float | ||
+ | string | ||
+ | |||
+ | /////////////////////////////////////////////////////////////////////////// | ||
+ | vector | ||
+ | |||
+ | warpPos( vector destpos ){ | ||
+ | integer jumps = (integer)(llVecDist(destpos, | ||
+ | |||
+ | if (jumps > 100 ) | ||
+ | jumps = 100; | ||
+ | |||
+ | list rules = [ PRIM_POSITION, | ||
+ | |||
+ | integer count = 1; | ||
+ | while ( ( count = count << 1 ) < jumps) | ||
+ | rules = (rules=[]) + rules + rules; | ||
+ | |||
+ | llSetPrimitiveParams( rules + llList2List( rules, (count - jumps) << 1, count) ); | ||
+ | |||
+ | if ( llVecDist( llGetPos(), destpos ) > .001 ) | ||
+ | while ( --jumps ) | ||
+ | llSetPos( destpos ); | ||
+ | } | ||
+ | |||
+ | default | ||
+ | { | ||
+ | |||
+ | state_entry() | ||
+ | { | ||
+ | llSitTarget(< | ||
+ | llSetCameraEyeOffset(< | ||
+ | llSetCameraAtOffset(< | ||
+ | llListen(4,"", | ||
+ | } | ||
+ | |||
+ | changed(integer c) | ||
+ | { | ||
+ | if(c & CHANGED_LINK && llAvatarOnSitTarget() == llGetOwner()) | ||
+ | { | ||
+ | llRequestPermissions(llAvatarOnSitTarget(), | ||
+ | warpPos(llGetPos() + < | ||
+ | } else if(c & CHANGED_LINK && llAvatarOnSitTarget() == NULL_KEY){ | ||
+ | warpPos(llGetPos() - < | ||
+ | } | ||
+ | } | ||
+ | |||
+ | listen(integer c, string n, key id, string msg){ | ||
+ | cnfSpeed = (float)msg; | ||
+ | } | ||
+ | |||
+ | run_time_permissions(integer perm){ | ||
+ | if(perm & PERMISSION_TRIGGER_ANIMATION && llAvatarOnSitTarget() == llGetOwner()){ | ||
+ | llStopAnimation(" | ||
+ | llStartAnimation(cnfSitAnim); | ||
+ | } | ||
+ | if(perm & PERMISSION_TAKE_CONTROLS && llAvatarOnSitTarget() == llGetOwner()){ | ||
+ | llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT, | ||
+ | } | ||
+ | } | ||
+ | |||
+ | touch_start(integer n){ | ||
+ | llRequestPermissions(llAvatarOnSitTarget(), | ||
+ | } | ||
+ | |||
+ | control(key id, integer held, integer change){ | ||
+ | rotation rot; | ||
+ | if(held & CONTROL_FWD) | ||
+ | velocity.x = velocity.x + cnfSpeed; | ||
+ | else | ||
+ | velocity.x *= 0.75; | ||
+ | |||
+ | if(held & CONTROL_BACK) | ||
+ | velocity.x = velocity.x - cnfSpeed; | ||
+ | else | ||
+ | velocity.x *= 0.75; | ||
+ | |||
+ | if(held & CONTROL_LEFT) | ||
+ | velocity.y = velocity.y - cnfSpeed; | ||
+ | else | ||
+ | velocity.y *= 0.75; | ||
+ | |||
+ | if(held & CONTROL_RIGHT) | ||
+ | velocity.y = velocity.y + cnfSpeed; | ||
+ | else | ||
+ | velocity.y *= 0.75; | ||
+ | |||
+ | if(held & CONTROL_UP) | ||
+ | llSetPos(llGetPos() + < | ||
+ | |||
+ | if(held & CONTROL_DOWN) | ||
+ | llSetPos(llGetPos() + < | ||
+ | |||
+ | if(held & CONTROL_ROT_LEFT) | ||
+ | { | ||
+ | rot = llGetRot() * llEuler2Rot(< | ||
+ | llSetRot(rot); | ||
+ | } | ||
+ | |||
+ | if(held & CONTROL_ROT_RIGHT) | ||
+ | { | ||
+ | rot = llGetRot() * llEuler2Rot(< | ||
+ | llSetRot(rot); | ||
+ | } | ||
+ | |||
+ | llSetPos(velocity * llGetRot() + llGetPos()); | ||
+ | } | ||
+ | } | ||
+ | </ | ||