ソラマメブログ
QRコード
QRCODE
アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 1人
プロフィール
Hitomi Magne
Hitomi Magne
ヌーディスト件ダンサーです。Susukinoによく出没します
オーナーへメッセージ

2008年11月25日

UNICODE表示プリム高速版

UNICODE表示プリム高速版
以前のバージョンだと1024 x 1024サイズのテクスチャに1024文字ずつ収納していましたが、あれだとテクスチャの読み込みに時間がかかって、電光掲示板のような用途では読み込まれる前に流れてしまったりしてしまいました。
一つの解決策はテクスチャを縦横半分に縮小してしまうことですが、これをすると文字が圧縮されて読みづらくなってしまうんですね。16x16ドットあればよさそうなものですが、テクスチャとして使用するとアンチエイリアスがかかってぼやけるため、カクカクしたままぼけるということになってしまいます。
というわけで、もう一つの解決策、512 x 512のテクスチャに縦横16文字ずつ、計256文字を収録するという方をやってみます。いままでこれをためらっていたのは、テクスチャの枚数が4倍になってしまうからです。合計163枚、アップロード料金実に1630L$を支払い(間違ったテクスチャを「大量アップロード」してしまい、途中であわててビューアを終了させたりしたので、実際はもっとかかっています><)えいやっと実行。
ついに完成しました。テクスチャ選択関数の行数が163行以上になってしまうので、これを手でUUIDのコピー、ペースト、数値の書き換えなんてやってたらいつまでかかるか分からないし、ちょっとした書き間違いを発見できなくなってしまうので、半自動でここを行うことにしました。

適当なプリムに、アップロードしたテクスチャを全部入れます。テクスチャの名前は
0000-00ff
0100-01ff
という具合に、開始コードポイント、終了コードポイントを16進で書いて、間を"-"でつなげたものです。そして以下のスクリプトを入れます。

string hexc="0123456789ABCDEF";
list textures;
string int2hex(integer x)
{
integer x0 = x & 0xF;
string res = llGetSubString(hexc, x0, x0);
x = (x >> 4) & 0x0FFFFFFF; //otherwise we get infinite loop on negatives.
while( x != 0 )
{
x0 = x & 0xF;
res = llGetSubString(hexc, x0, x0) + res;
x = x >> 4;
}
return "0x"+ res;

}
default
{

touch_start(integer total_number)
{
integer num=llGetInventoryNumber(INVENTORY_TEXTURE);
integer i;
string s;
key k;
string ks;
string st;
string ed;
list tmp;
string output;
textures=[];
llSay(0,"------"+(string)num+"-----");
for (i=0; i<num; i++){
s = llGetInventoryName(INVENTORY_TEXTURE, i);
k= llGetInventoryKey(s);
ks = (string)k;
tmp= llParseString2List(s, ["-"],[]);
st = llList2String(tmp,0);
ed = llList2String(tmp,1);
textures+=[(integer)("0x"+st)];
textures+=[ks];
}
textures=llListSort(textures, 2 ,TRUE);
integer start;
for (i=0; i<num*2; i+=2){
start=llList2Integer(textures,i);
st = int2hex(start);
ed = int2hex(start+255);
ks = llList2String(textures,i+1);
llSay(0,"if (code >= "+ st +" && code <= " + ed +" ) return [ " + st + ",\""+ks+"\" ];");

}
}
}


このプリムをタッチすれば、中に入れたテクスチャを調べてUUIDを抽出し、コードの形で喋ってくれます。チャットウィンドウでこれをコピーして、チャット行の頭の時刻とオブジェクト名をエディタで消してしまえばOK。というわけで、以下、改造版文字表示プリムのスクリプトです。

//
// UniText 1.1 : Use small textures for faster display.
// UniText 1.0 : Initial release.
// Copy this script to display prim.
// Display 5 unicode character on 1 prim.
// You have to use XyzzyText Prim Setup Script (5 Face) before use this.
// http://wiki.secondlife.com/wiki/XyzzyText
//

integer SLAVE_DISPLAY = 205003;
integer SLAVE_COLOR = 205010;

string tmpTexture;
string myText;
vector myColor=<1,1,1>;
list faces=[3,7,4,6,1];
list faceScale=[2.48,1,-14.75,1,2.48];
list faceShift=[0,-0.042,0,0.044,-0.39,0,0,0];
float tScale=0.0625;



