放置かも~ SHOP CHIHIRO
っていうか、
そのバグや改良点については後で移転先に記事書きますね。。。まだBloggerの使い勝手がよくわかってないんですけどw
ソラマメの運営者様、当ブログをご覧くださいました皆様、大変お世話になり有難うございました。今後は移転先で情報を発信することになります。宜しくお願いします。
// 1プリムの定位置に2人座れる
list pos=[<0.4,-0.5,0.4>, <0.4,0.5,0.4>]; // 座る位置のリスト(1人目、2人目)
list av; // 座ってるアバターのキーリスト用
vector ang=<0,0,0>; // 座った角度
default
{
state_entry()
{
llSitTarget(<0,0,0.5>, llEuler2Rot(ang*DEG_TO_RAD)); // 座る位置の初期値
integer i;
for (i=0; i < llGetListLength(pos); i++)
{ // キーリストに座席分のNULL_KEYを設定
av+=[NULL_KEY];
}
}
changed(integer change)
{
if (change & CHANGED_LINK)
{ // リンクが変化したら
integer i=llGetNumberOfPrims(); // リンクしてるプリムの数
key id=llGetLinkKey(i); // 座った(リンクした)アバターのキー取得
if (id) {
integer j=llListFindList(av,[NULL_KEY]); // 空席チェック
if (~j) { // 空いてたら
av=llListReplaceList(av,[id],j,j); // アバターのキーをセット
vector v=llList2Vector(pos,j); // 空いてた席の座る位置
v.z+=0.35; // Z方向に0.35加算
// 座った位置を移動
llSetLinkPrimitiveParams(i,[PRIM_POSITION,v, PRIM_ROTATION,ZERO_ROTATION/llGetRot()*llEuler2Rot(ang*DEG_TO_RAD)]);
}
else { // 空席がないとき
if (llListFindList(av,[id]) < 0) llUnSit(id); // キーリストになかったら立たせる
}
}
list l;
for (i; i > 1; i--) { // 子プリムのキーをリストアップ
l+=[llGetLinkKey(i)];
}
for (i=0; i < llGetListLength(av); i++) {
// 座ってるアバターのキーリストと比較して、一致しないキーをリストから削除
id=llList2Key(av,i);
if (llListFindList(l,[id]) < 0) av=llListReplaceList(av,[NULL_KEY],i,i);
}
}
}
}
// 視界切り替え
integer cam=1; // 最初は1(低め)
cam1()
{ // 低めの位置になるカメラ設定
llSetCameraParams([
CAMERA_ACTIVE, TRUE,
CAMERA_BEHINDNESS_ANGLE, 5.0,
CAMERA_DISTANCE, 3.0,
CAMERA_FOCUS_OFFSET,<2,0,0>]);
llOwnerSay("Under");
}
cam2()
{ // 真上から見えるカメラ設定
llSetCameraParams([
CAMERA_ACTIVE, TRUE,
CAMERA_BEHINDNESS_ANGLE, 0.0,
CAMERA_PITCH, 80.0,
CAMERA_FOCUS_THRESHOLD, 0.0,
CAMERA_DISTANCE, 20.0,
CAMERA_FOCUS_OFFSET,<0,0,0>]);
llOwnerSay("Over head");
}
set_cam()
{
llClearCameraParams(); // カメラ設定を初期化
// camの値によって処理を分ける
if (cam == 0) llOwnerSay("Normal"); // 普通
else if (cam == 1) cam1(); // 低め
else if (cam == 2) cam2(); // 真上
}
default
{
state_entry()
{
// 装着されてたらカメラコントロールの権限を要求
if (llGetAttached()) llRequestPermissions(llGetOwner(), PERMISSION_CONTROL_CAMERA);
}
attach(key id)
{
// 装着したらカメラコントロールの権限を要求
if (id) llRequestPermissions(id, PERMISSION_CONTROL_CAMERA);
}
touch_start(integer total_number)
{
if (llGetPermissionsKey() == llDetectedKey(0)) {
// タッチしたアバターのパーミッションが有効になってたら
cam++; // camの値を1増やす
if (cam > 2) cam=0; // camの値が2を超えたら0にする
set_cam(); // set_camへ
}
}
run_time_permissions(integer perm)
{
if (perm & PERMISSION_CONTROL_CAMERA)
{ // カメラコントロールが許可されたらset_camへ
set_cam();
}
}
}