ページ

2009/07/08

タッチでポーズ切り替え

// タッチでポーズの変わる椅子
string anim;
integer total;
integer count;

default
{
state_entry()
{
vector pos=<0,0.2,0.55>; // 座る位置
vector ang=<0,0,90>; // 座る角度
llSitTarget(pos,llEuler2Rot(ang*DEG_TO_RAD)); // 座る位置と角度を設定
total=llGetInventoryNumber(INVENTORY_ANIMATION); // コンテンツ内のアニメーション数
}

touch_start(integer total_number)
{
key id=llDetectedKey(0); // タッチしたアバターのキー取得
if (id == llAvatarOnSitTarget()) { // 座ってるアバターだったら
if (total > 1) { // アニメーションが複数あったら
count++; // カウンタ加算
if (count >= total) count=0; // カウンタがトータルの数を超えたら0
llStopAnimation(anim); // 実行中のアニメーション停止
anim=llGetInventoryName(INVENTORY_ANIMATION,count); // 次のアニメーション名
llStartAnimation(anim); // 次のアニメーション実行
}
}
}

changed(integer change)
{
if (change & CHANGED_LINK)
{ // リンクが変わったとき
key id=llAvatarOnSitTarget(); // 座ったアバターのキー取得
if (id) llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION); // アバターが座ってたらアニメーションの権限を要求
else if (llGetPermissionsKey()) llStopAnimation(anim); // そうじゃないときはアニメーション停止
}
else if (change & CHANGED_INVENTORY) total=llGetInventoryNumber(INVENTORY_ANIMATION); // コンテンツ内が変わったときアニメーション数取得
}

run_time_permissions(integer perm)
{
if (perm & PERMISSION_TRIGGER_ANIMATION)
{ // アニメーションの権限を得たら
count=0; // カウンタ初期化
anim=llGetInventoryName(INVENTORY_ANIMATION,count); // countからアニメーション名取得
llStopAnimation("sit"); // 通常のsitアニメーションを停止
llStartAnimation(anim); // アニメーション実行
}
}
}

スクリプト参照