// Get Unicode Character cord.
// Accept only 1 unicode character.
//
//
integer getUnicodeChar(string m)
{
string s= llStringToBase64(m);
integer n= llBase64ToInteger(s);
//
// n contains UTF-8 character code with 'Left to Right order'.
// We accept only 2 byte unicode m so it was only 1 to 3 byte UTF-8.
//
if ((n & 0x80000000) == 0) return ((n & 0x7f000000) >>24);
if ((n & 0xe0000000) == 0xc0000000) return ((n & 0x1f000000) >>18) | ((n & 0x003f0000)>>16);
if ((n & 0xf0000000) == 0xe0000000) return ((n & 0x0f000000) >>12) | ((n & 0x003f0000) >>10) | ((n & 0x00003f00) >>8);
return 32; // else return space code.
}

//
// Get code page and base.
// If code is not in this area, return space code.
//

list selectTexture(integer code){
if (code >= 0x0 && code <= 0xFF ) return [ 0x0,"d9d67c71-66f1-3cc7-cc07-2b7f353b2ae7" ];
if (code >= 0x100 && code <= 0x1FF ) return [ 0x100,"8f5bc97e-9455-b44e-c140-b32be368998f" ];
if (code >= 0x200 && code <= 0x2FF ) return [ 0x200,"9cc9d33d-4cbf-4064-3fe0-7c697b4104ae" ];
if (code >= 0x300 && code <= 0x3FF ) return [ 0x300,"80845fbe-01c5-9b95-2822-fba2495b7382" ];
if (code >= 0x400 && code <= 0x4FF ) return [ 0x400,"51cdc0a8-7646-ad82-728c-0ec2f0432a79" ];
if (code >= 0x500 && code <= 0x5FF ) return [ 0x500,"28919116-30fc-a356-39f5-15f9921c306c" ];
if (code >= 0x600 && code <= 0x6FF ) return [ 0x600,"487065b6-cbd5-5356-67f9-05edc5122bd5" ];
if (code >= 0x700 && code <= 0x7FF ) return [ 0x700,"97f0c8f0-ca14-c00f-a27a-27594130c696" ];
if (code >= 0x900 && code <= 0x9FF ) return [ 0x900,"0001c30b-811f-77c0-2b84-378f432a9c52" ];
if (code >= 0xA00 && code <= 0xAFF ) return [ 0xA00,"8d54355b-fbf4-4f48-e22b-fa1202376fcd" ];
if (code >= 0xB00 && code <= 0xBFF ) return [ 0xB00,"68979423-dbbd-5cfd-5726-a7325097a542" ];
if (code >= 0xC00 && code <= 0xCFF ) return [ 0xC00,"8901490e-c4d4-6fcc-5988-b1f9e010f94f" ];
if (code >= 0xE00 && code <= 0xEFF ) return [ 0xE00,"a1d5df39-0fe1-3210-e337-c10e8d9fba1a" ];
if (code >= 0x1000 && code <= 0x10FF ) return [ 0x1000,"b079c080-e939-a758-5625-df770a4cdf39" ];
if (code >= 0x1100 && code <= 0x11FF ) return [ 0x1100,"c15d1f7b-9093-835a-b8a6-9b5e4d797e7a" ];
if (code >= 0x1E00 && code <= 0x1EFF ) return [ 0x1E00,"64b2a64d-ea84-d5f3-c6da-1eddc1c55302" ];
if (code >= 0x1F00 && code <= 0x1FFF ) return [ 0x1F00,"4ca989ab-6f33-cc3b-3258-c6f30a8a6627" ];
if (code >= 0x2000 && code <= 0x20FF ) return [ 0x2000,"94e6c574-6325-acfe-d2ff-b432eb155526" ];
if (code >= 0x2100 && code <= 0x21FF ) return [ 0x2100,"529fd971-acb7-04b8-3fe0-b2def845982f" ];
if (code >= 0x2200 && code <= 0x22FF ) return [ 0x2200,"9927dcf0-4135-e497-6adc-218d1be1104d" ];
if (code >= 0x2300 && code <= 0x23FF ) return [ 0x2300,"fa3e03f0-21f5-b41c-5a8d-56d8e32b723f" ];
if (code >= 0x2400 && code <= 0x24FF ) return [ 0x2400,"f9a87178-7ce3-0773-8cfd-88d1104b37ee" ];
if (code >= 0x2500 && code <= 0x25FF ) return [ 0x2500,"e26f01c7-e3d6-874a-304a-96499ee34bc7" ];
if (code >= 0x2600 && code <= 0x26FF ) return [ 0x2600,"32fdf8c3-ad12-23e7-19d8-355bea32dccb" ];
if (code >= 0x2700 && code <= 0x27FF ) return [ 0x2700,"21a8a505-4489-4c51-9799-b611d2bf934c" ];
if (code >= 0x2900 && code <= 0x29FF ) return [ 0x2900,"e23b03e5-7e83-06fe-9cee-37b55ee2a782" ];
if (code >= 0x3000 && code <= 0x30FF ) return [ 0x3000,"6d6a4787-93fb-f971-2468-bc62084aa264" ];
if (code >= 0x3100 && code <= 0x31FF ) return [ 0x3100,"5547c8b7-e0db-0041-77b5-0fdf99f87754" ];
if (code >= 0x3200 && code <= 0x32FF ) return [ 0x3200,"bb53c8b0-0d51-fb5f-da43-d1b4caec1047" ];
if (code >= 0x3300 && code <= 0x33FF ) return [ 0x3300,"c786dc80-a4fd-89e2-8626-d003c0526d82" ];
if (code >= 0x4E00 && code <= 0x4EFF ) return [ 0x4E00,"11bffb89-30e6-539c-6973-449c0cefcf91" ];
if (code >= 0x4F00 && code <= 0x4FFF ) return [ 0x4F00,"a7ff6451-8932-05e2-5474-be9a03c88299" ];
if (code >= 0x5000 && code <= 0x50FF ) return [ 0x5000,"8004b55d-3ed7-3b29-d80d-0737041bd69c" ];
if (code >= 0x5100 && code <= 0x51FF ) return [ 0x5100,"2f497896-3696-9a0f-b35e-d0cefa328003" ];
if (code >= 0x5200 && code <= 0x52FF ) return [ 0x5200,"770ec7ad-62c8-6beb-878d-ad9803dd47d9" ];
if (code >= 0x5300 && code <= 0x53FF ) return [ 0x5300,"6f260249-f62b-ea4b-d8df-3ba9d01fbdd7" ];
if (code >= 0x5400 && code <= 0x54FF ) return [ 0x5400,"9ccc9e15-e4bb-0271-0fe9-9946ee35c554" ];
if (code >= 0x5500 && code <= 0x55FF ) return [ 0x5500,"7621addf-cc6f-6062-b311-3c3c807489e9" ];
if (code >= 0x5600 && code <= 0x56FF ) return [ 0x5600,"6586798e-fd3d-29fa-40e9-ff118fe270ec" ];
if (code >= 0x5700 && code <= 0x57FF ) return [ 0x5700,"71dfeafc-7008-d5bd-0361-e3438bd75b55" ];
if (code >= 0x5800 && code <= 0x58FF ) return [ 0x5800,"d8f21858-c62b-92f7-beb1-c95ec38ad97d" ];
if (code >= 0x5900 && code <= 0x59FF ) return [ 0x5900,"e6537987-6bfc-e8c1-da27-e3341ce9e91e" ];
if (code >= 0x5A00 && code <= 0x5AFF ) return [ 0x5A00,"c387f495-0b68-6baa-a9bc-fe1c7f01e456" ];
if (code >= 0x5B00 && code <= 0x5BFF ) return [ 0x5B00,"b2673cb6-47e4-7f46-c8ac-2468762db4b2" ];
if (code >= 0x5C00 && code <= 0x5CFF ) return [ 0x5C00,"a10cb92d-e658-7659-9f56-898958c2e9d9" ];
if (code >= 0x5D00 && code <= 0x5DFF ) return [ 0x5D00,"d9f65d9d-54e8-d12d-a729-f77e18e0b5e7" ];
if (code >= 0x5E00 && code <= 0x5EFF ) return [ 0x5E00,"aa0a880e-766e-ca06-0aa7-9bab0693933a" ];
if (code >= 0x5F00 && code <= 0x5FFF ) return [ 0x5F00,"54d0f830-3a1e-6890-7064-5b6c9dda8fde" ];
if (code >= 0x6000 && code <= 0x60FF ) return [ 0x6000,"f7dfb7e6-e362-9e5d-d145-6582412536c0" ];
if (code >= 0x6100 && code <= 0x61FF ) return [ 0x6100,"ed1fe1b3-1ad8-9494-734b-d5f2018a3b8a" ];
if (code >= 0x6200 && code <= 0x62FF ) return [ 0x6200,"9e66672f-c9c6-d91a-65be-df2be6c27398" ];
if (code >= 0x6300 && code <= 0x63FF ) return [ 0x6300,"830c24ef-011a-8f27-d484-ef6c0f12b18c" ];
if (code >= 0x6400 && code <= 0x64FF ) return [ 0x6400,"d65d0ae2-d756-340f-03e2-b8295d7e6d04" ];
if (code >= 0x6500 && code <= 0x65FF ) return [ 0x6500,"eca61eef-b7fd-3a73-36c0-88f572b46349" ];
if (code >= 0x6600 && code <= 0x66FF ) return [ 0x6600,"02787b31-92c5-cb9e-d05b-3cba58b9df0d" ];
if (code >= 0x6700 && code <= 0x67FF ) return [ 0x6700,"28bb2e4f-163a-c834-65f7-b830773482a4" ];
if (code >= 0x6800 && code <= 0x68FF ) return [ 0x6800,"dbb6d481-e81a-2e48-3497-c7930fba720b" ];
if (code >= 0x6900 && code <= 0x69FF ) return [ 0x6900,"1c5e9589-7b97-e6b6-8923-11bd5031dcb4" ];
if (code >= 0x6A00 && code <= 0x6AFF ) return [ 0x6A00,"665f5318-eead-ebd4-6a58-e6d53a13702f" ];
if (code >= 0x6B00 && code <= 0x6BFF ) return [ 0x6B00,"abcb0971-e1a5-0285-0880-b7cad5845b2c" ];
if (code >= 0x6C00 && code <= 0x6CFF ) return [ 0x6C00,"371f638e-01f7-1632-d2d0-102ed19a8006" ];
if (code >= 0x6D00 && code <= 0x6DFF ) return [ 0x6D00,"809a9672-8ded-ea9d-f072-f362ac98fccd" ];
if (code >= 0x6E00 && code <= 0x6EFF ) return [ 0x6E00,"61f54f63-4a59-17a0-2930-f942b6f42824" ];
if (code >= 0x6F00 && code <= 0x6FFF ) return [ 0x6F00,"baf3198e-f777-4020-d9b0-63b6f3e868a5" ];
if (code >= 0x7000 && code <= 0x70FF ) return [ 0x7000,"1693281c-1321-d5b5-5aff-385eda453691" ];
if (code >= 0x7100 && code <= 0x71FF ) return [ 0x7100,"91e39b18-bf47-4937-7419-86a9dade6af9" ];
if (code >= 0x7200 && code <= 0x72FF ) return [ 0x7200,"d2be1e73-8354-7bd3-3133-a61d927bb13c" ];
if (code >= 0x7300 && code <= 0x73FF ) return [ 0x7300,"a7f5b026-113e-acba-2264-d959becc7531" ];
if (code >= 0x7400 && code <= 0x74FF ) return [ 0x7400,"073b889c-db45-964c-d934-7e2325707a9d" ];
if (code >= 0x7500 && code <= 0x75FF ) return [ 0x7500,"9b74697c-c3ca-6e44-996e-d2ba89c64ad8" ];
if (code >= 0x7600 && code <= 0x76FF ) return [ 0x7600,"7688436c-82df-df43-adc3-28cdebbb2556" ];
if (code >= 0x7700 && code <= 0x77FF ) return [ 0x7700,"14526276-8964-3062-cf1c-bfdb59b498ce" ];
if (code >= 0x7800 && code <= 0x78FF ) return [ 0x7800,"3b4fd01c-082a-045e-100f-336730e2380e" ];
if (code >= 0x7900 && code <= 0x79FF ) return [ 0x7900,"0c901991-54fa-e08a-2271-f039c16849da" ];
if (code >= 0x7A00 && code <= 0x7AFF ) return [ 0x7A00,"7ddb5b32-26a2-c3ff-5784-65c09a1594ce" ];
if (code >= 0x7B00 && code <= 0x7BFF ) return [ 0x7B00,"88218859-62a3-c90a-b544-40f464052541" ];
if (code >= 0x7C00 && code <= 0x7CFF ) return [ 0x7C00,"4e5e1719-dc88-b781-7376-371a8946dc1f" ];
if (code >= 0x7D00 && code <= 0x7DFF ) return [ 0x7D00,"7b091c56-507b-c755-3863-f455894e2d2f" ];
if (code >= 0x7E00 && code <= 0x7EFF ) return [ 0x7E00,"741a5a2b-f89a-6b83-e3ee-2d4063b716d9" ];
if (code >= 0x7F00 && code <= 0x7FFF ) return [ 0x7F00,"c4e47c94-9b0b-751d-5241-9872817a1089" ];
if (code >= 0x8000 && code <= 0x80FF ) return [ 0x8000,"c59f218e-3a6b-8391-7e53-065ed3d510dc" ];
if (code >= 0x8100 && code <= 0x81FF ) return [ 0x8100,"bd8d6f6a-3e5b-e401-d184-c22213804b9f" ];
if (code >= 0x8200 && code <= 0x82FF ) return [ 0x8200,"0ee5610e-28ab-0785-09d5-09d8a189e209" ];
if (code >= 0x8300 && code <= 0x83FF ) return [ 0x8300,"6b410df1-ff8b-0160-5141-ed25b2d94563" ];
if (code >= 0x8400 && code <= 0x84FF ) return [ 0x8400,"50d03e0a-3a74-9037-1d90-e4f28403299a" ];
if (code >= 0x8500 && code <= 0x85FF ) return [ 0x8500,"34aa8689-6a37-bc5c-16ee-5f59fc23719f" ];
if (code >= 0x8600 && code <= 0x86FF ) return [ 0x8600,"9db2b52e-8620-f278-3ef7-a861d6173d01" ];
if (code >= 0x8700 && code <= 0x87FF ) return [ 0x8700,"e82235fe-a249-c22e-3c39-6e421d94275b" ];
if (code >= 0x8800 && code <= 0x88FF ) return [ 0x8800,"e53ca15b-0ff4-d163-1769-e96b4adf1129" ];
if (code >= 0x8900 && code <= 0x89FF ) return [ 0x8900,"f9dbf4ad-3d84-b1c1-c568-28769be1b9f2" ];
if (code >= 0x8A00 && code <= 0x8AFF ) return [ 0x8A00,"99923245-f5ec-f15f-150c-1e5e2c3da3f7" ];
if (code >= 0x8B00 && code <= 0x8BFF ) return [ 0x8B00,"08aadd9d-2c40-4d9f-6fec-d368f37ec8a2" ];
if (code >= 0x8C00 && code <= 0x8CFF ) return [ 0x8C00,"3b36dd24-3c51-2067-6faf-322459b5c535" ];
if (code >= 0x8D00 && code <= 0x8DFF ) return [ 0x8D00,"e7035227-df8e-95d8-1cc1-75a31cb405aa" ];
if (code >= 0x8E00 && code <= 0x8EFF ) return [ 0x8E00,"c96fd2b7-604e-df0b-ad1b-dc541f2f59bd" ];
if (code >= 0x8F00 && code <= 0x8FFF ) return [ 0x8F00,"793e7a32-494b-4e87-5cbc-28ef41e8c1b1" ];
if (code >= 0x9000 && code <= 0x90FF ) return [ 0x9000,"a92b4db1-59a0-0453-fbfd-704e3034542f" ];
if (code >= 0x9100 && code <= 0x91FF ) return [ 0x9100,"24d3a64d-c3c7-cc55-4a55-0e7708851a68" ];
if (code >= 0x9200 && code <= 0x92FF ) return [ 0x9200,"01b4ea99-db88-8b78-9b69-bc64bf0bad2d" ];
if (code >= 0x9300 && code <= 0x93FF ) return [ 0x9300,"3d1004da-3254-5268-93de-7481bad0b7d0" ];
if (code >= 0x9400 && code <= 0x94FF ) return [ 0x9400,"455da463-18f0-8efe-5b34-1297f6ad9508" ];
if (code >= 0x9500 && code <= 0x95FF ) return [ 0x9500,"ea7c440f-c0b9-7004-72b9-f553c1bc3ce4" ];
if (code >= 0x9600 && code <= 0x96FF ) return [ 0x9600,"5ad500d3-930d-4ab6-b5c7-df37864e6f8a" ];
if (code >= 0x9700 && code <= 0x97FF ) return [ 0x9700,"28c81813-be69-e2fc-7a64-3f40b2f3d773" ];
if (code >= 0x9800 && code <= 0x98FF ) return [ 0x9800,"f8faf06e-13df-074b-bdb9-d982e4b891ad" ];
if (code >= 0x9900 && code <= 0x99FF ) return [ 0x9900,"3382694b-06d6-3e5f-96fd-6a15d5e2369d" ];
if (code >= 0x9A00 && code <= 0x9AFF ) return [ 0x9A00,"315e22aa-1a14-32c3-5049-90480c9a9fb3" ];
if (code >= 0x9B00 && code <= 0x9BFF ) return [ 0x9B00,"56c904a0-fe65-40cc-0735-7a6327918e19" ];
if (code >= 0x9C00 && code <= 0x9CFF ) return [ 0x9C00,"391ca9f7-541a-e3ec-9119-d0f6f8a0fc7b" ];
if (code >= 0x9D00 && code <= 0x9DFF ) return [ 0x9D00,"1b391528-98ee-e876-dc77-362f0ee0c96d" ];
if (code >= 0x9E00 && code <= 0x9EFF ) return [ 0x9E00,"c04a0b4f-dcc4-1f22-969e-2c86d72e1f6d" ];
if (code >= 0x9F00 && code <= 0x9FFF ) return [ 0x9F00,"6fbec896-7336-5d6b-72da-539dff732801" ];
if (code >= 0xAC00 && code <= 0xACFF ) return [ 0xAC00,"a2f35a26-a593-4bcd-463a-fb64556ebec9" ];
if (code >= 0xAD00 && code <= 0xADFF ) return [ 0xAD00,"6c3ffa5b-9af2-927c-7306-425917eeff19" ];
if (code >= 0xAE00 && code <= 0xAEFF ) return [ 0xAE00,"0bc069f0-e9e6-1b00-4c31-94a9f843f2ab" ];
if (code >= 0xAF00 && code <= 0xAFFF ) return [ 0xAF00,"86bfe454-8c1a-1213-179d-86b319d08b51" ];
if (code >= 0xB000 && code <= 0xB0FF ) return [ 0xB000,"1e2e459b-cdfd-63f3-f5c9-694b4d456d32" ];
if (code >= 0xB100 && code <= 0xB1FF ) return [ 0xB100,"903d6451-9dc5-5d47-3f88-36fa87463c69" ];
if (code >= 0xB200 && code <= 0xB2FF ) return [ 0xB200,"e3f0da59-494d-1183-a7b8-2c8012949bb8" ];
if (code >= 0xB300 && code <= 0xB3FF ) return [ 0xB300,"ba1d7a5c-9ec4-aa77-6f44-15ad2b2d0d4d" ];
if (code >= 0xB400 && code <= 0xB4FF ) return [ 0xB400,"5acf2aeb-701d-4410-9b10-729adc06287b" ];
if (code >= 0xB500 && code <= 0xB5FF ) return [ 0xB500,"76192cd3-4941-c00a-b991-09b3e6c90528" ];
if (code >= 0xB600 && code <= 0xB6FF ) return [ 0xB600,"2ecca639-7b11-c1ec-8be3-95f938499435" ];
if (code >= 0xB700 && code <= 0xB7FF ) return [ 0xB700,"1ce0b11e-7f19-fe33-8af1-c434dc93b2e7" ];
if (code >= 0xB800 && code <= 0xB8FF ) return [ 0xB800,"6fb6bfe1-a738-9333-c94a-fc40a555da5b" ];
if (code >= 0xB900 && code <= 0xB9FF ) return [ 0xB900,"941446fa-88ea-e4fc-d870-f17693372257" ];
if (code >= 0xBA00 && code <= 0xBAFF ) return [ 0xBA00,"2b562560-2c3f-e781-b50b-53221fd0e404" ];
if (code >= 0xBB00 && code <= 0xBBFF ) return [ 0xBB00,"3e7d424d-1939-2acd-f08c-c1e65b700fdb" ];
if (code >= 0xBC00 && code <= 0xBCFF ) return [ 0xBC00,"0518027e-5559-fa00-3700-ed14ccaef1ca" ];
if (code >= 0xBD00 && code <= 0xBDFF ) return [ 0xBD00,"f8015da3-da74-e8ea-3683-72f827ebf004" ];
if (code >= 0xBE00 && code <= 0xBEFF ) return [ 0xBE00,"768954ea-9873-e409-c734-dd28fcb7a6a2" ];
if (code >= 0xBF00 && code <= 0xBFFF ) return [ 0xBF00,"59c0752f-887e-0a3b-b78a-36a971ff214e" ];
if (code >= 0xC000 && code <= 0xC0FF ) return [ 0xC000,"80b6c21b-14ff-77d2-ade8-6318ef4278ce" ];
if (code >= 0xC100 && code <= 0xC1FF ) return [ 0xC100,"db695a70-6868-1b60-b108-1083e507d0b4" ];
if (code >= 0xC200 && code <= 0xC2FF ) return [ 0xC200,"67aa8aec-9de1-0237-8714-86fc4cf4590c" ];
if (code >= 0xC300 && code <= 0xC3FF ) return [ 0xC300,"38b0bfd2-3933-9812-44d8-63079011e8a2" ];
if (code >= 0xC400 && code <= 0xC4FF ) return [ 0xC400,"28d521d9-ba39-4b5a-f273-86c860af5f05" ];
if (code >= 0xC500 && code <= 0xC5FF ) return [ 0xC500,"1b751879-c314-a24f-bb91-c210c1b025f3" ];
if (code >= 0xC600 && code <= 0xC6FF ) return [ 0xC600,"80ec1b34-933e-6be6-ef17-df3fac15f671" ];
if (code >= 0xC700 && code <= 0xC7FF ) return [ 0xC700,"6bbc2b27-2f65-6366-ad53-6b5de52e5ae5" ];
if (code >= 0xC800 && code <= 0xC8FF ) return [ 0xC800,"9d0a6b1f-4e95-1ed2-233a-93d011ac0da6" ];
if (code >= 0xC900 && code <= 0xC9FF ) return [ 0xC900,"9d4ac217-ae55-2f2a-cd53-96dcc39cfc43" ];
if (code >= 0xCA00 && code <= 0xCAFF ) return [ 0xCA00,"86e51d3e-1098-1690-16c1-4b9766db6035" ];
if (code >= 0xCB00 && code <= 0xCBFF ) return [ 0xCB00,"4768a8f5-e20a-509f-8318-4c02c36cbaeb" ];
if (code >= 0xCC00 && code <= 0xCCFF ) return [ 0xCC00,"2f2636c6-6eb4-bd93-2067-4daaf743fcb7" ];
if (code >= 0xCD00 && code <= 0xCDFF ) return [ 0xCD00,"0d2ef6ba-c6c5-c2ef-39f4-3d8c7623c2d6" ];
if (code >= 0xCE00 && code <= 0xCEFF ) return [ 0xCE00,"929a02df-532f-4811-f1c4-038ee8de6e89" ];
if (code >= 0xCF00 && code <= 0xCFFF ) return [ 0xCF00,"b4b44711-c955-ed5a-ec8b-e7ef4937bd53" ];
if (code >= 0xD000 && code <= 0xD0FF ) return [ 0xD000,"655e65da-8645-1c47-0f3b-8756ba61fd1e" ];
if (code >= 0xD100 && code <= 0xD1FF ) return [ 0xD100,"a42769c2-7d0e-4c6d-4a30-9ce7d0f52d2e" ];
if (code >= 0xD200 && code <= 0xD2FF ) return [ 0xD200,"3c8418f3-4ee0-18f1-8e88-83f0be2e321f" ];
if (code >= 0xD300 && code <= 0xD3FF ) return [ 0xD300,"a2c8ca5e-51c5-2350-10b3-0d328f38481d" ];
if (code >= 0xD400 && code <= 0xD4FF ) return [ 0xD400,"13dc99f5-d0a4-68d7-48d5-529c91e837a9" ];
if (code >= 0xD500 && code <= 0xD5FF ) return [ 0xD500,"161a6e1e-045c-01e5-5646-abc1408d1bb1" ];
if (code >= 0xD600 && code <= 0xD6FF ) return [ 0xD600,"2046a6d9-6cf6-967d-845d-1a1d7e74a474" ];
if (code >= 0xD700 && code <= 0xD7FF ) return [ 0xD700,"4fffe980-dcb4-cfc4-e579-f26acc5e1f8b" ];
if (code >= 0xF900 && code <= 0xF9FF ) return [ 0xF900,"9dba861a-fbc2-4ece-9225-dcf175763d8c" ];
if (code >= 0xFA00 && code <= 0xFAFF ) return [ 0xFA00,"25cca732-7a93-2df4-2a46-3e80df683d46" ];
if (code >= 0xFB00 && code <= 0xFBFF ) return [ 0xFB00,"386eb81a-55c1-40a1-d73f-83017304cf4c" ];
if (code >= 0xFC00 && code <= 0xFCFF ) return [ 0xFC00,"3621b01e-aa6c-7ef1-f6bb-e3ec51ce12bb" ];
if (code >= 0xFD00 && code <= 0xFDFF ) return [ 0xFD00,"e4516675-6f75-9eb9-e8dc-363d85e2e4ab" ];
if (code >= 0xFE00 && code <= 0xFEFF ) return [ 0xFE00,"1c04484c-7c21-843d-b04b-606f793cf299" ];
if (code >= 0xFF00 && code <= 0xFFFF ) return [ 0xFF00,"4f5a8251-1d5b-d235-1181-9f272320807c" ];
return [32,"d9d67c71-66f1-3cc7-cc07-2b7f353b2ae7"];
}

