構文 
class 
- public,protected,privateは無し。
- 継承もなし。
- コンストラクタ,デストラクタは有り。
- operatorは可能?(未確認)
import 
他のmoduleの関数(Typeは不可)を自分のmodule内で使うための機能。
なので,一工夫したほうがいいかも。
その一例。
実装クラス(L_MathVector3)はIObjectを必ず継承する。
外部に公開する関数(F_MathVector3_*)はクラス外に宣言し,引数の先頭に必ずIObjectをとる。
他のモジュールは,公開されたその関数を通してアクセスするか,そのラッパークラス(MathVector3)を使ってアクセスする。
- C++コード
-
1
2
|
| engine->RegisterInterface("IObject");
|
- Vector3_Local.as
- こいつは,mathモジュールでのみコンパイルされる。
クラスの内部実装を記述している。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
-
|
|
|
|
|
|
-
|
!
|
|
-
|
!
!
-
|
|
!
-
|
!
-
|
!
| class L_MathVector3 : IObject
{
L_MathVector3(){ }
float mX;
float mY;
float mZ;
float& x()
{
return mX;
}
void normalize()
{
}
};
IObject@ F_MathVector3_Constructor()
{
MathVector3 obj;
return @obj;
}
float& F_MathVector3_x( const IObject@ in obj )
{
return cast<L_Vector3>(obj).mX;
}
void F_MathVector3_normalize( IObject@ obj )
{
cast<L_Vector3>(obj).normalize();
}
|
- Vector3.as
- こいつは,他のmoduleでコンパイルされる。
クラスの内部実装は書かず,内部実装が書かれている関数を呼ぶだけに留める。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
-
|
-
|
!
|
|
|
-
|
!
|
|
-
|
!
!
| import IObject@ F_MathVector3_Constructor() from "math";
import float& F_MathVector3_x( const IObject& in ) from "math";
import void F_MathVector3_normalize( const IObject& in ) from "math";
class MathVector3
{
MathVector3()
{
mObj = F_MathVector3_Constructor();
}
IObject@ mObj;
float& x()
{
return F_MathVector3_x( mObj );
}
void normalize()
{
F_MathVector3_normalize( mObj );
}
};
|