ステート

ステートという、LSLの状態を保持する便利な文法があります。 if文を使えば、ステートを使わなくても同じ処理を実現することは可能ですが、 スクリプトが見やすくなる、整理されるのでご紹介しておきます。

下記スクリプトでは、タッチするたびに日本時間ステート(japantime)とグリニッジ標準時間ステート(gmttime) と状態を変え、交互に表示します。見慣れたtouch_startなどのイベント処理がステート毎にコードを書くことが できるので長いスクリプトを書くときには非常に便利です。 ステートの変更は、「state ステート名;」と書きます。

default {
  state_entry()
  {
    state japantime;
  }
}
state japantime{
  touch_start(integer total_number)
  {
    integer now =(integer)llGetGMTclock()+ 9 * 3600;
    llOwnerSay("JAPANhour=" + (string)(now / 3600) );
    llOwnerSay("JAPANminute=" + (string)((now % 3600) / 60) );
    llOwnerSay("JAPANsecond=" + (string)(now % 60) );
    state gmttime;
  }
}
state gmttime{
  touch_start(integer total_number)
  {
    integer now =(integer)llGetGMTclock();
    llOwnerSay("GMThour=" + (string)(now / 3600 ));
    llOwnerSay("GMTminute=" + (string)((now % 3600) / 60) );
    llOwnerSay("GMTsecond=" + (string)(now % 60 ));
    state japantime;
  }
}

llGetGMTclock関数 現在時刻をグリニッジ標準時(世界標準時)で取得します。日本は9時間の時差があります。

japantimeステートの場合

gmttimeステートの場合