2008年03月02日
walking のスクリプティング講座3 - アニメーション
programmable fountain と 翼 を題材にこれまで やってきたけれど
-----
jun デザインで最も売れているのは 実は Animation Bracelet だ
-----
なぜならば フリービーだから... あはは
-----
毎日 1個は出るな~
-----
というわけで これを題材にしてみよう
-----
中には 2つ入っていて アニメーションをノートにリストしておくと 終了すると次々と実行するもの(だからループしたアニメーションはそこで止まったしまうから入れちゃダメだよ)と
-----
コンテンツ中のアニメーションを10秒毎に切り替えてアニメーションするもの
-----
リスト版と時間版とでも読んでおこうか
-----
大枠は同じなんだけど 部分的に異なる というわけで 両方のリストを上げておこう 解説は 次回以降
-----
リスト版
-----
-----
時間版
-----
-----
(続く)
-----
jun デザインで最も売れているのは 実は Animation Bracelet だ
-----
なぜならば フリービーだから... あはは
-----
毎日 1個は出るな~
-----
というわけで これを題材にしてみよう
-----
中には 2つ入っていて アニメーションをノートにリストしておくと 終了すると次々と実行するもの(だからループしたアニメーションはそこで止まったしまうから入れちゃダメだよ)と
-----
コンテンツ中のアニメーションを10秒毎に切り替えてアニメーションするもの
-----
リスト版と時間版とでも読んでおこうか
-----
大枠は同じなんだけど 部分的に異なる というわけで 両方のリストを上げておこう 解説は 次回以降
-----
リスト版
-----
//
// File: dance_ring.lsl
// Date Author number of nodes
// 2007/9/10 walkinglint 82
//
// http://mina.slmame.com/e3291.html
// http://miz.slmame.com/e2400.html
key av_id;
string notecard_name = "dance_list";
integer read_line;
key query_id;
list dance_list = [];
integer i;
integer dance_num;
string dance_name;
list animation_list;
activate_load_and_animation() {
dance_list = [];
llOwnerSay("Now Loading..");
read_line = 0;
if (llGetInventoryType(notecard_name) == INVENTORY_NOTECARD) {
query_id = llGetNotecardLine(notecard_name, read_line); // request first line
} else {
llOwnerSay("Notecard " + notecard_name + " is not found");
}
}
animation() {
dance_num = 0;
dance_name = llList2String(dance_list, dance_num);
llOwnerSay(dance_name);
llStartAnimation(dance_name);
llSetTimerEvent(0.5);
}
default {
on_rez(integer start_param) {
llSetTimerEvent(0.0);
}
attach(key avid) {
if (avid != NULL_KEY) {
llSetTimerEvent(0.0);
av_id = avid;
integer perm = llGetPermissions();
if ((perm & PERMISSION_TRIGGER_ANIMATION) == 0) {
llRequestPermissions(avid, PERMISSION_TRIGGER_ANIMATION);
} else {
activate_load_and_animation();
}
} else if (llStringLength(dance_name) != 0) {
llStopAnimation(dance_name);
}
}
run_time_permissions(integer perm) {
if (perm & PERMISSION_TRIGGER_ANIMATION) {
activate_load_and_animation();
}
}
dataserver(key queryid, string data) {
if (queryid == query_id) {
if (data != EOF) {
// process data
if (llStringLength(data) != 0) {
dance_list = llListInsertList(dance_list, [data], llGetListLength(dance_list));
}
read_line++;
query_id = llGetNotecardLine(notecard_name, read_line);
} else {
llOwnerSay("Loading complete.");
animation();
}
}
}
timer() {
animation_list = llGetAnimationList(av_id);
if (llListFindList(animation_list, [llGetInventoryKey(dance_name)]) == -1) {
dance_num++;
if (dance_num == llGetListLength(dance_list)) {
dance_num = 0;
}
dance_name = llList2String(dance_list, dance_num);
llOwnerSay(dance_name);
llStartAnimation(dance_name);
}
}
}
-----
時間版
-----
//
// File: dance_ring_10s.lsl
// Date Author number of nodes
// 2007/10/6 walkinglint 52
// 2007/10/6 walkinglint 84 (dance_ring->dance_ring_10s)
// 2007/9/11 walkinglint 83
// 2007/9/10 walkinglint 82
//
// http://mina.slmame.com/e3291.html
// http://miz.slmame.com/e2400.html
key av_id;
integer read_line;
key query_id;
list dance_list = [];
integer i;
integer num_of_dances;
string nm;
integer dance_num = 0;
string dance_name;
list animation_list;
activate_load_and_animation() {
num_of_dances = llGetInventoryNumber(INVENTORY_ANIMATION);
for (i = 0; i < num_of_dances; i++) {
nm = llGetInventoryName(INVENTORY_ANIMATION, i);
dance_list = llListInsertList(dance_list, [nm], llGetListLength(dance_list));
}
animation();
}
animation() {
dance_num = 0;
dance_name = llList2String(dance_list, dance_num);
llStartAnimation(dance_name);
llSetTimerEvent(10.0);
}
default {
on_rez(integer start_param) {
llSetTimerEvent(0.0);
}
attach(key avid) {
if (avid != NULL_KEY) {
llSetTimerEvent(0.0);
av_id = avid;
integer perm = llGetPermissions();
if ((perm & PERMISSION_TRIGGER_ANIMATION) == 0) {
llRequestPermissions(avid, PERMISSION_TRIGGER_ANIMATION);
} else {
activate_load_and_animation();
}
} else if (llStringLength(dance_name) != 0) {
llStopAnimation(dance_name);
}
}
run_time_permissions(integer perm) {
if (perm & PERMISSION_TRIGGER_ANIMATION) {
activate_load_and_animation();
}
}
timer() {
llStopAnimation(dance_name);
dance_num++;
if (dance_num == llGetListLength(dance_list)) {
dance_num = 0;
}
dance_name = llList2String(dance_list, dance_num);
llStartAnimation(dance_name);
}
}
-----
(続く)
Posted by walkinglint at 19:16│Comments(0)
│walking のスクリプティング講座