2007年12月06日
日本時間と日付
細かいことはあまり気にしないたちなのだが...
-----
あまりにも明白な間違いであると 流石に少し気になってきて...
-----
留守番に客が来たときの日時を答えさせる機能を追加したのだが ずれてるのだ...
-----
作ったのが夏時間の頃でデイタイムセービングタイムとかの関係だと思うのだ...
-----
考えてみれば 考えて見なくても グリニッジ標準時を基にすればいいことなので これは修正
-----
で~ 日付はもともとグリニッジ標準時をベースにしてるらしいのだが それだとまたずれているわけで~
-----
その修正もしなくてはいけない... というわけで wiki のスクリプトは本当に正しいのか? とは思うが 参考にさせてもらい こんなもんでいいのか?
-----

-----
とりあえず 今のものは間違えているので... あはは とりあえず 入れ替えるだけ入れ替えておこうかとも思うのだが... うーん 悩む
-----
あまりにも明白な間違いであると 流石に少し気になってきて...
-----
留守番に客が来たときの日時を答えさせる機能を追加したのだが ずれてるのだ...
-----
作ったのが夏時間の頃でデイタイムセービングタイムとかの関係だと思うのだ...
-----
考えてみれば 考えて見なくても グリニッジ標準時を基にすればいいことなので これは修正
-----
で~ 日付はもともとグリニッジ標準時をベースにしてるらしいのだが それだとまたずれているわけで~
-----
その修正もしなくてはいけない... というわけで wiki のスクリプトは本当に正しいのか? とは思うが 参考にさせてもらい こんなもんでいいのか?
-----

