Follow us on Twitter
Digital Concepts Website!

Analogue Clock AIO v0.1

Mode Standalone Standalone HG Grid Simian Grid Diva Grid Compat OpenSim Aurora-Sim Diva Disto Second Life Langage Lsl
  • Titre
    Analogue Clock AIO v0.1
  • Createur
    djphil
  • Internalisation
    Français Anglais
  • Gratuit
    Oui
  • Page vues
    6038 fois
  • Favoris
    Ajouter aux favoris
  • J'aime
  • Voter
    (1 vote)

Scripts permettant de faire tourner les différentes aiguilles d'une horloge analogique.

Créez 4 Prims Cylindres les uns au dessus des autres (3 pour les aiguilles et 1 pour la base) et liés les de haut en bas. Le bas sera donc le prim root servant de base à l'horloge. Placez le script ci-dessous dans le prim root.

Analogue Clock AIO v0.1 by djphil
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// Analogue Clock AIO v0.1 by djphil
 
default
{
 state_entry()
 {
 llSetTimerEvent(1.0);
 }
 
 timer()
 {
 float now = llGetWallclock();
 integer tmp = (integer)now / 60;
 
 // Heures
 float hour = (now / 60) / 60;
 integer minute = tmp - ((integer)hour * 60);
 rotation hand_rot = llEuler2Rot(<0, 0, -30 * (hour * DEG_TO_RAD)>);
 llSetLinkPrimitiveParamsFast(2, [PRIM_ROT_LOCAL, hand_rot]);
 
 // Minutes
 hour = tmp / 60;
 minute = tmp - ((integer)hour * 60);
 hand_rot = llEuler2Rot(<0, 0, -6 * minute * DEG_TO_RAD>);
 llSetLinkPrimitiveParamsFast(3, [PRIM_ROT_LOCAL, hand_rot]);
 
 // Secondes
 integer second = (integer)now - ((integer)hour*60)-(minute * 60);
 hand_rot = llEuler2Rot(<0, 0, -6 * second * DEG_TO_RAD>);
 llSetLinkPrimitiveParamsFast(4, [PRIM_ROT_LOCAL, hand_rot]);
 }
}

Voici la même chose mais avec 3 scripts séparés (plus gourmand).

Aiguille des secondes:

Aiguille des secondes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
default { 
 state_entry() {
 llSetTimerEvent(1);
 }
 timer() {
 float now = llGetWallclock();
 integer tmp = (integer)now / 60;
 integer hour = tmp / 60;
 integer minute = tmp - (hour * 60);
 integer second = (integer)now - (hour*60)-(minute * 60);
 rotation hand_rot = llEuler2Rot(<-6 * second * DEG_TO_RAD, 0, 0>);
 llSetLocalRot(hand_rot);
 }
}

Aiguille des minutes:

Aiguille des minutes
1
2
3
4
5
6
7
8
9
10
11
12
13
default { 
 state_entry() {
 llSetTimerEvent(1);
 }
 timer() {
 float now = llGetWallclock();
 integer tmp = (integer)now / 60;
 integer hour = tmp / 60;
 integer minute = tmp - (hour * 60);
 rotation hand_rot = llEuler2Rot(<-6 * minute * DEG_TO_RAD, 0, 0>);
 llSetLocalRot(hand_rot);
 }
}

Aiguille des heures:

Aiguille des heures:
1
2
3
4
5
6
7
8
9
10
11
12
13
default { 
 state_entry() {
 llSetTimerEvent(1);
 }
 timer() {
 float now = llGetWallclock();
 integer tmp = (integer)now / 60;
 float hour = (now / 60) / 60;
 integer minute = tmp - ((integer)hour * 60);
 rotation hand_rot = llEuler2Rot(<-30 * (hour * DEG_TO_RAD), 0, 0>);
 llSetLocalRot(hand_rot);
 }
}