Una delle cose più complesse negli script di SL è quella di affrontare la fase di debug. Ho scritto una minuscola funzione che mi consente il debug in maniera rapida e semplice e credo sia utile condividere questa riga di codice in quanto mi ha fatto risparmiare un sacco di tempo:
integer DEBUG = TRUE;
debug(list _lst)
{
if(DEBUG) llOwnerSay(llDumpList2String(_lst," "));
}
La comodità è che possiamo chiamarla senza alcun casting dei dati come da esempio:
debug( ["x=",x,"y=",y,"z=",z,"vettore=",vector] );
Comodo no?
Se vogliamo effettuare un debug in un ciclo:
list deb=[];
for( i=0; i<l; i++) {
//.....
deb += ["i vale",i, "pippo=",pippo];
}
debug(deb);
Unica accortezza deve essere usata per le liste:
list giorni=["LU","MA","ME","GI","VE","SA","DO"]; debug( ["giorni vale"] + giorni + ["i=",i] );
Questo perché una lista non può contenere liste e scrivendo:
debug( ["giorni vale", giorni,"i=",i]);
otterremmo un errore di runtime
Ora un altro trucco per attivare e disattivare il debug senza modificare lo script. Personalmente utilizzo il touch verificando il tempo di pressione del tasto del mouse. Se è corto (diciamo < 2 secondi) faccio le cose che dovrei fare al touch, se supera quel tempo cambio stato a DEBUG:
integer DEBUG=FALSE;
default
{
state_entry() { }
// quando inizia il touch resetto il time
touch_start(integer total_number) { float x = llGetAndResetTime(); }
// quando il tasto viene rilasciato gestisco l'evento
touch_end(integer total_number)
{
// se sono passati più di due secondi e chi tocca è l'owner
if( llGetTime() > 2.0 && llGetOwner() == llDetectedKey(0) ) {
if( DEBUG ) { DEBUG = FALSE; llOwnerSay("DEBUG OFF"); }
else { DEBUG = TRUE; llOwnerSay("DEBUG ON"); }
} else {
// altro codice touch
}
}
}
Spero di essere stato minimalisticamente utile a qualcuno
Vittorio Bing
Leave a comment