// SPDX-License-Identifier: MIT // Copyright (c) 2026 Incoprea // Figure-eight exhibit path // Not compiled or tested in-world // Setup: Put in a small child with at least half a meter of clear space in root X/Y. // Stop / restore: Owner-touch to stop and restore the captured starting pose before removing, resetting, or relinking. // Notes: Use a small nonphysical rezzed build with clear space. Actual prim transforms change. Original poses live only in script memory. Do not change physical status or link topology during use. Orientation stays fixed; this is a path study rather than automatic nose alignment. The path starts at its crossing center. // License: see LICENSE in this distribution. // Original Incoprea. MIT. Not compiled or tested in-world. vector home; rotation rest; integer active; integer valid=TRUE; default { state_entry() { home=llGetLocalPos(); rest=llGetLocalRot(); } touch_start(integer count) { if(llDetectedKey(0)!=llGetOwner()||!valid||llGetLinkNumber()<2||llGetStatus(STATUS_PHYSICS))return; active=!active; if(active) { llResetTime(); float t=llGetTime()*0.4; vector p=home+<0.4*llSin(t),0.2*llSin(2.0*t),0.0>; llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_POS_LOCAL,p]); llSetTimerEvent(0.2); } else { llSetTimerEvent(0.0); llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_POS_LOCAL,home,PRIM_ROT_LOCAL,rest]); } } timer() { if(llGetLinkNumber()<2||llGetStatus(STATUS_PHYSICS)) { llSetTimerEvent(0.0); active=FALSE; return; } float t=llGetTime()*0.4; vector p=home+<0.4*llSin(t),0.2*llSin(2.0*t),0.0>; llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_POS_LOCAL,p]); } changed(integer change) { if(change&CHANGED_LINK) { valid=FALSE; active=FALSE; llSetTimerEvent(0.0); llOwnerSay("Links changed; stopped without restoring. Reposition and reset before reuse."); } } }