jinko
2007年12月01日 14:14
//====================================================================
//[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);
}
}