2010年5月25日火曜日

成長する木のスクリプト

IM通知のメールが来てるのにログインしたら表示されなくて、次回のログインで表示されたり、お客様からミュートされてるように見えるって言われたり、ログインしたらL$残高が表示されてなくてお買い物もできなかったり。。。何か最近不安定だなって思う今日この頃です。

今回は持ち物から出したら一定時間毎に成長していく(プリムが大きくなる)スクリプトを考えてみました。成長のたびにテクスチャも指定できるようにしたので植木やお花みたいなオブジェクトに良いんじゃないかなって思います。但しリンクしてるプリムは全部同じサイズで成長するようにしたので、鉢がくっついてるようなものには使えません^^;

サイズ変更、位置移動はllSetPrimitiveParamsllSetLinkPrimitiveParamsでも良かったんですけど、嬉しそうにllSetLinkPrimitiveParamsFast使いましたw

各プリムのY方法のサイズを0.01にして、2~4枚組み合わせて作ってください。側面はスクリプトで透明にしています。
それから、最初のサイズの厚みを直さないといけないですけど、一応1プリムのスカルプにも対応してます。
// 成長する樹木
vector size=<0.5,0.01,0.5>;  // 最初のサイズ
integer interval=86400;  // 間隔(秒)
list grow_list=[  // 倍率,"テクスチャUUID"
1,"テクスチャのUUID1",
2,"テクスチャのUUID2",
4,"テクスチャのUUID3",
7,"テクスチャのUUID4",
10,"テクスチャのUUID5",
NULL_KEY];
integer len;
integer count;  // カウンタ用

grow()
{
    vector p=llGetPos();  // 位置取得
    vector s1=llGetScale();  // 現在のサイズ取得
    vector s2;  // 次のサイズ計算用
    float f=llList2Float(grow_list,count*2);  // 倍率
    key id=llList2Key(grow_list,count*2+1);  // テクスチャのキー
    if (llGetNumberOfSides() > 1) s2=<size.x*f,size.y,size.z*f>;  // スカルプでないときのサイズ計算
    else s2=size*f;  // スカルプのとき
    llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_SIZE,s2, PRIM_POSITION,<p.x,p.y,p.z+(s2.z-s1.z)/2>]);  // 親プリムのサイズと位置変更
    llSetLinkPrimitiveParamsFast(LINK_ALL_CHILDREN,[PRIM_SIZE,s2]);  // 子プリムのサイズ変更
    if (id) llSetLinkTexture(LINK_SET,id,ALL_SIDES);  // テクスチャ変更
}

default
{
    state_entry()
    {
        len=llGetListLength(grow_list)-1;  // ヌルキーを除いたリストの長さ
        if (llGetNumberOfSides() > 1) {  // 親プリムに面が2つ以上あったら(スカルプじゃない)
            llSetLinkAlpha(LINK_SET,0,ALL_SIDES);  // 一度プリム全面を透明にして
            llSetLinkPrimitiveParams(LINK_SET,[PRIM_COLOR,1,<1,1,1>,1.0,PRIM_COLOR,3,<1,1,1>,1.0]);  // 面番号1と3だけ不透明にする
        }
        grow();  // growへ
    }

    on_rez(integer start_param)
    {
        grow();  // growへ
        llSetTimerEvent(interval);  // タイマースタート
    }

    timer()
    {
        count++;  // カウンタ加算
        grow();  // growへ
        if (len <= (count+1)*2) {  // 成長が終わったら
            llSetTimerEvent(0);  // タイマーストップ
            llOwnerSay("The end of growing.");
        }
    }
}

サンプルは1日(86400秒)で1段階成長します。成長しきった状態は5m(0.5*10=5)です。倍率や最初のサイズを大きな値にしてもプリムの大きさの制限で10mが最大になります。

テクスチャのUUIDは、持ち物内のテクスチャを右クリックして「資産UUIDをコピー」でコピーできますので、それを貼り付けしてくださいね。

0 件のコメント:

コメントを投稿