Site search

Google
WWW を検索 backup-beta.blogspot.com を検索

2008年7月11日金曜日

面の番号を調べるスクリプト

オブジェクトの面の番号って調べるのが面倒ですよね。形を中空にすると途中から番号が変わったりするしw
http://wiki.secondlife.com/wiki/Category:LSL_Face/ja

今回は面ごとに色分けしてフェイス番号を知るためのスクリプトです^^


色のリストはベクター値と名前を別々に定義しました。
色の順番はテキトーに10種類くらいあるものを検索して出たのと同じに決めましたが、見にくかったら変更してくださいね。。。抵抗器という電気用の部品のカラーコードらしいです^^
// 面ごとに色分け
integer face;
list color_list=[<0,0,0>,<0.5,0,0>,<1,0,0>,<1,0.5,0>,<1,1,0>,
    <0,1,0>,<0,0,1>,<0.5,0,1>,<0.5,0.5,0.5>,<1,1,1>];
list color_name=["Black","Brown","Red","Orange","Yellow",
    "Green","Blue","Violet","Gray","White"];

color_face()
{  // 面に色を塗る
    integer i;
    face=llGetNumberOfSides();  // 面の数を調べる
    vector color;
    for (i=0; i < face; i++) {  // 面の数ぶん処理
        color=llList2Vector(color_list,i);  // リストから順に色の値を取り出して
        llSetColor(color,i);  // 面に順番に塗る
    }
    llSay(0,(string)face+" faces");  // 面の数を喋る
}

default
{
    state_entry()
    {
        color_face();  // 面に色を塗るへ
    }

    changed(integer change)
    {
        if (change & CHANGED_SHAPE) {  // 形が変わったら
            color_face();  // 面に色を塗るへ
        }
    }

    touch_start(integer total_number)
    {  // タッチで面番号と色の対応を表示
        llSay(0,"Face No. - Color");
        string name;
        integer i;
        for (i=0; i < face; i++) {
            name=llList2String(color_name,i);  // 色の名前をリストから取り出す
            llSay(0,(string)i+" - "+name);
        }
    }
}

2009年4月1日追記: ビューワー1.21からllDetectedTouchFaceという関数が実装されましたので、現在は簡単に調べることができるようになっています^^
// タッチした面の番号を表示
default
{
    touch_start(integer total_number)
    {
        llOwnerSay((string)llDetectedTouchFace(0));
    }
}

0 件のコメント:

コメントを投稿