ソラマメブログ

2008年07月14日

テクスチャブラウザを作ってみた(その2)

テクスチャブラウザですが 実は スクリプトよりもボタンを並べたりスクリプトを入れるのが面倒で
-----
最初 ず~っと 手作業でやってたんだが 流石に これはだめだろう
-----
というわけで そういえば 前にスクリプトで並べてたジャン というわけで それを取り出してスクリプトで並べ直した w
-----
というわけで 一度あげてたかもしれないけど レイアウト用のスクリプトも上げておきます
-----
使い方は 本体の実際のスクリプトの実行を停止し レイアウト用のスクリプトを実行するようにして使います
-----
そうそう 実行中の状態をいろいろ llOwnerSay するように改造しました
-----
リンクにすごく時間がかかるので ちゃんと実行しているかどうか 気になって またクリックしてしまったりしたので...
-----
ブラウザのスクリプトより 実際 こっちの方に時間がかかっていたりして w
-----
プロッタ流用してるから 変な作りだけど とりあえず動きます w
-----
というわけでリストもあげときます
//
// File: layouter2.lsl
// Date Author number of nodes
// 2008/7/14 walkinglint 90
// 2008/7/14 walkinglint 88 (layouter->layouter2)
// 2008/7/14 walkinglint 83
// 2008/7/4 walkinglint 70
// 2008/7/4 walkinglint 61 (plotter->layouter)
// 2008/6/30 walkinglint 61
//
integer num_of_buttons = 8;
float size;
list x;
list y;
integer i;
integer j;
integer linked;
integer total_num_of_buttons;
set_buttons() {
x = [];
y = [];
for (j = 0; j < num_of_buttons; j++) {
for (i = 0; i < num_of_buttons; i++) {
x += (float)i;
y += (float)j;
}
}
}
layout(list data_x, list data_y) {
float unit = size / (num_of_buttons + 1);
float range = size - unit * 2;
vector pos_org = <-(size / 2.0) + unit, -(size / 2.0) + unit, 0>;
float min_x = llListStatistics(LIST_STAT_MIN, data_x);
float max_x = llListStatistics(LIST_STAT_MAX, data_x);
float min_y = llListStatistics(LIST_STAT_MIN, data_y);
float max_y = llListStatistics(LIST_STAT_MAX, data_y);
float scale_x;
integer flat_x = (max_x == min_x);
if (!flat_x) {
scale_x = range / (max_x - min_x);
}
float scale_y;
integer flat_y = (max_y == min_y);
if (!flat_y) {
scale_y = range / (max_y - min_y);
}
vector pos = ZERO_VECTOR;
for (i = 0; i < total_num_of_buttons; i++) {
float x = llList2Float(data_x, i);
float y = llList2Float(data_y, i);
if (!flat_x) {
pos.y = pos_org.x + (x - min_x) * scale_x;
}
if (!flat_y) {
pos.z = pos_org.y + (y - min_y) * scale_y;
}
llRezObject("button", llGetPos() + pos, ZERO_VECTOR, llGetRot(), 0);
}
}
default {
state_entry() {
vector s = llGetScale();
size = s.y;
total_num_of_buttons = num_of_buttons * num_of_buttons;
linked = 0;
llRequestPermissions(llGetOwner(), PERMISSION_CHANGE_LINKS);
}
on_rez(integer param) {
llResetScript();
}
touch_start(integer total_number) {
llOwnerSay("generating buttons");
set_buttons();
layout(x, y);
}
object_rez(key id) {
llCreateLink(id, TRUE);
linked++;
llOwnerSay("linked " + (string)linked + "/" + (string)total_num_of_buttons);
if (linked == total_num_of_buttons) {
llOwnerSay("linked all buttons");
}
}
run_time_permissions(integer perm) {
if (perm & PERMISSION_CHANGE_LINKS) {
llOwnerSay("could get permission to link");
} else {
llOwnerSay("could not get permission to link");
}
}
}

同じカテゴリー(walking のスクリプティング講座)の記事
 プロフィール写真の表示に問題 (2009-11-30 20:55)
 ミニ太陽系 (2009-03-21 06:03)
 関数から文字列を返したら何か問題になる? (2009-03-18 18:02)
 llListFindList って型って関係ないんだったっけ (2009-03-18 14:02)
 夏時間(PDT)の実験 (2009-03-08 22:04)
 15パズルの作り方(その3) (2009-03-08 06:03)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。