-----
とりあえず 今のものは間違えているので... あはは とりあえず 入れ替えるだけ入れ替えておこうかとも思うのだが... うーん 悩む
2008年02月09日
walking のスクリプティング講座 - 噴水
タイトルのようなことをしようと思うじょ
教材は Programmable Fountain のスクリプト New Script と New Script 1 だよ
New Script はこれ
New Script 1 はこれ
頭から 少しずつ解説するね w
(続く)
教材は Programmable Fountain のスクリプト New Script と New Script 1 だよ
New Script はこれ
// to add sequence, edit #1 #2 #3
string start_str = "start";
string stop_str = "stop";
string start_color_str = "start_color";
string end_color_str = "end_color";
integer min_link_num = 1;
integer max_link_num = 6; // customize here to add nozzle
list sequence;
integer num_of_record = 5; // duration / src nozzle link num / operation(start/stop) / hight / target nozzle link num
list sequence0 = [0.0, 1, start_str, 4, 0, 0.0, LINK_ALL_OTHERS, start_str, 1, 0];
list sequence1 = [1.0, 2, start_str, 2, 1, 1.0, 2, stop_str, 2, 1, 1.0, 3, start_str, 2, 1, 1.0, 3, stop_str, 2, 1, 1.0, 4,
start_str, 2, 1, 1.0, 4, stop_str, 2, 1, 1.0, 5, start_str, 2, 1, 1.0, 5, stop_str, 2, 1, 1.0, 6, start_str, 2, 1, 1.0, 6, stop_str, 2, 1];
list sequence2 = [0.0, 1, start_str, 4, 1, 0.0, LINK_ALL_OTHERS, start_str, 1, 1];
list sequence3 = [0.0, 1, start_str, 4, 1, 0.0, 2, start_str, 1, 3, 0.0, 3, start_str, 1, 4, 0.0, 4, start_str, 1, 5, 0.0, 5,
start_str, 1, 6, 10.0, 6, start_str, 1, 2];
list sequence4 = [0.0, 1, start_str, 4, 1, 0.0, 2, start_str, 1, 4, 0.0, 3, start_str, 1, 5, 0.0, 4, start_str, 1, 6, 0.0, 5,
start_str, 1, 2, 0.0, 6, start_str, 1, 3];
list sequence5 = [0.0, 1, start_str, 4, 1, 0.0, 2, start_str, 1, 4, 0.0, 3, start_str, 1, 5, 0.0, 4, start_str, 1, 6, 0.0, 5,
start_str, 1, 2, 3.0, 6, start_str, 1, 3, 0.0, 1, stop_str, 4, 1, 0.0, 2, stop_str, 1, 4, 0.0, 3,
stop_str, 1, 5, 0.0, 4, stop_str, 1, 6, 0.0, 5, stop_str, 1, 2, 5.0, 6, stop_str, 1, 3];
list sequence6_1 = [1.0, LINK_SET, start_str, 2, 2];
list sequence6_2 = [4.5, LINK_SET, stop_str, 2, 2];
list sequence6_3 = [1.0, LINK_SET, start_str, 2, 3];
list sequence6_4 = [4.5, LINK_SET, stop_str, 2, 3];
list sequence6_5 = [1.0, LINK_SET, start_str, 2, 4];
list sequence6_6 = [4.5, LINK_SET, stop_str, 2, 4];
list sequence6_7 = [1.0, LINK_SET, start_str, 2, 5];
list sequence6_8 = [4.5, LINK_SET, stop_str, 2, 5];
list sequence6_9 = [1.0, LINK_SET, start_str, 2, 6];
list sequence6_10 = [4.5, LINK_SET, stop_str, 2, 6];
list sequence7_1 = [0.0, LINK_SET, start_color_str, 50510, 0];
list sequence7_2 = [0.0, 2, start_str, 2, 0, 0.0, 3, start_str, 2, 0, 0.0, 4, start_str, 2, 0, 0.0, 5, start_str, 2, 0, 10.0, 6, start_str, 2, 0];
list sequence7_3 = [0.0, LINK_SET, start_color_str, 51005, 0];
list sequence7_4 = [0.0, 2, start_str, 2, 0, 0.0, 3, start_str, 2, 0, 0.0, 4, start_str, 2, 0, 0.0, 5, start_str, 2, 0, 10.0, 6, start_str, 2, 0];
list sequence7_5 = [0.0, LINK_SET, start_color_str, 101010, 0];
list sequence7_6 = [0.0, 2, start_str, 2, 0, 0.0, 3, start_str, 2, 0, 0.0, 4, start_str, 2, 0, 0.0, 5, start_str, 2, 0, 10.0, 6, start_str, 2, 0];
list sequence8_1 = [0.0, LINK_SET, start_color_str, 50510, 0];
list sequence8_2 = [0.8, 2, start_str, 2, 0, 0.8, 3, start_str, 2, 0, 0.8, 4, start_str, 2, 0, 0.8, 5, start_str, 2, 0, 0.8, 6, start_str, 2, 0];
list sequence8_2_2 = [10.0, 1, start_str, 6, 0];
list sequence8_3 = [0.8, 2, stop_str, 2, 0, 0.8, 3, stop_str, 2, 0, 0.8, 4, stop_str, 2, 0, 0.8, 5, stop_str, 2, 0, 0.8, 6, stop_str, 2, 0];
list sequence8_3_2 = [5.0, 1, stop_str, 6, 0];
list sequence8_4 = [0.0, LINK_SET, start_color_str, 51005, 0];
list sequence8_5 = [0.8, 2, start_str, 2, 0, 0.8, 3, start_str, 2, 0, 0.8, 4, start_str, 2, 0, 0.8, 5, start_str, 2, 0, 0.8, 6, start_str, 2, 0];
list sequence8_5_2 = [10.0, 1, start_str, 6, 0];
list sequence8_6 = [0.8, 2, stop_str, 2, 0, 0.8, 3, stop_str, 2, 0, 0.8, 4, stop_str, 2, 0, 0.8, 5, stop_str, 2, 0, 0.8, 6, stop_str, 2, 0];
list sequence8_6_2 = [5.0, 1, stop_str, 6, 0];
// add sequence here #1
list pattern_list = ["0", "1", "2", "3", "4", "5", "6", "7", "8"]; // add sequence number here #2
vector default_start_color = <0.50,0.50,1.00>;
vector default_end_color = <1.00,1.00,1.00>;
integer num_of_sequence;
list cur_seq;
integer cur_seq_num;
float cur_duration;
integer cur_src_link;
string cur_operation;
integer cur_hight;
integer cur_target_link;
integer touched;
get_record()
{
cur_src_link = llList2Integer(cur_seq, 1);
cur_operation = llList2String (cur_seq, 2);
cur_hight = llList2Integer(cur_seq, 3);
cur_target_link = llList2Integer(cur_seq, 4);
}
float update_cur_seq_and_get_duration()
{
cur_seq = llList2List(sequence, cur_seq_num * num_of_record, (cur_seq_num + 1) * num_of_record - 1);
if (++cur_seq_num > num_of_sequence) {
cur_seq_num = 0;
}
// llOwnerSay((string)cur_seq_num);
return llList2Float(cur_seq, 0);
}
stop_fountain()
{
integer i;
for (i = min_link_num; i <= max_link_num; i++) {
llMessageLinked(i, 0, stop_str, NULL_KEY);
}
}
integer vector2int(vector v)
{
return (integer)(v.x * 100000) + (integer)(v.y * 1000) + (integer)(v.z * 10);
}
set_default_colors()
{
llMessageLinked(LINK_SET, vector2int(default_start_color), start_color_str, NULL_KEY);
llMessageLinked(LINK_SET, vector2int(default_end_color), end_color_str, NULL_KEY);
}
default
{
state_entry()
{
sequence = sequence1;
num_of_sequence = llGetListLength(sequence) / num_of_record;
cur_seq_num = 0;
stop_fountain();
llSetTimerEvent(1.0);
llListen(123, "", "", "");
touched = FALSE;
}
touch(integer total_number)
{
touched = TRUE;
llDialog(llDetectedKey(0), "Select pattern", pattern_list, 123);
}
listen(integer channel, string name, key id, string message) {
// llOwnerSay("here we are " + message);
if (touched == FALSE) {
return;
}
touched = FALSE;
llListen(123, "", "", "");
if (message == "0") {
set_default_colors();
sequence = sequence0;
} else if (message == "1") {
set_default_colors();
sequence = sequence1;
} else if (message == "2") {
set_default_colors();
sequence = sequence2;
} else if (message == "3") {
set_default_colors();
sequence = sequence3;
} else if (message == "4") {
set_default_colors();
sequence = sequence4;
} else if (message == "5") {
set_default_colors();
sequence = sequence5;
} else if (message == "6") {
set_default_colors();
sequence = sequence6_1 + sequence6_2 + sequence6_3 + sequence6_4 + sequence6_5 + sequence6_6
+ sequence6_7 + sequence6_8 + sequence6_9 + sequence6_10; // num of initializers is limited in LSL
} else if (message == "7") {
set_default_colors();
sequence = sequence7_1 + sequence7_2 + sequence7_3 + sequence7_4 + sequence7_5 + sequence7_6; // why error ?
} else if (message == "8") {
set_default_colors();
sequence = sequence8_1 + sequence8_2 + sequence8_2_2 + sequence8_3 + sequence8_3_2
+ sequence8_4 + sequence8_5 + sequence8_5_2 + sequence8_6 + sequence8_6_2;
} else { // add process for added sequence #3
// do not comes here
}
// if (sequence != prev_sequence) {
num_of_sequence = llGetListLength(sequence) / num_of_record;
cur_seq_num = 0;
stop_fountain();
llSetTimerEvent(1.0);
// llOwnerSay(message + " is selected");
// prev_sequence = sequence;
// }
}
timer()
{
integer max_count = 0;
while ((cur_duration = update_cur_seq_and_get_duration()) == 0.0) {
get_record();
llMessageLinked(cur_src_link, cur_hight, cur_operation, llGetLinkKey(cur_target_link));
// llOwnerSay(cur_operation + " " + (string)cur_src_link);
if (++max_count > num_of_sequence) {
llSetTimerEvent(0.0);
return;
}
}
get_record();
if (cur_target_link == 0) {
llMessageLinked(cur_src_link, cur_hight, cur_operation, NULL_KEY);
} else {
llMessageLinked(cur_src_link, cur_hight, cur_operation, llGetLinkKey(cur_target_link));
}
// llOwnerSay(cur_operation + " " + (string)cur_src_link);
llSetTimerEvent(cur_duration);
}
}
New Script 1 はこれ
//*****************************************************************************
//
// The simplest possible particle script.
//
// Use: Will start a particle system either when rezzed or the script is reset.
//
//*****************************************************************************
string start_str = "start";
string stop_str = "stop";
string start_color_str = "start_color";
string end_color_str = "end_color";
vector default_start_color = <0.50,0.50,1.00>;
vector default_end_color = <1.00,1.00,1.00>;
vector start_color = default_start_color;
vector end_color = default_end_color;
ParticleStart(float hight, key target)
{
llParticleSystem([
PSYS_PART_FLAGS, 259 | PSYS_PART_TARGET_POS_MASK,
PSYS_SRC_PATTERN, 2,
PSYS_PART_START_ALPHA, 1.00,
PSYS_PART_END_ALPHA, 0.10,
PSYS_PART_START_COLOR, start_color,
PSYS_PART_END_COLOR, end_color,
PSYS_PART_START_SCALE, <0.2,0.2,0.00>,
PSYS_PART_END_SCALE, <0.7,0.7,0.00>,
PSYS_PART_MAX_AGE, 6.0,
PSYS_SRC_TARGET_KEY, target,
PSYS_SRC_MAX_AGE, 0.00,
PSYS_SRC_ACCEL, <0.00, 0.00, hight>,
PSYS_SRC_ANGLE_BEGIN, 0.00,
PSYS_SRC_ANGLE_END, 0.70,
PSYS_SRC_BURST_PART_COUNT, 10,
PSYS_SRC_BURST_RADIUS, 0.01,
PSYS_SRC_BURST_RATE, 0.05,
PSYS_SRC_BURST_SPEED_MIN, 0.00,
PSYS_SRC_BURST_SPEED_MAX, 0.40,
PSYS_SRC_OMEGA, <0.00,0.00,0.00>,
PSYS_SRC_TEXTURE, "bbf5a4bf-4971-4db7-905a-0235b2757dec"
]);
}
ParticleEnd()
{
llParticleSystem([
]);
}
//*****************************************************************************
//
// Default state: LSL will always start in this state.
//
//*****************************************************************************
vector int2vector(integer i) {
vector v;
v.x = (float)(i / 10000) / 10.0;
integer tmp = i % 10000;
v.y = (float)(tmp / 100) / 10.0;
v.z = (float)(tmp % 100) / 10.0;
return v;
}
default
{
link_message(integer sender_num, integer num, string str, key id){
if (str == start_str) {
// llOwnerSay((string)llGetLinkNumber() + " is started");
ParticleStart((float)num, id);
} else if (str == stop_str) {
// llOwnerSay((string)llGetLinkNumber() + " is stopped");
ParticleEnd();
} else if (str == start_color_str) {
start_color = int2vector(num);
// llOwnerSay((string)num);
} else if (str == end_color_str) {
end_color = int2vector(num);
}
}
}
頭から 少しずつ解説するね w
(続く)
タグ :スクリプト
2008年02月09日
walking のスクリプティング講座(その2)
というわけで 始まった スクリプティング講座なんだけれど まずは
New Script から見ていくじょ
この辺はね コマンド用の文字列を定義している
このスクリプトは 噴水の水を出せとか止めろとかいう コマンドを使ってるわけなんだ それを定義している
string というのは 文字列を定義する時に使うものなんだね...
string start_str = "start"; というのは start_str は start という文字列だってことを言ってるんだ
そうそう 最初にある
// to add sequence, edit #1 #2 #3
っていうのは コメント
シーケンスを追加するのは #1 #2 #3 の部分を変更してねっていう意味
つまり Programmable Fountain をお買いいただき このスクリプティング講座を終了すると 自分で噴水のシーケンスを 編集/追加 することができるようになるっていうことだね w
(続く)
New Script から見ていくじょ
// to add sequence, edit #1 #2 #3
string start_str = "start";
string stop_str = "stop";
string start_color_str = "start_color";
string end_color_str = "end_color";
この辺はね コマンド用の文字列を定義している
このスクリプトは 噴水の水を出せとか止めろとかいう コマンドを使ってるわけなんだ それを定義している
string というのは 文字列を定義する時に使うものなんだね...
string start_str = "start"; というのは start_str は start という文字列だってことを言ってるんだ
そうそう 最初にある
// to add sequence, edit #1 #2 #3
っていうのは コメント
シーケンスを追加するのは #1 #2 #3 の部分を変更してねっていう意味
つまり Programmable Fountain をお買いいただき このスクリプティング講座を終了すると 自分で噴水のシーケンスを 編集/追加 することができるようになるっていうことだね w
(続く)
タグ :スクリプト
2008年02月09日
walking のスクリプティング講座(その3)
さて 次の部分を見ていくよ
integer というのは数を定義する場合に使うものなんだ
integer min_link_num = 1; というのは最小のリンク番号(min_link_num)は 1
integer max_link_num = 6; というのは最大のリンク番号(max_link_num)は 6
っていうことを言っている
どういうことかっていうと 噴水は 真ん中にノズルがあって 周りに 5つノズルがあるんで それにリンク番号っていうのがついているんだけど その最小値と最大値を定義してるんだ
だから ノズルを追加した場合は max_link_num をその分増やさなくちゃいけないんだ... わっかるかな w
次 list というものが出てくるけど これは次回説明することとして w
その次の num_of_record というのは そのリストの中に入れる 1つのデータの要素数を示しているんだ 1つのデータが 5つの要素で構成されている
右側にある // から左側の部分もコメントなんだけど そこを見ると
duration / src nozzle link num / operation(start/stop) / hight / target nozzle link num
とか書いてある
どういうことかというと 持続時間 / ソースのノズルのリンク番号 / コマンド / 高さ / ターゲットのノズルのリンク番号
お~ なんか 察しの良い人は はは~ん とか思っていることと思うけれど これで 噴水のシーケンスを定義してるんだね w
(続く)
integer min_link_num = 1;
integer max_link_num = 6; // customize here to add nozzle
list sequence;
integer num_of_record = 5; // duration / src nozzle link num / operation(start/stop) / hight / target nozzle link num
integer というのは数を定義する場合に使うものなんだ
integer min_link_num = 1; というのは最小のリンク番号(min_link_num)は 1
integer max_link_num = 6; というのは最大のリンク番号(max_link_num)は 6
っていうことを言っている
どういうことかっていうと 噴水は 真ん中にノズルがあって 周りに 5つノズルがあるんで それにリンク番号っていうのがついているんだけど その最小値と最大値を定義してるんだ
だから ノズルを追加した場合は max_link_num をその分増やさなくちゃいけないんだ... わっかるかな w
次 list というものが出てくるけど これは次回説明することとして w
その次の num_of_record というのは そのリストの中に入れる 1つのデータの要素数を示しているんだ 1つのデータが 5つの要素で構成されている
右側にある // から左側の部分もコメントなんだけど そこを見ると
duration / src nozzle link num / operation(start/stop) / hight / target nozzle link num
とか書いてある
どういうことかというと 持続時間 / ソースのノズルのリンク番号 / コマンド / 高さ / ターゲットのノズルのリンク番号
お~ なんか 察しの良い人は はは~ん とか思っていることと思うけれど これで 噴水のシーケンスを定義してるんだね w
(続く)
タグ :スクリプト
2008年02月09日
walking のスクリプティング講座(その4)
さて お待ちかねの list の話だ w
沢山あるけど それぞれが 噴水のパターンを定義している
沢山あるけど 実際には 0 から 8 までの 9パターンなんだ
でも なんだか 分かれちゃってるのがあるよね それって何でかっていうと Second Life のスクリプトの制限によるものなんだ
一定個数以上だとエラーになってしまうので わざわざ分けて 後で くっつけるということをしている... 面倒だね... こういう所は改版時に真っ先に直してもらいたいものだね w
さて... 少し中を見てみるかな
噴水のシーケンスを定義しているという話を前のエントリーでしたわけだけれど 1つのデータがどういう要素からできてたかというと
持続時間 / ソースのノズルのリンク番号 / コマンド / 高さ / ターゲットのノズルのリンク番号
だったわけだけれど これで sequence0 を見てみよう
0.0, 1, start_str, 4, 0, 0.0, LINK_ALL_OTHERS, start_str, 1, 0
となっているね...
どういうことかというと
-----
持続時間は 0.0 - つまり 持続しない w ってことは 以降ずーっとこの設定のままってこと パターン 0 は変化しないパターンだってことだね
ソースのノズルのリンク番号 は 1 - これは 真ん中のノズルなんだ リンクする時に最後にクリックすると リンク番号は 1になるからね
コマンド は start_str - 水を出せってことなんだ
高さは 4 - 4m ってこと
ターゲットのノズルのリンク番号は 0 - ターゲットはなし
-----
あれ? まだ データがあるよね ってことは それは次のデータなんだ 区別できないのは 分かりにくいけど これも Second Life のスクリプトの限界だね ^^
次のデータを見ていってみよう
-----
持続時間は 0.0 - つまり 持続しない w ってことは 以降ずーっとこの設定のままってこと パターン 0 は変化しないパターンだってことだね
ソースのノズルのリンク番号 は LINK_ALL_OTHERS - これはこのスクリプトの入っているプリム以外のプリムを示してる このスクリプトは真ん中のノズルに入れるので 周りのノズルを指すんだ
コマンド は start_str - 水を出せってことなんだ
高さは 1 - 1m ってこと
ターゲットのノズルのリンク番号は 0 - ターゲットはなし
-----
っていうわけで パターン 0 は 真ん中のノズルから 4m の水が出て 周りのノズルからは 1m の水が出るパターンだってことが分かるね
まあ こういう感じでやっていけば 全部のシーケンスのパターンを解析することができるわけだけれど これは 次回までの宿題だよ w
(続く)
list sequence0 = [0.0, 1, start_str, 4, 0, 0.0, LINK_ALL_OTHERS, start_str, 1, 0];
list sequence1 = [1.0, 2, start_str, 2, 1, 1.0, 2, stop_str, 2, 1, 1.0, 3, start_str, 2, 1, 1.0, 3, stop_str, 2, 1, 1.0, 4,
start_str, 2, 1, 1.0, 4, stop_str, 2, 1, 1.0, 5, start_str, 2, 1, 1.0, 5, stop_str, 2, 1, 1.0, 6, start_str, 2, 1, 1.0, 6, stop_str, 2, 1];
list sequence2 = [0.0, 1, start_str, 4, 1, 0.0, LINK_ALL_OTHERS, start_str, 1, 1];
list sequence3 = [0.0, 1, start_str, 4, 1, 0.0, 2, start_str, 1, 3, 0.0, 3, start_str, 1, 4, 0.0, 4, start_str, 1, 5, 0.0, 5,
start_str, 1, 6, 10.0, 6, start_str, 1, 2];
list sequence4 = [0.0, 1, start_str, 4, 1, 0.0, 2, start_str, 1, 4, 0.0, 3, start_str, 1, 5, 0.0, 4, start_str, 1, 6, 0.0, 5,
start_str, 1, 2, 0.0, 6, start_str, 1, 3];
list sequence5 = [0.0, 1, start_str, 4, 1, 0.0, 2, start_str, 1, 4, 0.0, 3, start_str, 1, 5, 0.0, 4, start_str, 1, 6, 0.0, 5,
start_str, 1, 2, 3.0, 6, start_str, 1, 3, 0.0, 1, stop_str, 4, 1, 0.0, 2, stop_str, 1, 4, 0.0, 3,
stop_str, 1, 5, 0.0, 4, stop_str, 1, 6, 0.0, 5, stop_str, 1, 2, 5.0, 6, stop_str, 1, 3];
list sequence6_1 = [1.0, LINK_SET, start_str, 2, 2];
list sequence6_2 = [4.5, LINK_SET, stop_str, 2, 2];
list sequence6_3 = [1.0, LINK_SET, start_str, 2, 3];
list sequence6_4 = [4.5, LINK_SET, stop_str, 2, 3];
list sequence6_5 = [1.0, LINK_SET, start_str, 2, 4];
list sequence6_6 = [4.5, LINK_SET, stop_str, 2, 4];
list sequence6_7 = [1.0, LINK_SET, start_str, 2, 5];
list sequence6_8 = [4.5, LINK_SET, stop_str, 2, 5];
list sequence6_9 = [1.0, LINK_SET, start_str, 2, 6];
list sequence6_10 = [4.5, LINK_SET, stop_str, 2, 6];
list sequence7_1 = [0.0, LINK_SET, start_color_str, 50510, 0];
list sequence7_2 = [0.0, 2, start_str, 2, 0, 0.0, 3, start_str, 2, 0, 0.0, 4, start_str, 2, 0, 0.0, 5, start_str, 2, 0, 10.0, 6, start_str, 2, 0];
list sequence7_3 = [0.0, LINK_SET, start_color_str, 51005, 0];
list sequence7_4 = [0.0, 2, start_str, 2, 0, 0.0, 3, start_str, 2, 0, 0.0, 4, start_str, 2, 0, 0.0, 5, start_str, 2, 0, 10.0, 6, start_str, 2, 0];
list sequence7_5 = [0.0, LINK_SET, start_color_str, 101010, 0];
list sequence7_6 = [0.0, 2, start_str, 2, 0, 0.0, 3, start_str, 2, 0, 0.0, 4, start_str, 2, 0, 0.0, 5, start_str, 2, 0, 10.0, 6, start_str, 2, 0];
list sequence8_1 = [0.0, LINK_SET, start_color_str, 50510, 0];
list sequence8_2 = [0.8, 2, start_str, 2, 0, 0.8, 3, start_str, 2, 0, 0.8, 4, start_str, 2, 0, 0.8, 5, start_str, 2, 0, 0.8, 6, start_str, 2, 0];
list sequence8_2_2 = [10.0, 1, start_str, 6, 0];
list sequence8_3 = [0.8, 2, stop_str, 2, 0, 0.8, 3, stop_str, 2, 0, 0.8, 4, stop_str, 2, 0, 0.8, 5, stop_str, 2, 0, 0.8, 6, stop_str, 2, 0];
list sequence8_3_2 = [5.0, 1, stop_str, 6, 0];
list sequence8_4 = [0.0, LINK_SET, start_color_str, 51005, 0];
list sequence8_5 = [0.8, 2, start_str, 2, 0, 0.8, 3, start_str, 2, 0, 0.8, 4, start_str, 2, 0, 0.8, 5, start_str, 2, 0, 0.8, 6, start_str, 2, 0];
list sequence8_5_2 = [10.0, 1, start_str, 6, 0];
list sequence8_6 = [0.8, 2, stop_str, 2, 0, 0.8, 3, stop_str, 2, 0, 0.8, 4, stop_str, 2, 0, 0.8, 5, stop_str, 2, 0, 0.8, 6, stop_str, 2, 0];
list sequence8_6_2 = [5.0, 1, stop_str, 6, 0];
沢山あるけど それぞれが 噴水のパターンを定義している
沢山あるけど 実際には 0 から 8 までの 9パターンなんだ
でも なんだか 分かれちゃってるのがあるよね それって何でかっていうと Second Life のスクリプトの制限によるものなんだ
一定個数以上だとエラーになってしまうので わざわざ分けて 後で くっつけるということをしている... 面倒だね... こういう所は改版時に真っ先に直してもらいたいものだね w
さて... 少し中を見てみるかな
噴水のシーケンスを定義しているという話を前のエントリーでしたわけだけれど 1つのデータがどういう要素からできてたかというと
持続時間 / ソースのノズルのリンク番号 / コマンド / 高さ / ターゲットのノズルのリンク番号
だったわけだけれど これで sequence0 を見てみよう
0.0, 1, start_str, 4, 0, 0.0, LINK_ALL_OTHERS, start_str, 1, 0
となっているね...
どういうことかというと
-----
持続時間は 0.0 - つまり 持続しない w ってことは 以降ずーっとこの設定のままってこと パターン 0 は変化しないパターンだってことだね
ソースのノズルのリンク番号 は 1 - これは 真ん中のノズルなんだ リンクする時に最後にクリックすると リンク番号は 1になるからね
コマンド は start_str - 水を出せってことなんだ
高さは 4 - 4m ってこと
ターゲットのノズルのリンク番号は 0 - ターゲットはなし
-----
あれ? まだ データがあるよね ってことは それは次のデータなんだ 区別できないのは 分かりにくいけど これも Second Life のスクリプトの限界だね ^^
次のデータを見ていってみよう
-----
持続時間は 0.0 - つまり 持続しない w ってことは 以降ずーっとこの設定のままってこと パターン 0 は変化しないパターンだってことだね
ソースのノズルのリンク番号 は LINK_ALL_OTHERS - これはこのスクリプトの入っているプリム以外のプリムを示してる このスクリプトは真ん中のノズルに入れるので 周りのノズルを指すんだ
コマンド は start_str - 水を出せってことなんだ
高さは 1 - 1m ってこと
ターゲットのノズルのリンク番号は 0 - ターゲットはなし
-----
っていうわけで パターン 0 は 真ん中のノズルから 4m の水が出て 周りのノズルからは 1m の水が出るパターンだってことが分かるね
まあ こういう感じでやっていけば 全部のシーケンスのパターンを解析することができるわけだけれど これは 次回までの宿題だよ w
(続く)
タグ :スクリプト
2008年02月09日
walking のスクリプティング講座(その5)
さて データの部分も今回で終わりとしよう
pattern_list はパターン選択のメニューで表示するボタンのための文字列 だから パターンを追加した場合は ここを変更する必要があるんだけど メニューって 9以上表示できたっけ w
後 その上の add sequence here #1 ってのは パターンを追加する場合は シーケンスのデータを追加してね ということを言っている
パターンを追加する場合は この 2個所と この後 もう 1個所変更するだけでいいようになっているんだ
さて その後の default_start_color と default_end_color というのは 特に設定しなかった場合の噴水の色を示してる
ノズルから出たときは 青くて 最終的には白になる っていう設定になっているのだ それを変えたければ ここを変えればいいってことだね w
vector っていうのが出てきたけれど これは 3つの要素のデータを定義する場合に使う 色を定義するには 赤 緑 青 の 3要素の値を使うから vector ってのを使うわけなんだ
さて その後 いくつか 後で使う データが宣言されてある
整数のデータは num_of_sequence はシーケンスがいくつあったかということかな w
cur_seq というのは 選択されたパターン のシーケンス
cur_ なんとかというのは 今処理しているデータの 値を置いておくのに使っている
持続時間 / ソースのノズルのリンク番号 / コマンド / 高さ / ターゲットのノズルのリンク番号
っていうそれぞれに対応して あるわけだねん w
それぞれのデータのタイプによって integer(整数)だったり float(浮動小数点)だったりするわけだね
持続時間は浮動小数点 なるほど 0.0 となってたのは そのためなんだ
あれれ touched なんてあるぞ... というわけで調べてみると...
あれ? ちゃんとした形に変更したつもりでいたのに 1つ前の版のままだ... ん~ まあでも動いてるから このままの解説にしとくねん ^^;
(続く)
// add sequence here #1
list pattern_list = ["0", "1", "2", "3", "4", "5", "6", "7", "8"]; // add sequence number here #2
vector default_start_color = <0.50,0.50,1.00>;
vector default_end_color = <1.00,1.00,1.00>;
integer num_of_sequence;
list cur_seq;
integer cur_seq_num;
float cur_duration;
integer cur_src_link;
string cur_operation;
integer cur_hight;
integer cur_target_link;
integer touched;
pattern_list はパターン選択のメニューで表示するボタンのための文字列 だから パターンを追加した場合は ここを変更する必要があるんだけど メニューって 9以上表示できたっけ w
後 その上の add sequence here #1 ってのは パターンを追加する場合は シーケンスのデータを追加してね ということを言っている
パターンを追加する場合は この 2個所と この後 もう 1個所変更するだけでいいようになっているんだ
さて その後の default_start_color と default_end_color というのは 特に設定しなかった場合の噴水の色を示してる
ノズルから出たときは 青くて 最終的には白になる っていう設定になっているのだ それを変えたければ ここを変えればいいってことだね w
vector っていうのが出てきたけれど これは 3つの要素のデータを定義する場合に使う 色を定義するには 赤 緑 青 の 3要素の値を使うから vector ってのを使うわけなんだ
さて その後 いくつか 後で使う データが宣言されてある
整数のデータは num_of_sequence はシーケンスがいくつあったかということかな w
cur_seq というのは 選択されたパターン のシーケンス
cur_ なんとかというのは 今処理しているデータの 値を置いておくのに使っている
持続時間 / ソースのノズルのリンク番号 / コマンド / 高さ / ターゲットのノズルのリンク番号
っていうそれぞれに対応して あるわけだねん w
それぞれのデータのタイプによって integer(整数)だったり float(浮動小数点)だったりするわけだね
持続時間は浮動小数点 なるほど 0.0 となってたのは そのためなんだ
あれれ touched なんてあるぞ... というわけで調べてみると...
あれ? ちゃんとした形に変更したつもりでいたのに 1つ前の版のままだ... ん~ まあでも動いてるから このままの解説にしとくねん ^^;
(続く)
タグ :スクリプティング
2008年02月09日
walking のスクリプティング講座(その6)
さて今回から データ部分は終わって 処理部分だお
cur_seq っていうのは 選択されたパターン のシーケンス(データ)だってことを言っていたけれど
これは そこから cur_ なんとかというのは 今処理しているデータの 値を取り出すのに使う 手続きを定義している部分だお
こういうことをすれば取り出せるんだ... データの要素は
持続時間 / ソースのノズルのリンク番号 / コマンド / 高さ / ターゲットのノズルのリンク番号
の順に入っているから これで取り出せる 持続時間が取り出されてないけど きっと 別に取り出されてあるんだろう w
取り出すデータのタイプによって llList2Integer だったり llList2String だったりする部分が注意点かな...
1からじゃなくて 0 からなんだな~ ってこともわかるねん
次~
ん~ これは何だ? ん~ なるほどって w
パターンから シーケンスを取り出してるんだね メニューで選択されたパターンは sequence っていう所に入っていて そこから 今処理するシーケンス(データ)を取り出すということをしている(複数のデータがくっついてだらだら入っているのでこういうことをしないといけない w)
何番目のシーケンスデータを取り出すかってことが cur_seq_num でわかるわけだ
この手続きが行われると 1個づつシーケンス(データ)が取り出され
シーケンスの終わりになると(num_of_sequence を超えると)最初から取り出せるようにする
持続時間はここで取り出されて返されていたんだ w
(続く)
get_record()
{
cur_src_link = llList2Integer(cur_seq, 1);
cur_operation = llList2String (cur_seq, 2);
cur_hight = llList2Integer(cur_seq, 3);
cur_target_link = llList2Integer(cur_seq, 4);
}
cur_seq っていうのは 選択されたパターン のシーケンス(データ)だってことを言っていたけれど
これは そこから cur_ なんとかというのは 今処理しているデータの 値を取り出すのに使う 手続きを定義している部分だお
こういうことをすれば取り出せるんだ... データの要素は
持続時間 / ソースのノズルのリンク番号 / コマンド / 高さ / ターゲットのノズルのリンク番号
の順に入っているから これで取り出せる 持続時間が取り出されてないけど きっと 別に取り出されてあるんだろう w
取り出すデータのタイプによって llList2Integer だったり llList2String だったりする部分が注意点かな...
1からじゃなくて 0 からなんだな~ ってこともわかるねん
float update_cur_seq_and_get_duration()
{
cur_seq = llList2List(sequence, cur_seq_num * num_of_record, (cur_seq_num + 1) * num_of_record - 1);
if (++cur_seq_num > num_of_sequence) {
cur_seq_num = 0;
}
// llOwnerSay((string)cur_seq_num);
return llList2Float(cur_seq, 0);
}
次~
ん~ これは何だ? ん~ なるほどって w
パターンから シーケンスを取り出してるんだね メニューで選択されたパターンは sequence っていう所に入っていて そこから 今処理するシーケンス(データ)を取り出すということをしている(複数のデータがくっついてだらだら入っているのでこういうことをしないといけない w)
何番目のシーケンスデータを取り出すかってことが cur_seq_num でわかるわけだ
この手続きが行われると 1個づつシーケンス(データ)が取り出され
シーケンスの終わりになると(num_of_sequence を超えると)最初から取り出せるようにする
持続時間はここで取り出されて返されていたんだ w
(続く)
タグ :スクリプト
2008年02月09日
walking のスクリプティング講座(その7)
そろそろ飽きてきたかな w
独立した手続き部分はこのエントリーでお終いにしよう
これは~ 噴水を止める手続きだな
min_link_num と max_link_num が出てきたね ^^
全部のノズルに対し stop_str つまり 停止命令を出すというのがこの手続きの仕事だ
vector っていうのは 3つのデータを扱うのに使うということを言っていたけれど その 3つのデータを 1つの整数にして返そうというのがこの手続きの仕事
.x .y .z と付けると それぞれのデータってことになるんだ
あ~ これは 全部のノズルに対して 最初の色と 最後の色を 渡している
vector2int っていうのが使われてるね ^^ 1個しかデータは渡せないので 3個のデータを 1個に詰め込んで渡してるってわけだ
LINK_SET っていうのは 全てのノズルを指している(というかオブジェクト中の全てのプリムってことだけど)
だから~ 最初の関数でやっていたのは LINK_SET を使えば 1行でできちゃったんだね w
途中で新しいことを憶えながら作って前の部分を見直してないと こういうことになる ^^
(続く)
独立した手続き部分はこのエントリーでお終いにしよう
stop_fountain()
{
integer i;
for (i = min_link_num; i <= max_link_num; i++) {
llMessageLinked(i, 0, stop_str, NULL_KEY);
}
}
これは~ 噴水を止める手続きだな
min_link_num と max_link_num が出てきたね ^^
全部のノズルに対し stop_str つまり 停止命令を出すというのがこの手続きの仕事だ
integer vector2int(vector v)
{
return (integer)(v.x * 100000) + (integer)(v.y * 1000) + (integer)(v.z * 10);
}
vector っていうのは 3つのデータを扱うのに使うということを言っていたけれど その 3つのデータを 1つの整数にして返そうというのがこの手続きの仕事
.x .y .z と付けると それぞれのデータってことになるんだ
set_default_colors()
{
llMessageLinked(LINK_SET, vector2int(default_start_color), start_color_str, NULL_KEY);
llMessageLinked(LINK_SET, vector2int(default_end_color), end_color_str, NULL_KEY);
}
あ~ これは 全部のノズルに対して 最初の色と 最後の色を 渡している
vector2int っていうのが使われてるね ^^ 1個しかデータは渡せないので 3個のデータを 1個に詰め込んで渡してるってわけだ
LINK_SET っていうのは 全てのノズルを指している(というかオブジェクト中の全てのプリムってことだけど)
だから~ 最初の関数でやっていたのは LINK_SET を使えば 1行でできちゃったんだね w
途中で新しいことを憶えながら作って前の部分を見直してないと こういうことになる ^^
(続く)
タグ :スクリプト