2011年8月23日火曜日

スカルプを表示させる装置のスクリプト

今回は装置のコンテンツ内にスカルプトテクスチャを入れてスカルプテッドプリムを表示させる簡単なスカルプ表示装置を作ってみました。丁度スカルプのテクスチャをアップロードするときのウィンドウで形状を確認できるのと同じ程度のものなんですが^^;

まず装置のプリムを作成します。1.0x1.0x0.2ぐらいのボックスを作り、面番号1番の面(Y軸のマイナス側の面)に操作パネルのテクスチャ(「← →」みたいな)を作って貼り付けてください。。。まあこのアニメーションベンダーと同じ感じにしてもらったらOKです。

そして、0.5x0.5x0.5ぐらいのボックス(ボックス以外でもいいけど)を作って、先ほど作ったプリムの真上に少し空間を空けて浮かべて、これを子プリムとしてリンクさせてください。(2プリムのオブジェクトになります)

続いてスクリプトです。スカルプの縫い目の種類はシリンダーに打ち決めしてます。http://wiki.secondlife.com/wiki/PRIM_TYPE_SCULPT/ja
// Sculpt viewer
integer number;  // スカルプトテクスチャの数
integer cur;  // ポインタ用
integer sculpt=2;  // 子プリムのリンク番号
integer sculpt_type=PRIM_SCULPT_TYPE_CYLINDER;  // スカルプの縫い目の種類

set_sculpt()
{
    string texture=llGetInventoryName(INVENTORY_TEXTURE,cur);  // ポインタからテクスチャ名を取得
    if (number > 0) llSetText(texture+" ("+(string)(cur+1)+"/"+(string)number+")",<1,1,1>,1.0);  // テクスチャが入ってるときフローティングテキストを表示
    else llSetText("",<1,1,1>,1.0);  // 入ってないときはフローティングテキスト非表示
    llSetLinkPrimitiveParamsFast(sculpt,[PRIM_TYPE,PRIM_TYPE_SCULPT,texture,sculpt_type]);  // スカルプを表示
}

init()
{
    number=llGetInventoryNumber(INVENTORY_TEXTURE);  // コンテンツ内のテクスチャ数
    if (cur >= number) cur=0;  // ポインタを初期化
    set_sculpt();  // set_sculptへ
}

default
{
    state_entry()
    {
        init();  // 最初はinitへ
    }

    changed(integer change)
    {
        if (change & CHANGED_INVENTORY) init();  // コンテンツ内が変化したらinit
    }

    touch_start(integer total_number)
    {  // タッチ
        integer i=llDetectedTouchFace(0);  // タッチされた面番号
        if (i == 1) {  // 面番号が1だったら
            vector v=llDetectedTouchUV(0);  // タッチされた位置
            if (v.x > 0.5) {  // 中央よりも右だったら「→」
                cur++;
                if (cur >= number) cur=0;
            }
            else {  // そうでないときは「←」
                cur--;
                if (cur < 0) cur=number-1;
            }
            if (cur >= 0) set_sculpt();  // set_sculptへ
        }
        else if (i == -1) {  // 古いビューワーは非サポート
            llWhisper(0,"Your viewer is not support.");
        }
    }
}

スクリプトを装置の親プリムのコンテンツに入れて、スカルプのテクスチャ(スカルプトUVマップ)もそこに入れてください。テクスチャを複数入れたら「←」「→」で順次表示できます^^


縦、横、高さとも同じ長さなので、やっぱりスカルプの階段なんかはこんな感じになりますけどねwww