Suite du tutorial 14 (je viens de découvrir les limites de ce blog en étant obligé de découper ce tutorial en deux parties)...
Voyons maintenant le code de la ball :
vector
position; //
Position de depart
string
animation; //
Nom de l'animation
key
AgentKey; // Clef de
l'avatar
integer
ecoute;
// ecoute
du chat
integer
canal; // canal
d'ecoute
integer
canal_de_ball; // Canal
de reponse
rotation
rot; // rotation
initiale
initialisations () {
// Animation
animation =
"sit knees up2";
// Changement du texte
du menu
llSetSitText("Glisser");
// Positionnement de
l'animation
llSitTarget(<0.0,0.0,.5>,
ZERO_ROTATION);
// Canaux
canal = 37;
canal_de_ball = 38;
// Memorisation de la
position
position
= llGetPos();
rot = llGetRot();
}
depart ( ) {
// Boule visible
llSetAlpha(1.0,
ALL_SIDES);
// Passage en non
physique
llSetStatus(STATUS_PHYSICS, FALSE);
// Retour de la boule au depart
llSetPos
(position
);
// Rotation
llSetRot(rot);
}
default {
on_rez(integer start_param) {
//
Initialisations
initialisations();
// Memorisation du canal d'ecoute
canal
= start_param;
// Changement d'etat
state
attente;
}
}
state attente {
// Entree dans
l'etat
state_entry() {
// Activation de l'ecoute du toboggan
ecoute = llListen(canal,"",NULL_KEY,"");
// Mise en route du timer
llSetTimerEvent(120);
// Depart
depart();
}
// Atteinte du bas du toboggan determine
// avec la collision
avec le sol
land_collision
(vector
position)
{
// Avatar
debout
llUnSit(AgentKey);
}
// Detection d'un
changement
changed(integer
change) {
// Test de changement dans les
liaisons
if
(change & CHANGED_LINK) {
// Determination de la clef de
l'avatar
AgentKey = llAvatarOnSitTarget
();
// Un avatar est present ?
if
(AgentKey) {
// Permission
d'animation
llRequestPermissions
(AgentKey, PERMISSION_TRIGGER_ANIMATION);
// Passage en physique et interdiction
des rotations
llSetStatus
(STATUS_PHYSICS
, TRUE);
llSetStatus(STATUS_ROTATE_Y | STATUS_ROTATE_X | STATUS_ROTATE_Z, FALSE);
//
Impulsion
llApplyImpulse(llGetMass()*<3.0,0.0,0.0>,
TRUE);
// Boule
invisible
llSetAlpha(0,
ALL_SIDES);
}
else {
// Determination de l'animation en
cours
string anim = llGetAnimation(AgentKey);
// Arret
eventuel de
l'animation
if(anim ==
"animation")
llStopAnimation(anim);
// Depart
depart();
}
}
}
// Permission accordee
run_time_permissions(integer permissions) {
if(permissions == PERMISSION_TRIGGER_ANIMATION) {
// Arret de l'animation par
defaut
llStopAnimation("sit");
//
Animation
llStartAnimation(animation);
}
}
// Ecoute
listen(integer channel, string name, key
id, string message)
{
if (message
== "Meurs")
llDie();
else if (message
== "Vis")
llSetTimerEvent(120);
else if (message
== "Positions") {
// Memorisation de la position
position = llGetPos();
rot
= llGetRot();
// Envoi
des positions au toboggan
llSay
(canal_de_ball,
(string)position
+ "|" +
(string)rot);
}
}
// Delai ecoule
timer
(
) {
// Suicide
llDie();
}
}
Une grande partie de ce code a déjà été décrit dans le tutorial précédent. Je vais donc me contenter de commenter les nouveautés.
On va s’intéresser en particulier l’événement on_rez qui se déclenche lors de la création de la ball. On procède alors aux initialisations, en particulier la mémorisation de la position et de la rotation. On récupère également le canal d’écoute qui se retrouve dans le paramètre de l’événement. Ensuite on passe à l’état attente.
A l’entrée dans cet état on active l’écoute du toboggan. On déclenche un timer réglé à 120 secondes. S’il ne se produit aucun changement au bout de ce délai l’événement timer se produit et la fonction llDie supprime la ball. Ensuite on appelle la méthode depart qui est identique à celle du précédent tutorial.
Comme nouveauté nous trouvons l’écoute du toboggan. Le message « Meurs » entraine l’exécution de la fonction llDie pour suicider la ball. Le message « Vis » réinitialise le timer pour une nouvelle durée de 120 secondes. Enfin le message « Positions » provoque l’envoi des coordonnées au toboggan dans le format qu’il s’attend à recevoir.
Mode opératoire : commencez par créer le toboggan et son script. Ensuite créez la ball, en la nommant bien « ball », et son script et mettez là dans votre inventaire. Faites enfin glisser la ball de votre inventaire dans le contenu du toboggan. A la première touche du toboggan activez l’option « Glissade » pour créer la ball. Ajustez ensuite celle-ci correctement. Touchez alors le toboggan et choisissez l’option « Position » pour mémoriser la position de la ball. Votre toboggan est prêt à l’emploi J.







bestmomo lagan
lun 11 fév 2008 19:08