Lua

lua.txtをフォーマットしました。

## - Luaスクリプトについて -

スクリプト制御、スクリプトファイル(\*.anm,\*.obj,\*.scn,\*.cam)、テキストのスクリプト制御文字で利用可能なスクリプトにはLua言語が使用出来ます。また幾つかの変数と関数が拡張されています。

## - 変数 -

対象オブジェクトの情報が以下の変数に入ります。

```
obj.ox : 基準座標からの相対座標X
obj.oy : 基準座標からの相対座標Y
obj.oz : 基準座標からの相対座標Z
obj.rx : X軸回転角度(360.0で一回転)
obj.ry : Y軸回転角度(360.0で一回転)
obj.rz : Z軸回転角度(360.0で一回転)
obj.cx : 中心の相対座標X
obj.cy : 中心の相対座標Y
obj.cz : 中心の相対座標Z
obj.zoom : 拡大率(1.0=等倍)
obj.alpha : 不透明度(0.0～1.0/0.0=透明/1.0=不透明)
obj.aspect : アスペクト比(-1.0～1.0/プラス=横縮小/マイナス縦縮小)
obj.x : 表示基準座標X (ReadOnly)
obj.y : 表示基準座標Y (ReadOnly)
obj.z : 表示基準座標Z (ReadOnly)
obj.w : 画像サイズW (ReadOnly)
obj.h : 画像サイズH (ReadOnly)
obj.screen_w : スクリーンサイズW (ReadOnly)
obj.screen_h : スクリーンサイズH (ReadOnly)
obj.framerate : フレームレート (ReadOnly)
obj.frame : オブジェクト基準での現在のフレーム番号 (ReadOnly)
obj.time : オブジェクト基準での現在の時間(秒) (ReadOnly)
obj.totalframe : オブジェクトの総フレーム数 (ReadOnly)
obj.totaltime : オブジェクトの総時間(秒) (ReadOnly)
obj.layer : オブジェクトが配置されているレイヤー (ReadOnly)
obj.index : 複数オブジェクト時の番号 (ReadOnly) ※個別オブジェクト用
obj.num : 複数オブジェクト時の数(1=単体オブジェクト/0=不定) (ReadOnly) ※個別オブジェクト用
obj.track0 : トラックバー0の値 (ReadOnly) ※スクリプトファイル内のみ使用可
obj.track1 : トラックバー1の値 (ReadOnly) ※スクリプトファイル内のみ使用可
obj.track2 : トラックバー2の値 (ReadOnly) ※スクリプトファイル内のみ使用可
obj.track3 : トラックバー3の値 (ReadOnly) ※スクリプトファイル内のみ使用可
obj.check0 : チェックボックスの値 (ReadOnly) ※スクリプトファイル内のみ使用可

```

## - 注意点 -

