Sign in to follow this  
c_fried_rice

"Use of Unregistered Class" + Luabind

Recommended Posts

c_fried_rice    163

Hey guys, 

 

I'm trying to convert my game engine's use of luabridge to luabind, and am running into a fairly large issue:

 

I get this error upon trying to transition to the "SongSelect" state:

 

 

std::runtime_error: 'Trying to use unregistered class'

 

Here's some of the C++ code calling the lua script:

SongSelect::Instance()->register_lua(L);

int error = luaL_loadfile(L, "Assets/Scripts/States/SongSelect.lua");

if (error)
{
	std::cout << lua_tostring(L, -1) << std::endl;
}

m_pGamestateManager->getStateMachine()->changeState(SongSelect::Instance());

if (lua_pcall(L, 0, 0, 0) != 0)
{
	std::cout<< " Error (in SM transition) "<< lua_tostring(L, -1) <<std::endl;
} 

Here's the registration of the Luabind Module:

void SongSelect::register_lua(lua_State* L)
{
	if (L != NULL)
	{
		luabind::module(L) [
			luabind::class_<SongSelect>("SongSelect")
			.scope[
					luabind::def("Instance", &SongSelect::Instance)
			]
				.def("init", &SongSelect::stateInit)
				.def("initSongs", &SongSelect::initSongs)
				.def("initAlbumArt", &SongSelect::initAlbumArt)
				.def_readwrite("bg", &SongSelect::bg)
				.def_readwrite("name", &SongSelect::name)
				.def_readwrite("font", &SongSelect::font)
				.def_readwrite("label", &SongSelect::label)
				.def_readwrite("artist", &SongSelect::artist_i)
				.def_readwrite("album_i", &SongSelect::album_i)
				.def_readwrite("title", &SongSelect::title_i)
				.def_readwrite("year", &SongSelect::year_i)
				.def_readwrite("genre", &SongSelect::genre_i)
				.def_readwrite("right", &SongSelect::right_i)
				.def_readwrite("left", &SongSelect::left_i)
				.def_readwrite("songs", &SongSelect::songs)
		];
	}
}
void Game::register_lua(lua_State* L)
{
	if (L != NULL)
	{
		luabind::module(L) [
				luabind::class_<Game>("Game")
					.scope[
						luabind::def("Instance", &Game::Instance)
					]
					.def_readwrite("title", &Game::title)
					.def_readwrite("x_pos", &Game::x)
					.def_readwrite("y_pos", &Game::y)
					.def_readwrite("width", &Game::width)
					.def_readwrite("height", &Game::height)
					.def_readwrite("fullscreen", &Game::fullscreen)
					.def_readwrite("font", &Game::font)
					.def_readwrite("label", &Game::label)
					.def("init", &Game::initialize),
				luabind::class_<Track>("Track")
					.def(luabind::constructor<>())
					.def_readwrite("music", &Track::music)
					.def_readwrite("midi", &Track::midi)
					.def_readwrite("title", &Track::title)
					.def_readwrite("artist", &Track::artist)
					.def_readwrite("genre", &Track::genre)
					.def_readwrite("album", &Track::album)
					.def_readwrite("album_art", &Track::album_art)
					.def_readwrite("year", &Track::year)
					.def_readwrite("bpm", &Track::bpm)
					.def_readwrite("l_track", &Track::left_track)
					.def_readwrite("r_track", &Track::right_track),
				luabind::class_<GameObject>("GameObject")
					.def(luabind::constructor<>())
					.def_readwrite("row", &GameObject::m_row)
					.def_readwrite("frame", &GameObject::m_frame)
					.def_readwrite("rows", &GameObject::m_rows)
					.def_readwrite("frames", &GameObject::m_frames)
					.def_readwrite("x", &GameObject::m_x)
					.def_readwrite("y", &GameObject::m_y)
					.def_readwrite("width", &GameObject::m_width)
					.def_readwrite("height", &GameObject::m_height)
					.def_readwrite("filename", &GameObject::m_filename)
					.def_readwrite("texture", &GameObject::m_texture)
					.def_readwrite("speed", &GameObject::m_speed)
					.def("init", &GameObject::init),
				luabind::class_<FXObject, GameObject>("FXObject")
					.def(luabind::constructor<>())
					.def_readwrite("x2", &FXObject::m_x2)
					.def_readwrite("y2", &FXObject::m_y2)
					.def_readwrite("xc", &FXObject::m_xc)
					.def_readwrite("yc", &FXObject::m_yc)
					.def_readwrite("scale", &FXObject::m_sscale)
					.def_readwrite("end_scale", &FXObject::m_escale)
					.def_readwrite("start_alpha", &FXObject::m_startalpha)
					.def_readwrite("start_alpha_f", &FXObject::m_startalpha_f)
					.def_readwrite("alpha", &FXObject::m_alpha)
					.def_readwrite("end_alpha", &FXObject::m_endalpha),
				luabind::class_<UIObject, GameObject>("UIObject")
					.def(luabind::constructor<>()),
				luabind::class_<UIAnimator, UIObject>("UIAnimator")
					.def(luabind::constructor<>()),
				luabind::class_<UIButton, UIObject>("UIButton")
					.def(luabind::constructor<>()),
				luabind::class_<StaticUI, UIObject>("StaticUI")
					.def(luabind::constructor<>())
					.def_readwrite("flip", &StaticUI::m_flip)
					.def_readwrite("alpha", &StaticUI::m_alpha)
					.def("init", &StaticUI::init)
		];
	}
}

