Project: Loud Clock

Back to project

File name: Loud Clock.lsl
Code: View Raw Code

mbell()
{
            llTriggerSound("bell1", 1.0);
            llTriggerSound("bell1", 1.0);
            llTriggerSound("bell1", 1.0);
            llTriggerSound("bell1", 1.0);
            llTriggerSound("bell1", 1.0);
            llTriggerSound("bell1", 1.0);
            llTriggerSound("bell1", 1.0);                        
}

updclock(float timezone, integer military)
{    
    float cl = (llGetGMTclock()+timezone*3600)/3600.;

    float hrs =  cl%24;        //(cl%12)/12.;
    if (hrs >12.) hrs -=12;
    float mns = (hrs-llFloor(hrs));
    
    //llOwnerSay(" = "+(string)hrs);
    llSetLinkPrimitiveParams(3, [PRIM_ROT_LOCAL, llEuler2Rot(<-PI/2+ 2*hrs*PI/12 , PI, 0>)]);
    llSetLinkPrimitiveParams(2, [PRIM_ROT_LOCAL, llEuler2Rot(<-PI/2+2*mns*PI , PI,0>)]);
    
    if ((integer)hrs != lastHr)
    {
        lastHr = (integer)hrs;
        integer i;
        //llOwnerSay("lastHr = "+lastHr);
        integer bell = lastHr;
        if (lastHr ==0) bell = 12;
        for (i=0; i < bell; i++)
        {

            mbell();
            llSleep(3);
        }
    }
    if ((integer)(mns*4.) != lastMin)
    {
        lastMin = (integer)(mns*4);
        if (lastMin>0)
        {
            mbell();
            llSleep(2.);
            mbell();
        }
    }
}

integer lastHr =-1;
integer lastMin =-1;

default
{
    state_entry()
    {
        llSetLinkPrimitiveParams(4, [PRIM_OMEGA, <1,0,0>, 2*PI/60., 1.0]);
        llSetTimerEvent(60);
                updclock((integer)llGetObjectDesc(),0 );
    }
    
    timer()
    {
        updclock((integer)llGetObjectDesc(),0 );
    }
    
    touch_start(integer n)
    {           
             mbell();       
    }
}