* モーションブラー等に対応する為にはobj.frameは使わずobj.timeを使うようにしてください。
* pixel系の関数でオブジェクト全体をドット処理するとかなり重いのであまり実用向きではありません。
* スクリプトはSJISの2バイト文字の0x5cをエスケープ処理してから実行されます。
* スクリプト制御、テキストオブジェクト内のスクリプトのUnicode文字はUnicodeタグ(&#????;)に変換されます。
* 扱えるスクリプトの最大サイズは約32KBです。それ以上の場合はdofile()等を活用してください。
* スクリプトからスクリプトを呼び出した場合は上手く動作しない場合があります。
* LuaJITではLua5.0の可変引数(arg変数)が利用できないようです。対応するには5.1の可変引数で実装する必要があります。(0.93-)

## - 使用例 -

### ○テキスト内でスクリプトを使う例

以下のテキストでオブジェクト時間のタイムカウンタが表示します。

```
現在のオブジェクトの時間=<?mes(string.format("%02d:%02d.%02d",obj.time/60,obj.time%60,(obj.time*100)%100))?>

```

### ○オブジェクトの座標や角度を時間経過で変化させる例

以下のスクリプトで時間と共に右方向に移動しながら右回転します。

```
obj.ox = obj.ox + obj.time\*10
obj.rz = obj.rz + obj.time\*360

```

### ○オブジェクトにフィルタ効果をかける例

以下のスクリプトで時間と共に明るくなったり暗くなったりします。

```
i = math.cos(obj.time\*math.pi\*2)\*50
obj.effect("色調補正","明るさ",100+i)

```

### ○オブジェクトを複数描画させる例

以下のスクリプトでオブジェクトを円状に10個描画します。

```
n = 10
l = obj.w\*2
for i=0,n do
 r = 360\*i/n
 x = math.sin(r\*math.pi/180)\*l
 y = -math.cos(r\*math.pi/180)\*l
 obj.draw(x,y,0,1,1,0,0,r)
end

```

### ○スクリプトファイル内でトラックバー、チェックボックスの値を使う例

スクリプトファイル(\*.anm,\*.obj,\*.scn,\*.cam)の先頭で`'--track0:名前,最小値,最大値,デフォルト値,移動単位'`のように指定するとトラックバーが有効になります。移動単位は'1','0.1','0.01'か省略が出来ます。最大4個のトラックバーが使用できます。

※シーンチェンジでは最大2個になります。
`'--check0:名前,デフォルト値(0か1)'`のように指定するとチェックボックスが有効になります。

```
--track0:X速度,-10,10,0
--track1:Y速度,-10,10,0,1
--check0:重力,0
obj.ox = obj.ox + obj.track0\*obj.time
obj.oy = obj.oy + obj.track1\*obj.time
if( obj.check0 ) then
 obj.oy = obj.oy + obj.time\*obj.time
end

```

### ○スクリプトファイル内でパラメータ設定を使う例

スクリプトファイル(\*.anm,\*.obj,\*.scn,\*.cam)の先頭で`'--param:デフォルト設定'`のように指定するとパラメータ設定の項目が有効になります。最大255バイトまで。

※--color,--file,--dialogと同時に指定出来ません。

```
--param:dx=10;dy=20;
obj.ox = obj.ox + dx\*obj.time
obj.oy = obj.oy + dy\*obj.time

```

### ○スクリプトファイル内で色選択ダイアログを使う例

スクリプトファイル(\*.anm,\*.obj,\*.scn,\*.cam)の先頭で`'--color:デフォルト設定'`のように指定すると色選択ダイアログの項目が有効になります。指定した色は変数(color)に格納されます

※--color,--file,--dialogと同時に指定出来ません。

```
--color:0xffffff
obj.load("figure","四角形",color,100)

```

### ○スクリプトファイル内でファイル選択ダイアログを使う例

スクリプトファイル(\*.anm,\*.obj,\*.scn,\*.cam)の先頭で`'--file:'`のように指定するとファイル選択ダイアログの項目が有効になります。指定したファイルは変数(file)に格納されます

※--color,--file,--dialogと同時に指定出来ません。

```
--file:
obj.load(file)

```

### ○スクリプトファイル内で値入力ダイアログを使う例

スクリプトファイル(\*.anm,\*.obj,\*.scn,\*.cam)の先頭で`'--dialog:表示名,変数名=初期値;'`のように指定すると値入力ダイアログの項目が有効になります。最大16項目まで指定出来ます。表示名の最後を`'/chk','/col','/fig'`にするとチェックボックスや色や図形の選択ボタンが追加されます。チェックボックスと選択ボタンはそれぞれ最大4項目まで指定出来ます。

※--color,--file,--dialogと同時に指定出来ません。

```
--dialog:Xオフセット,x=100;Yオフセット,y=100;
obj.ox = obj.ox + x
obj.oy = obj.oy + y

--dialog:サイズ,size=100;色/col,col=0xffffff;図形/fig,fig="四角形"
obj.load("figure",fig,col,size)

```

### ○アニメーション効果、カスタムオブジェクトを1ファイルで複数登録する例

スクリプトファイル(\*.anm,\*.obj,\*.scn,\*.cam)のファイル名の先頭を'@'にして以下のように各スクリプトの先頭に`'@名前'`のように定義すると複数のスクリプトを纏めて定義することが出来ます。

※exedit.anm,exedit.objのスクリプトもこの形式になっています。
#### ◇複数登録する場合のファイル内容 [@複数登録例.anm]

```
@sample1
--track0:速度,-10,10,10
obj.ox = obj.ox + obj.track0\*obj.time
@sample2
--track0:速度,-10,10,10
obj.oy = obj.oy + obj.track0\*obj.time

```

#### ◇単独登録する場合のファイル内容 [単独登録例.anm]

```
--track0:速度,-10,10,10
obj.ox = obj.ox + obj.track0\*obj.time

```

### ○シーンチェンジスクリプトの例

以下のスクリプトで時間と共にクロスフェードします。シーンチェンジスクリプトではフレームバッファにシーンチェンジ後の画像、オブジェクトにシーンチェンジ前の画像が入っていてどちらを表示するかの割合をobj.getvalue("scenechange")で取得して処理します。

※0ならオブジェクト、1ならフレームバッファ側になります。

```
a = 1-obj.getvalue("scenechange")
obj.draw(0,0,0,1,a)

```

#### ◇ダイアログの変数を使う場合

```
--dialog:座標,pos={}
num = 3
obj.setanchor("pos",num,"loop");
for i=0,num-1 do
 x = pos[i\*2+1]
 y = pos[i\*2+2]
end

```

※3D座標の場合はXYZの3座標ずつ配列に入ります。
※pos={}は初期値を入れておくことも出来ます。
#### ◇トラックバーを使う場合

```
--track0:X,-1000,1000,0
--track1:Y,-1000,1000,0
--track2:Z,-1000,1000,0
num = obj.setanchor("track",0,"xyz","line");
for i=0,num-1 do
 x = obj.getvalue(0,0,i)
 y = obj.getvalue(1,0,i)
 z = obj.getvalue(2,0,i)
end

```

#### ◇複数回のobj.setanchor()を使う場合

```
--dialog:座標1,pos1={};座標2,pos2={}
obj.setanchor("pos1",4,"loop","color",RGB(0,255,255));
obj.setanchor("pos2",2,"line","color",RGB(0,255,0));

```

※同じダイアログの変数を複数で使うことは出来ません。
### ○トラックバー変化方法スクリプトの例

以下のスクリプトでトラックバーの値を開始点から終了点まで等速で変化させます。トラックバー変化方法スクリプトでは通常のオブジェクト関係の変数や関数は使用出来ません。スクリプトファイル(\*.tra)の先頭で`'--twopoint'`のように指定すると中間点を無視する変化方法になります。

`'--param:初期値(整数)'`のように指定するとトラックバー設定が出来るようになります。
`'--speed:加速初期値(0/1),減速初期値(0/1)'`のように指定すると加減速の設定が出来るようになります。

```
index,ratio = math.modf(obj.getpoint("index"))
st = obj.getpoint(index);
ed = obj.getpoint(index+1);
return st + (ed-st)\*ratio;

```

## - Luaのバイナリについて(-0.92) -

付属のlua51.dllはLuaの本家サイトにあるバージョン5.1.4に5.1.4-2のパッチを当ててビルドしたものです。

## - Lua/LuaJITのバイナリについて(0.93-) -

付属のlua51.dllはLuaの本家サイトにあるバージョン5.1.4に5.1.4-2のパッチを当ててビルドしたものです。

付属のlua51jit.dllはLuaJITのサイトにあるバージョン2.0.5をビルドしたものです。

## - Luaのライセンス -

Lua License

Lua is licensed under the terms of the MIT license reproduced below. This means that Lua is free software and can be used for both academic and commercial purposes at absolutely no cost.

For details and rationale, see http://www.lua.org/license.html .

Copyright (C) 1994-2008 Lua.org, PUC-Rio.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

## - LuaJITのライセンス -

LuaJIT -- a Just-In-Time Compiler for Lua. http://luajit.org/

Copyright (C) 2005-2017 Mike Pall. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

[ MIT license: http://www.opensource.org/licenses/mit-license.php ]

[ LuaJIT includes code from Lua 5.1/5.2, which has this license statement: ]

Copyright (C) 1994-2012 Lua.org, PUC-Rio.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

[ LuaJIT includes code from dlmalloc, which has this license statement: ]

This is a version (aka dlmalloc) of malloc/free/realloc written by Doug Lea and released to the public domain, as explained at http://creativecommons.org/licenses/publicdomain