次回作(RPGの予定)の実装練習も兼ねてLuaを使っています。
Luaを使う前はC++、DXライブラリだけで作っていたので、
今は既存C++コードをLuaに置き換える作業を行っています。
ちなみに、「スクリプト言語による効率的ゲーム開発 LuaとC/C++連携プログラミング」という本と、
「Programming in Lua プログラミング言語Lua公式解説書」という本を参考にしています。
そこで、ぶち当たった問題なのですが、以下のようなLuaによる置き換え前のC++プログラムがあり、
クラスSeqTitleのプライベートメンバ変数mSelectedをLua側スクリプトで読み書きしたいと思っています。
※以下のクラスを丸ごとLuaスクリプトに置き換えるのではなく、
processInputメソッドの中身をLuaスクリプト内に記述したLua関数(processInputの処理を行う)を呼ぶコードに
置き換えようと思っています。
その際に、Luaスクリプト内に用意したprocessInput代替関数から、メンバ変数mSelectedを参照したり、
書き換えたりしたいのですが、どうしたらよいでしょうか。
本の場合、セッター、ゲッター関数を用意し、それをLua側に公開していたのですが、
その本では変数がグローバル変数だったので、今回のようなメンバ変数の場合は適用できないと考えました。
実際、そのメンバ変数を参照できるのはクラス内だけなので、クラス内にセッター、ゲッター関数を用意しなければ
ならないが、それだとLua側にlua_register関数などで公開できない。
何か良い方法はないでしょうか。よろしくお願いします。
class SeqTitle
{
private:
int mSelected = 0;
double mElapsedTime; //seconds
SeqChangeData processInput()
{
InputManager ipm = InputManager::instance();
//マウス処理
//ボタンにマウスが乗った状態で上下キー押しても移動しないのはどうにかしたい(後で)→実装済み
//ボタン上でクリックされた場合フラグを立てる
bool clickFlag = false;
int mx, my;
GetMousePoint(&mx, &my);
for (int i = 0; i < 3; i++)
{
if (gConstants[L"HAJIMEKARA_IMAGE_X"] <= mx && mx <= gConstants[L"HAJIMEKARA_IMAGE_X"] + 150
&& gConstants[L"HAJIMEKARA_IMAGE_Y"] + (gConstants[L"HAJIMEKARA_IMAGE_INTERVAL_Y"] * i) <= my
&& my <= gConstants[L"HAJIMEKARA_IMAGE_Y"] + (gConstants[L"HAJIMEKARA_IMAGE_INTERVAL_Y"] * i) + 35)
{
mSelected = i;
if (ipm.hitMouseKey(MOUSE_INPUT_LEFT))
{
clickFlag = true;
}
}
}
以下略