2007年5月10日木曜日

【LSL】テクスチャー利用の1プリムカーテン

今度はテクスチャーで1プリムのカーテンを作りました。
前回のスライドする窓やカーテンと異なり、今回は小窓につけるだけなので、プリム節約もかねテクスチャーの変更でカーテンが開いたり、閉まったりしているように見せています。


基本的な考え方は前回紹介したスクリプトと同じですが、今度は「大きさ」「座標」を変更するのではなく、テクスチャーを変更するようにしてあります。

あらかじめ「開いている状態」「閉じている状態」2つのテクスチャーを用意し、Contentsの中に入れておきます。

さてスクリプトは前回に加え
【Makapu】ベンダーを作ろう(初級スクリプト第十回)
のテクスチャーの配列の部分と
【Makapu】看板を作ろう(初級スクリプト第九回)
のプリムの面の数値を参考にさせていただきました。
list commodity = [
"aoba_curtain_close",
"aoba_curtain_open"
];

default
{
state_entry()
{
llSetTexture(llList2String(commodity, 0), 1);
llSetTexture(llList2String(commodity, 0), 3);

state close;
}
}

state open {
state_entry()
{
llSetTexture(llList2String(commodity, 1), 1);
llSetTexture(llList2String(commodity, 1), 3);

}

touch_start(integer total_number)
{
state close;
}
}

state close {
state_entry()
{
llSetTexture(llList2String(commodity, 0), 1);
llSetTexture(llList2String(commodity, 0), 3);

}

touch_start(integer total_number)
{
state open;
}
}


list commodityに続く "aoba_curtain_close", "aoba_curtain_open" の部分はContentsに入れたテクスチャーの名前を入れています。
llSetTextureではテクスチャーを変更する面を指定しています。
私の場合は部屋の中側の面と窓の外から見える面の2カ所のテクスチャーを変更したかったので、2行続けて記述しています。
すべての面を変更する場合は
閉じている時
llSetTexture(llList2String(commodity, 0), ALL_SIDES);
空いている時
llSetTexture(llList2String(commodity, 1), ALL_SIDES);

でオッケーです。

ま、今回も動けばいいやぁ〜って感じですが^^;