[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
 
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

| 
 | 
| - 注意 - お決まりの話しですが、ココに記載の情報利用に伴う一切の不利益についてOrange Forestは責任を負いません。本記事の内容は自己責任で参照下さい。バグ指摘、質問は歓迎です。 | 
| //---------------------------------------------------------------------------------
// showcurpos - Show current position
// $Id: showcurpos.lsl 682 2010-06-12 15:54:53Z myuse $
//---------------------------------------------------------------------------------
vector gPrevPos = ZERO_VECTOR;
default {
  state_entry () {
    // Show object after build
    llSetAlpha(1.0, ALL_SIDES);
    llSetText("", ZERO_VECTOR, 0.0);
    // HUDを装着したままスクリプトを編集した場合の初期化処理
    if (llGetAttached()) {
      llSetAlpha(0.3, ALL_SIDES);
      llSetTimerEvent(1.0);
    }
  }
  // HUDを装着した場合、on_rez → attach の順番でイベントが発生する。
  // HUDを地面に置いた場合は on_rez のみ発生
  // HUDを不透明にして動作停止
  on_rez (integer rezParam) {
    // Show object after rez
    llSetAlpha(1.0, ALL_SIDES);
    llSetText("", ZERO_VECTOR, 0.0);
    llSetTimerEvent(0.0);
  }
  attach (key id) {
    if (id == llGetOwner()) {
      // HUD をオーナーが装着した
      // → 半透明にして1秒毎に動作開始
      llSetAlpha(0.3, ALL_SIDES);
      llSetTimerEvent(1.0);
      gPrevPos = ZERO_VECTOR;
    }
    else {
      // HUDを取り外した
      // → 不透明にして動作停止
      llSetAlpha(1.0, ALL_SIDES);
      llSetText("", ZERO_VECTOR, 0.0);
      llSetTimerEvent(0.0);
    }
  }
 // 1秒毎に呼び出されるHUD表示更新処理
  timer () {
    vector  pos    = llGetPos();
    integer ground = (integer)llGround(ZERO_VECTOR);
    integer water  = (integer)llWater(ZERO_VECTOR);
    integer parcel = llGetParcelFlags(pos);
    string  out;
    integer abs;
    vector  col    = <0.0, 0.5, 1.0>;  // blue
    // Check if moved ?
    if (gPrevPos == pos) {
      // アバターが移動していない場合は何もしないで終了
      return;
    }
    else {
      gPrevPos = pos;
    }
    // Get absolute altitude
    if (ground > water) {
      abs = ground;
    }
    else {
      abs = water;
    }
    abs = ((integer)pos.z) - abs;
    out = llGetRegionName() + "/" +
          (string)((integer)pos.x) + "/" +
          (string)((integer)pos.y) + "/" +
          (string)((integer)pos.z) + "\nAbsAlt: " + (string)abs + "m";
    // HUDの文字の色の設定
    // 赤 : 進入禁止区域
    // 橙 : Rez不可
    // 青 : Rez, 進入OK
    // イマイチ正しく機能しない場合あり
    if (parcel & (PARCEL_FLAG_USE_ACCESS_GROUP |
                  PARCEL_FLAG_USE_ACCESS_LIST |
                  PARCEL_FLAG_USE_LAND_PASS_LIST)) {
      col = <1.0, 0.0, 0.0>;  // red
    }
    else if ((parcel & PARCEL_FLAG_ALLOW_CREATE_OBJECTS) == 0) {
      col = <1.0, 0.5, 0.0>;  // orange
    }
    // HUD表示
    llSetText(out, col, 1.0);
  }
}
 | 
| ここで説明するスクリプトの使用についてオレンジフォレストは一切の損害や、サポートに対する責任を負いません。あくまで自己責任で参照下さい。 スクリプトのCopyrightを保持した上で改変、再販は御自由に。 | 
| //================================================================================ |