ソラマメブログ

2008年11月24日

テクスチャビューワーのスクリプト


今回は1プリムでコンテンツ内のテクスチャを←→で表示する装置のスクリプトです^^

矢印の部分をそれぞれ別の面にしてllDetectedTouchFaceでタッチを検知しますので、プリムはパスカットしたボックスをつぶしてテーパーと上部層を調整して作ります。数値は画像のを参考にしてくださいね。(画像クリックで拡大します)



プリムができたら右向きの矢印を書いたテクスチャを作ってください。左側はllScaleTextureでマイナスの値を入れてテクスチャを反転させてるので、右向きの矢印だけでオッケーなんですよ。スクリプトを入れてから貼り付てくださいね^^
コンテンツ内に入れたテクスチャを表示する面の番号は0、左矢印は6、右矢印は5になります。

// テクスチャビューワー

integer int;  // ポインタ用
integer num;  // テクスチャ数
integer listen_handle;
integer CHANNEL;

set_texture(string arrow)  // テクスチャ表示用
{
    if (arrow == ">") int++;  // arrowが > だったらポインタ進める
    else if (arrow == "<") int--;  // arrowが < だったらポインタ戻す
    else int=0;  // それ以外はポインタを0にする
    if (int > num-1) int=0;  // ポインタがテクスチャ数-1を超えたら0
    else if (int < 0) int=num-1;  // 0より小さくなったらテクスチャ数-1
    string str=llGetInventoryName(INVENTORY_TEXTURE,int);  // ポインタからテクスチャ名取得
    if (str != "") llSetTexture(str,0);  // 面番号0にテクスチャ設定
}

init()
{
    num=llGetInventoryNumber(INVENTORY_TEXTURE);  // テクスチャ数取得
    int=0;  // ポインタ初期化
    if (num > 0) set_texture("");  // テクスチャが1枚以上あったら最初のテクスチャを表示
}

default
{
    state_entry()
    {
        llScaleTexture(1,2,0);  // 面番号0のテクスチャのスケールを設定
        llOffsetTexture(0,0.5,0);  // 面番号0のテクスチャのオフセットを設定
        llScaleTexture(-1,1,6);  // 面番号6のテクスチャの左右を反転
        init();  // initへ
    }

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

    touch_start(integer total_number)
    {
        integer i=llDetectedTouchFace(0);  // タッチした面の番号
        if (i == 5) set_texture(">");  // 面番号5だったら次のテクスチャ表示
        else if (i == 6) set_texture("<");  // 面番号6だったら前のテクスチャ表示
        else if (i == -1) { // SLビューワーが非対応だったらダイアログで対応
            key agent=llDetectedKey(0);
            llListenRemove(listen_handle);
            CHANNEL=llCeil(llFrand(2147483646));
            listen_handle=llListen(CHANNEL,"",agent,"");
            llDialog(agent,"Menu for old viewer",["<","Cancel",">"], CHANNEL);
        }
    }

    listen(integer channel, string name, key id, string msg)
    {
        llListenRemove(listen_handle);
        if (channel == CHANNEL) {
            if (msg == "<" || msg == ">") {  // 押されたボタンが < か > だったら
                set_texture(msg);  // テクスチャ表示
            }
        }
    }
}



この記事へのトラックバックURL

http://beta.slmame.com/t440561
認証文字を入力してください