You are on page 1of 11

Scriptiamo una “Guida

Turistica”
(Pergola)
Salahzar Stenvaag
ALI – Accademia Land Italiane
Ottobre 2009
Introduzione
Pilotato da una notecard
Oggetto fisico “personale” su cui ci
si può “sedere”
Sulla notecard coordinate, titolo,
descrizione
Sequenza di frasi da dire mentre ci
si muove
Specifica della rotazione finale
Si muove verso prossima tappa con
un “touch”
All’ultimo touch torna alla posizione
pagina 2
Struttura Notecard
# Posizione iniziale, testo, colore,rotazione
<48,29,251>|Sono la guida, cliccami|<1,0,0>|<0,0,0>

# Le righe successive contengono la prima posizione

finale, titolo, colore, rotazione,secondi per


arrivarci
# poi una serie di righe che terminano con una riga

vuota e così via


<54,35,251>|La Torre|<0,0,1>|<0,0,45>|3

Adesso andiamo alla torre

seguimi per cortesia

arriveremo subito

# Ultima destinazione termina invece con FINE


<54,29,251>|Destinazione finale|<0,1,0>|<0,0,90>|5

Andiamo alla destinazione finale

FINE

pagina 3
Struttura del programma
Variabiliglobali (essenziali!!!!)
Funzioni di utilità (parse)
Stato default per copiare la notecard
in memoria
◦ State_entry: inizio lettura notecard
◦ Dataserver: per leggere via via le
varie righe
Stato ready (pronta per fare la
guida)
◦ State_entry: inizializza prima
“stazione”
◦ Touch_start: per passare prossima
pagina 4
Variabili globali
string notecard; // nome della notecard
integer line; // riga a cui siamo arrivati a

leggere
list lines; // copia della notecard senza #

commenti

vector pos; // posizione letta “stazione”


string text; // Titolo “stazione” per

llSetText
vector color; // colore del titolo

vector rot; // rotazione dell’avatar

float secondi; // quanti secondi pagina 5


Funzione “parse” per estrarre
elementi riga
(pos,text,col,rot,secs)
parse(string s)
 {
 list
pieces=llParseStringKeepNulls(s,
["|"],[]);

pos=(vector)llList2String(pieces,0)
;
 text=llList2String(pieces,1);

pagina 6
Stato default state_entry
 default
{

 state_entry()
 {
 llSetStatus(STATUS_PHYSICS,FALSE);
 llSetBuoyancy(1); // fluttua in aria
 llSetText("Sono una guida
turistica",<1,1,1>,1);

notecard=llGetInventoryName(INVENTO
RY_NOTECARD,0);
 lines=[]; pagina 7
Stato default data_server
 dataserver(key id,string str)
 {

 llSetText("Reading line "+


(string)line,<1,1,1>,1);
 if(str!=EOF)
 {
 // ignora le righe che iniziano con #
 if(llGetSubString(str,0,0)!="#")
 lines+=[str];
 line++;
llGetNotecardLine(notecard,line);
pagina 8

Stato ready state_entry
 state ready
{

 state_entry()
 {
 line=0;
 // trova pos, text, color
 parse(llList2String(lines,line));
 llSetText(text,color,1);
 llSetPos(pos);
 llSetRot(llEuler2Rot(DEG_TO_RAD*rot));


pagina 9
Stato ready touch_start
 touch_start(integer total_number) {
 line++;
 if(text=="FINE“) {
 llResetScript();
 return;
 }
 parse(llList2String(lines,line));
 llSetText(text,color,1); id=llTarget(pos,.3);
 llSetStatus(STATUS_PHYSICS,TRUE);
 llMoveToTarget(pos,secondi);
 while(TRUE) {
 line++;
 text=llList2String(lines,line);
 if(text=="FINE") return;
 if(text=="") return; pagina 10
Stato ready at_target
 at_target(integer tnum, vector pos,
vector our)
 {
 llTargetRemove(id);

llSetStatus(STATUS_PHYSICS,FALSE);
 llSetPos(pos);

llSetRot(llEuler2Rot(DEG_TO_RAD*rot
));
 llSay(0,"cliccami per la prossima
pagina 11