Here's the lua script where the error is occurring:

-- SongSelect Properties
ssInstance = SongSelect.Instance();

ssInstance.name = "Song Select";
ssInstance.bg = "Assets/Art/Song Select/bg.png";

-- Artist Icon
ssInstance.artist = StaticUI();
ssInstance.artist.filename = "Assets/Art/Other/placeholder.png";
ssInstance.artist.texture = "Artist Icon";
ssInstance.artist.frames = 1
ssInstance.artist.rows = 1
ssInstance.artist.frame = 1
ssInstance.artist.row = 1
ssInstance.artist.x = 15;
ssInstance.artist.y = 415;
ssInstance.artist.width = 35
ssInstance.artist.height = 35
ssInstance.artist.speed = 1;
ssInstance.artist.flip = false;
ssInstance.artist.alpha = 255;

ssInstance.artist:init(ssInstance.artist.x, ssInstance.artist.y,
  ssInstance.artist.width, ssInstance.artist.height,
  ssInstance.artist.filename, ssInstance.artist.texture, ssInstance.artist.flip);

-- Album Icon
ssInstance.album_i = StaticUI();
ssInstance.album_i.filename = "Assets/Art/Other/placeholder.png";
ssInstance.album_i.texture = "Album Icon";
ssInstance.album_i.frames = 1
ssInstance.album_i.rows = 1
ssInstance.album_i.frame = 1
ssInstance.album_i.row = 1
ssInstance.album_i.x = 15;
ssInstance.album_i.y = 450;
ssInstance.album_i.width = 35
ssInstance.album_i.height = 35
ssInstance.album_i.speed = 1;
ssInstance.album_i.flip = false;
ssInstance.album_i.alpha = 255;

ssInstance.album_i:init(ssInstance.album_i.x, ssInstance.album_i.y,
  ssInstance.album_i.width, ssInstance.album_i.height,
  ssInstance.album_i.filename, ssInstance.album_i.texture, ssInstance.album_i.flip);

-- Title Icon
ssInstance.title = StaticUI();
ssInstance.title.filename = "Assets/Art/Other/placeholder.png";
ssInstance.title.texture = "Title Icon";
ssInstance.title.frames = 1
ssInstance.title.rows = 1
ssInstance.title.frame = 1
ssInstance.title.row = 1
ssInstance.title.x = 15;
ssInstance.title.y = 485;
ssInstance.title.width = 35
ssInstance.title.height = 35
ssInstance.title.speed = 1;
ssInstance.title.flip = false;
ssInstance.title.alpha = 255;


