[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); } } |