LSL:ちゃぶ台をひっくり返してみました^^

jinko

2007年12月01日 14:14



↑この記事のために適当に作ったちゃぶ台・・・


日本風の場所にマッチするアイテムをいろいろ探し歩いていると、
「昭和シトロン」というブランドでレトロ家具を製作されておられるnanaoさんのページを発見しました。


お店は、長野ですねー初めて行きました^^→japan nagano/82/25/21


階段ダンスや昔のTVなんかがあっていい雰囲気の家具が、
なんと!たったの10L$だったりしますw

詳細はこちら→商品案内1とか商品案内2とか
いいのーそんな安くてー

そして、このシリーズの中にワタシの心をぎゅっとつかんで離さないフレーズが!!


ちゃぶ台
*残念ながらひっくり返せません・・・


ひっくり返せません・・・って、ひっくりかえらなアカンのねーやっぱw

スクリプトで、ひっくり返せそうな気がするんですが、
たぶん、まだよくわかっていない物理オブジェクトの世界なんですよねー

llApplyImpulse と llApplyRotationalImpulse

一時的に力を加えるってとこまでわかってて、、
実はあのゆきだるま着ぐるみもなにかにぶつかったとき、最初これで大きく吹き飛んでもらおうと思ってました。
なんかややこしそうやったのと、そのとき衝突判定でせいいっぱいだったので、
結局そのままにしてた関数です。

これを使うと、ちゃぶ台をばーーーんって、
上にあげてひっくり返せそうです。

でも、なんかうまく使えないので、サンプルを探し回ると、
なんとこれに近い遊びをしているページを発見しました。
ここ→http://lslblog.free.fr/index.php/tag/llApplyRotationalImpulse

サイコロをふって遊んでます。
フランス語です。
フランス語なんて読めませんが、そんなの関係・・・あわわ・・・
LSLだけわかればいいんです。

さっそくサンプルスクリプトを参考にちゃぶ台用スクリプトを作ってみました。


//====================================================================
//[chabu.lsl]
//    ちゃぶ台をひっくり返す
//    v1.0 Dec 01, 2007 by Jinko Spitteler
//    Ref:http://lslblog.free.fr/index.php/tag/llApplyRotationalImpulse
//====================================================================

//グローバル変数
integer        isOn = FALSE;
vector        gvOriginalPos;
rotation    grOriginalRot;

//コンフィグレーション
float        gMaxRotForce = .2;
float        gMaxLateralForce = 1;
float        gMaxUpForce = 10;
float        gMinUpForce = 8;


//ユーザ関数
hop( integer on ) {
    isOn = on;
    if ( on ) {
        //現在の位置を保存
        gvOriginalPos = llGetPos();
        grOriginalRot = llGetRot();

        //物理属性
     llSetStatus(STATUS_PHYSICS, TRUE);

        // ちゃぶ台を上昇させる力をランダムに計算
        float Px = llFrand(gMaxLateralForce);
        float Py = llFrand(gMaxLateralForce);
        float Pz = (llFrand(gMinUpForce) + gMaxUpForce - gMinUpForce) * llGetMass();

        // ちゃぶ台を回転させるベクトルをランダムに計算
        float Rx = llFrand(gMaxRotForce);
        float Ry = llFrand(gMaxRotForce);
        float Rz = llFrand(gMaxRotForce);


        llApplyImpulse(, FALSE);
        llApplyRotationalImpulse( * llGetMass(), TRUE);
    }
    else {
        llOwnerSay("Reset");
        llSetStatus(STATUS_PHYSICS, FALSE);

        //元の位置に戻す
        llSetPos(gvOriginalPos);
        llSetRot(grOriginalRot);
    }
}

//-------------------------------------------------------------------
//    メインステータス
//-------------------------------------------------------------------
default {
    on_rez(integer param){
        llResetScript();
    }
    
    state_entry() {
        llOwnerSay("Ready!!");
    }

    touch_start(integer total_number) {
        //オーナ専用にする場合は次の行のコメントアウトをはずして下さい。
        //if ( llDetectedKey(0) == llGetOwner() )
            hop(!isOn);
    }
}





サイコロのサンプルは、チャットからJUMP!っていうとサイコロを振るようになってますが、
ちゃぶ台は、タッチで飛び上がるようにしました。
あと、かたづけるのがメンドクサイので、もう一度タッチするとジャンプ前の場所に
もどってくるようにしました。

ひっくり返ったり、ひっくり返らなかったり・・・
おもしろいです。



下駄とか郵便ポストとか・・・いろんなものをひっくり返してくださいねー
でも!!
やりすぎはダメよー
絶対に悪用しないでください。
Tips