ssInstance.title:init(ssInstance.title.x, ssInstance.title.y,
  ssInstance.title.width, ssInstance.title.height,
  ssInstance.title.filename, ssInstance.title.texture, ssInstance.title.flip);


-- Year Icon
ssInstance.year = StaticUI();
ssInstance.year.filename = "Assets/Art/Other/placeholder.png";
ssInstance.year.texture = "Year Icon";
ssInstance.year.frames = 1
ssInstance.year.rows = 1
ssInstance.year.frame = 1
ssInstance.year.row = 1
ssInstance.year.x = 15;
ssInstance.year.y = 520;
ssInstance.year.width = 35
ssInstance.year.height = 35
ssInstance.year.speed = 1;
ssInstance.year.flip = false;
ssInstance.year.alpha = 255;


ssInstance.year:init(ssInstance.year.x, ssInstance.year.y,
  ssInstance.year.width, ssInstance.year.height,
  ssInstance.year.filename, ssInstance.year.texture, ssInstance.year.flip);


-- Genre Icon
ssInstance.genre = StaticUI();
ssInstance.genre.filename = "Assets/Art/Other/placeholder.png";
ssInstance.genre.texture = "Genre Icon";
ssInstance.genre.frames = 1
ssInstance.genre.rows = 1
ssInstance.genre.frame = 1
ssInstance.genre.row = 1
ssInstance.genre.x = 15;
ssInstance.genre.y = 555;
ssInstance.genre.width = 35
ssInstance.genre.height = 35
ssInstance.genre.speed = 1;
ssInstance.genre.flip = false;
ssInstance.genre.alpha = 255;


ssInstance.genre:init(ssInstance.genre.x, ssInstance.genre.y,
  ssInstance.genre.width, ssInstance.genre.height,
  ssInstance.genre.filename, ssInstance.genre.texture, ssInstance.genre.flip);

-- Right Track Icon
ssInstance.right = StaticUI();
ssInstance.right.filename = "Assets/Art/Other/placeholder.png";
ssInstance.right.texture = "Right Icon";
ssInstance.right.frames = 1
ssInstance.right.rows = 1
ssInstance.right.frame = 1
ssInstance.right.row = 1
ssInstance.right.x = 15;
ssInstance.right.y = 590;
ssInstance.right.width = 35
ssInstance.right.height = 35
ssInstance.right.speed = 1;
ssInstance.right.flip = false;
ssInstance.right.alpha = 255;


ssInstance.right:init(ssInstance.right.x, ssInstance.right.y,
  ssInstance.right.width, ssInstance.right.height,
  ssInstance.right.filename, ssInstance.right.texture, ssInstance.right.flip);


-- Left Track Icon
ssInstance.left = StaticUI();
ssInstance.left.filename = "Assets/Art/Other/placeholder.png";
ssInstance.left.texture = "Left Icon";
ssInstance.left.frames = 1
ssInstance.left.rows = 1
ssInstance.left.frame = 1
ssInstance.left.row = 1
ssInstance.left.x = 15;
ssInstance.left.y = 625;
ssInstance.left.width = 35
ssInstance.left.height = 35
ssInstance.left.speed = 1;
ssInstance.left.flip = false;
ssInstance.left.alpha = 255;


ssInstance.left:init(ssInstance.left.x, ssInstance.left.y,
  ssInstance.left.width, ssInstance.left.height,
  ssInstance.left.filename, ssInstance.left.texture, ssInstance.left.flip);

-- FONTS
ssInstance.font = "Assets/Fonts/ostrich-bold.ttf";
ssInstance.label = "ostrich16";

-- Init Songs
ssInstance:initSongs();

ssInstance:initAlbumArt(ssInstance.songs);

ssInstance:init();

Can anyone tell me what I'm doing wrong?

 

Thanks!

Share this post


Link to post
Share on other sites
c_fried_rice    163

Apologies for the double post, but it appears the problem lies in the use of std::vector<Track>. However I can't seem to properly register a std::vector<Track> in Luabind. 

 

I tried following the example in the luabind documentation (which admittedly is prettttty old at this stage) located here.

 

Anyone got any suggestions?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this