●関数解説
| llGetPermissions | |
|---|---|
| ・概要 | |
|
llGetPermissions関数は、以下の許可情報を取得します。 お金を支払う許可 キー操作の許可 アニメーションの実行許可 アタッチの許可 リンクの許可 カメラ位置を取得する許可 カメラを制御する許可 | |
| ・書式 | |
| integer llGetPermissions() | |
| ・パラメータ | |
| なし | |
| ・戻り値 | |
|
以下の許可情報が返ります。 PERMISSION_DEBIT PERMISSION_TAKE_CONTROLS PERMISSION_TRIGGER_ANIMATION PERMISSION_ATTACH PERMISSION_CHANGE_LINKS PERMISSION_TRACK_CAMERA PERMISSION_CONTROL_CAMERA | |
| ・使い方 | |
|
LlGetPermissions関数を用いて、許可情報を取得して、現在必要な許可がされていなければ、LlRequestPermissions関数で許可申請を行います。 // 許可情報を取得 integer perm = llGetPermissions(); // ビット演算のAND(論理積)を用いて許可情報から必要な許可を調べます if (perm & PERMISSION_TRACK_CAMERA){ ... } |
┌─┬─┬───┐
│a │b │a & b │許可情報 必要な許可
├─┼─┼───┤
│0 │0 │ 0 │不許可 不許可 不許可
│0 │1 │ 0 │不許可 許可 不許可
│1 │0 │ 0 │許可 不許可 不許可
│1 │1 │ 1 │許可 許可 許可
└─┴─┴───┘
2つのビットが両方1のときだけ出力が1になる(乗算に似ている)
0x6A & 0x0F → 0x0A
0000 0000 0110 1010 --- 0x6A
&) 0000 0000 0000 1111 --- 0x0F
-----------------------
0000 0000 0000 1010 --- 0x0A
↑マスク(強制的に0)
●サンプル
アバターの正面にカメラを移動させるサンプルです。
サンプルを実行した時にカメラが移動しない場合は、Alt + Zoom などで、カメラコントロールが支配されている状態にあります。
ESCキーを2回押して、カメラコントロールを解放すると、正常動作します。
この動作は、カメラコントロールの仕様なので、覚えておきましょう。
set_camera(vector vPos, vector vFwd){
// 許可情報を取得
integer perm = llGetPermissions();
// ビット演算のAND(論理積)を用いて許可情報からカメラ制御の許可があるか調べます
if (perm & PERMISSION_CONTROL_CAMERA) {
// 許可があればカメラのパラメータをセットします
llSetCameraParams([
CAMERA_ACTIVE, TRUE,
CAMERA_POSITION, vPos + vFwd,
CAMERA_POSITION_LOCKED, TRUE,
CAMERA_FOCUS, vPos,
CAMERA_FOCUS_LOCKED, TRUE
]);
}
}
front_camera(){
vector vFwd = llRot2Fwd(llGetRot());
vFwd += vFwd;
vector vPos = llGetPos();
set_camera(vPos,vFwd);
}
default
{
state_entry(){
if (llGetAttached() != 0){
llRequestPermissions(llGetOwner(), PERMISSION_CONTROL_CAMERA);
front_camera();
}
}
attach(key agent){
if (agent != NULL_KEY){
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
front_camera();
}else{
// 許可情報を取得
integer perm = llGetPermissions();
// ビット演算のAND(論理積)を用いて許可情報からカメラ制御の許可があるか調べます
if (perm & PERMISSION_CONTROL_CAMERA){
// 許可があればカメラのパラメータをクリアします
llClearCameraParams();
llReleaseCamera(llGetPermissionsKey());
}
}
}
on_rez(integer param){
llResetScript();
}
}
■参照
llRequestPermissions
llGetOwner
llSetCameraParams
llGetAttached
llGetRot
llRot2Fwd
llClearCameraParams
llGetPermissionsKey