//
// Show one character.
// Every texture contains 32 x 32 characters.
//
//


list getPoint(integer c,integer i){
float scale=1/16.0;
list set=selectTexture(c);
integer base =llList2Integer(set,0);
tmpTexture=llList2String(set,1);
integer face=llList2Integer(faces,i);
c-=base;
float fShift=llList2Float(faceShift,face);
integer cx=c%16;
integer cy=c/16;
float xOffset=fShift+ cx*scale-0.5+scale/2;
float yOffset=(float)cy*scale-0.5+scale/2;
float pscale=llList2Float(faceScale,i);
return [PRIM_COLOR,face,myColor,1.0 ,PRIM_TEXTURE, face,tmpTexture,<tScale*pscale,tScale,1>,<xOffset,-yOffset,0>,0];
}


//
// Show up to 5 unicode characters.
//
//
showText(string s)
{
integer i;
integer len;
len = llStringLength(s);
string c;
integer uc;
list data=[];
list param;
for (i=0; i<5; i++){
if (i<len){
c=llGetSubString(s,i,i);
}else{
c=" ";
}
uc=getUnicodeChar(c);
//showCode(uc,llList2Integer(faces,i));
data+=getPoint(uc,i);
}
llSetPrimitiveParams(data);
myText=s; // store for redraw.
}
setColor(string colStr)
{
myColor = (vector)colStr;
showText(myText);
}
default
{
state_entry()
{
integer i;
integer face;
float scale;
for (i=0; i<5; i++){
face=llList2Integer(faces,i);
scale=llList2Float(faceScale,i);
llScaleTexture(tScale*scale,tScale,face);
}
showText("①②③④⑤");

}

link_message(integer sender_num, integer num, string str, key id)
{
if (num ==SLAVE_DISPLAY){
showText(str);
}else if (num == SLAVE_COLOR){
setColor(str);
}
}
}



