ソラマメブログ

2008年11月15日

メッセージボードの不思議 - 逐次解説(その3)

今回と次回と次々回ぐらいで終了させる予定 w
-----
//
// File: XyzzyText.lsl
// Date Author number of nodes
// 2008/11/12 walkinglint 388
//
// //////////////////////////////////////////
// XyzzyText v2.1 Script (Set Line Color) by Huney Jewell
// XyzzyText v2.0 Script (5 Face, Single Texture)
//
// Heavily Modified by Thraxis Epsilon, Gigs Taggart 5/2007 and Strife Onizuka 8/2007
// Rewrite to allow one-script-per-object operation w/ optional slaves
// Enable prim-label functionality
// Enabled Banking
//
// Modified by Kermitt Quirk 19/01/2006
// To add support for 5 face prim instead of 3
//
// Core XyText Originally Written by Xylor Baysklef
//
// //////////////////////////////////////////
// ///////////// CONSTANTS ///////////////////
// XyText Message Map.
//
integer DISPLAY_STRING = 204000;
integer DISPLAY_EXTENDED = 204001;
integer REMAP_INDICES = 204002;
integer RESET_INDICES = 204003;
integer SET_FADE_OPTIONS = 204004;
integer SET_FONT_TEXTURE = 204005;
integer SET_LINE_COLOR = 204006;
integer SET_COLOR = 204007;
integer RESCAN_LINKSET = 204008;
-----
指示用のコード
-----
// internal API
integer REGISTER_SLAVE = 205000;
integer SLAVE_RECOGNIZED = 205001;
integer SLAVE_DISPLAY = 205003;
integer SLAVE_DISPLAY_EXTENDED = 205004;
integer SLAVE_RESET = 205005;
-----
内部指示用のコード
-----
// This is an extended character escape sequence.
string ESCAPE_SEQUENCE = "\\e";
-----
エスケープ文字
-----
// This is used to get an index for the extended character.
string EXTENDED_INDEX = "12345";
-----
拡張文字用のインデックス
-----
// Face numbers.
integer FACE_1 = 3;
integer FACE_2 = 7;
integer FACE_3 = 4;
integer FACE_4 = 6;
integer FACE_5 = 1;
-----
面番号
-----
// Used to hide the text after a fade-out.
key TRANSPARENT = "701917a8-d614-471f-13dd-5f4644e36e3c";
-----
フェードアウト後にテキストを隠すために用いる透明テクスチャ
-----
key null_key = NULL_KEY;
-----
ナルキー(小文字の形も使えるようにしてるわけね)
-----
//
// /////////// END CONSTANTS ////////////////
// /////////// GLOBAL VARIABLES ///////////////
// This is the key of the font we are displaying.
//
key gFontTexture = "b2e7394f-5e54-aa12-6e1c-ef327b6bed9e";
-----
フォントのテクスチャ(これまで見てきたやつね w)
-----
// All displayable characters. Default to ASCII order.
string gCharIndex;
-----
表示可能な文字列(デフォルトで ResetCharIndex で ASCII に初期化される)
-----
// This is whether or not to use the fade in/out special effect.
integer gCellUseFading = FALSE;
------
フェードアウトを使う場合 TRUE 使わない場合(デフォルト)FALSE
-----
//
// This is how long to display the text before fading out (if using
// fading special effect).
// Note: < 0 means don't fade out.
//
float gCellHoldDelay = 1.0;
-----
(フェードアウトを用いた場合)フェードアウトするまでに表示する時間
-----
integer gSlaveRegistered;
list gSlaveNames;
integer BANK_STRIDE = 3; // offset, length, highest_dirty
list gBankingData;
-----
グローバル変数はここまで
-----
// ///////// END GLOBAL VARIABLES ////////////
ResetCharIndex() {
gCharIndex = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`";
gCharIndex += "abcdefghijklmnopqrstuvwxyz{|}~";
gCharIndex += "\n\n\n\n\n";
}
-----
gCharIndex に ASCII 文字を設定
-----
vector GetGridOffset(integer index) {
// Calculate the offset needed to display this character.
integer Row = index / 10;
integer Col = index % 10;
// Return the offset in the texture.
return <-0.45 + 0.1 * Col, 0.45 - 0.1 * Row, 0.0>;
}
-----
文字コードから フォントのテクスチャ上のオフセットを計算
-----
ShowChars(integer link, vector grid_offset1, vector grid_offset2,
vector grid_offset3, vector grid_offset4, vector grid_offset5) {
//
// Set the primitive textures directly.
// <-0.256, 0, 0>
// <0, 0, 0>
// <0.130, 0, 0>
// <0, 0, 0>
// <-0.74, 0, 0>
//
llSetLinkPrimitiveParams(link, [
PRIM_TEXTURE, FACE_1, (string)gFontTexture,
<0.126, 0.1, 0>, grid_offset1 + <0.037, 0, 0>, 0.0,
PRIM_TEXTURE, FACE_2, (string)gFontTexture,
<0.05, 0.1, 0>, grid_offset2, 0.0,
PRIM_TEXTURE, FACE_3, (string)gFontTexture,
<-0.74, 0.1, 0>, grid_offset3 - <0.244, 0, 0>, 0.0,
PRIM_TEXTURE, FACE_4, (string)gFontTexture,
<0.05, 0.1, 0>, grid_offset4, 0.0,
PRIM_TEXTURE, FACE_5, (string)gFontTexture,
<0.126, 0.1, 0>, grid_offset5 - <0.037, 0, 0>, 0.0
]);
}
-----
llSetLinkPrimitiveParams の PRIM_TEXTURE は integer face, string texture,
vector repeats, vector offsets, float rotation_in_radians
-----
表示する文字のオフセットを 5文字分受け取り 1プリム 5文字 に表示するよう指示する
-----
RenderString(integer link, string str) {
// Get the grid positions for each pair of characters.
vector GridOffset1 = GetGridOffset(llSubStringIndex(gCharIndex, llGetSubString(str, 0, 0)));
vector GridOffset2 = GetGridOffset(llSubStringIndex(gCharIndex, llGetSubString(str, 1, 1)));
vector GridOffset3 = GetGridOffset(llSubStringIndex(gCharIndex, llGetSubString(str, 2, 2)));
vector GridOffset4 = GetGridOffset(llSubStringIndex(gCharIndex, llGetSubString(str, 3, 3)));
vector GridOffset5 = GetGridOffset(llSubStringIndex(gCharIndex, llGetSubString(str, 4, 4)));
// Use these grid positions to display the correct textures/offsets.
ShowChars(link, GridOffset1, GridOffset2, GridOffset3, GridOffset4, GridOffset5);
}
-----
受け取った文字列 str の頭 5文字分を gCharIndex 中の位置を調べることでインデックスを得
-----
そのインデックスから テクスト中のオフセットを得
-----
受け取った整数 link のリンク番号のプリムに表示する
-----
RenderWithEffects(integer link, string str) {
// Get the grid positions for each pair of characters.
vector GridOffset1 = GetGridOffset(llSubStringIndex(gCharIndex, llGetSubString(str, 0, 0)));
vector GridOffset2 = GetGridOffset(llSubStringIndex(gCharIndex, llGetSubString(str, 1, 1)));
vector GridOffset3 = GetGridOffset(llSubStringIndex(gCharIndex, llGetSubString(str, 2, 2)));
vector GridOffset4 = GetGridOffset(llSubStringIndex(gCharIndex, llGetSubString(str, 3, 3)));
vector GridOffset5 = GetGridOffset(llSubStringIndex(gCharIndex, llGetSubString(str, 4, 4)));
-----
ここまでは RenderString と同じ
-----
// First set the alpha to the lowest possible.
llSetLinkAlpha(link, 0.05, ALL_SIDES);
-----
アルファを最低値にし
-----
// Use these grid positions to display the correct textures/offsets.
// Now turn up the alpha until it is at full strength.
ShowChars(link, GridOffset1, GridOffset2, GridOffset3, GridOffset4, GridOffset5);
-----
表示
-----
float Alpha = 0.10;
for (; Alpha <= 1.0; Alpha += 0.05) {
llSetLinkAlpha(link, Alpha, ALL_SIDES);
// See if we want to fade out as well.
}
-----
0.05 ずつ増やし
-----
if (gCellHoldDelay < 0.0) {
// No, bail out. (Just keep showing the string at full strength).
return ;
// Hold the text for a while.
}
-----
フェードアウトさせない場合はここで終了
-----
llSleep(gCellHoldDelay);
-----
フェードアウトさせるまでの時間をスリープし
-----
// Now fade out.
for (Alpha = 0.95; Alpha >= 0.05; Alpha -= 0.05) {
llSetLinkAlpha(link, Alpha, ALL_SIDES);
// Make the text transparent to fully hide it.
}
-----
0.05 ずつ減らす
-----
llSetLinkTexture(link, TRANSPARENT, ALL_SIDES);
-----
透明テクスチャを表示
-----
}
-----
(続く)

同じカテゴリー(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)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。