しかし、こんなにダラダラ条件判断並べるのはどうなんだろう。リストに入れてもっとスマートに選択させた方がいいかしら。でも結局メモリ上にリテラル置かれてるんだし、コードに書いて、リストにも収納したらメモリ余計に食うのではないかなあ。

このコードはMonoでのみ実験しています。Monoではスクリプトは同じものが複数あってもシミュレータの中で一つしか読み込まれず、みんなで共用され、効率的に動くそうですが、そのためにはコンパイルされたコードが同じアセットIDを持っていなければなりません。このような、五文字表示プリムをいくつも並べて文章を表示するような場合、それぞれをコンパイルしなおしてはいけません。コンパイル済みスクリプトを自分のインベントリに入れて、それを個々のプリムにコピーするとか、コンパイル済みのプリムをShift移動でコピーして並べれば同じアセットIDになるそうです。テクスチャ読み込みの関係で、コードが結構大きいので、このへんは気をつけた方がいいでしょう。


同じカテゴリー(LSL)の記事画像
追跡型チップジャーは重いか
電光掲示板とかホワイトボードとか
UNOCODEなんでも表示プリム
ラジオ:曲名の日本語表示
ラジオ作りにハマる
同じカテゴリー(LSL)の記事
 サーバのバグっぽい (2009-03-31 19:53)
 追跡型チップジャーは重いか (2009-01-20 18:03)
 文字コードを取得する方法。 (2008-11-21 15:25)
 電光掲示板とかホワイトボードとか (2008-11-20 23:47)
 UNOCODEなんでも表示プリム (2008-11-17 19:10)
 黒板のスクリプトって… (2008-11-16 14:35)

Posted by Hitomi Magne at 14:46│Comments(1)LSL
この記事へのコメント
文字テクスチャーを、表示面以外に貼って色を黒にして見えなくしておきます。
システム上は常に表示されている状態ですから、常にキャッシュにあり、一度読まれれば非常に速く表示されます。
ご参考まで!
Posted by isoletteisolette at 2008年12月08日 15:37
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。