AnnouncerManager gets Lua bindings, and now exists at ANNOUNCER.

New bindings:
ANNOUNCER:DoesAnnouncerExist(sAnnouncer) - returns a bool
ANNOUNCER:GetAnnouncerNames() - returns a table of strings
ANNOUNCER:GetCurrentAnnouncer() - returns a string
ANNOUNCER:SetCurrentAnnouncer(sAnnouncer) - sets the new announcer
This commit is contained in:
AJ Kelly
2010-05-15 14:19:42 -05:00
parent 199ed3d130
commit a01a7c4240
2 changed files with 69 additions and 1 deletions
+61 -1
View File
@@ -10,10 +10,28 @@ AnnouncerManager* ANNOUNCER = NULL; // global object accessable from anywhere in
const RString EMPTY_ANNOUNCER_NAME = "Empty";
const RString ANNOUNCERS_DIR = "Announcers/";
AnnouncerManager::AnnouncerManager()
{
// Register with Lua.
{
Lua *L = LUA->Get();
lua_pushstring( L, "ANNOUNCER" );
this->PushSelf( L );
lua_settable( L, LUA_GLOBALSINDEX );
LUA->Release( L );
}
}
AnnouncerManager::~AnnouncerManager()
{
// Unregister with Lua.
LUA->UnsetGlobal( "ANNOUNCER" );
}
void AnnouncerManager::GetAnnouncerNames( vector<RString>& AddTo )
{
GetDirListing( ANNOUNCERS_DIR+"*", AddTo, true );
StripCvsAndSvn( AddTo );
// strip out the empty announcer folder
@@ -144,6 +162,48 @@ void AnnouncerManager::NextAnnouncer()
}
}
}
// lua start
#include "LuaBinding.h"
class LunaAnnouncerManager: public Luna<AnnouncerManager>
{
public:
static int DoesAnnouncerExist( T* p, lua_State *L ) { lua_pushboolean(L, p->DoesAnnouncerExist( SArg(1) )); return 1; }
static int GetAnnouncerNames( T* p, lua_State *L )
{
vector<RString> vAnnouncers;
p->GetAnnouncerNames( vAnnouncers );
LuaHelpers::CreateTableFromArray(vAnnouncers, L);
return 1;
}
static int GetCurrentAnnouncer( T* p, lua_State *L )
{
RString s = p->GetCurAnnouncerName();
if( s.empty() )
return 0;
lua_pushstring(L, s );
return 1;
}
static int SetCurrentAnnouncer( T* p, lua_State *L )
{
RString s = SArg(1);
// only bother switching if the announcer exists. -aj
if(p->DoesAnnouncerExist(s))
p->SwitchAnnouncer(s);
return 0;
}
LunaAnnouncerManager()
{
ADD_METHOD( DoesAnnouncerExist );
ADD_METHOD( GetAnnouncerNames );
ADD_METHOD( GetCurrentAnnouncer );
ADD_METHOD( SetCurrentAnnouncer );
}
};
LUA_REGISTER_CLASS( AnnouncerManager )
// lua end
/*
* (c) 2001-2004 Chris Danford
+8
View File
@@ -1,9 +1,14 @@
#ifndef ANNOUNCER_MANAGER_H
#define ANNOUNCER_MANAGER_H
#include "RageTypes.h"
class AnnouncerManager
{
public:
AnnouncerManager();
~AnnouncerManager();
void GetAnnouncerNames( vector<RString>& AddTo );
bool DoesAnnouncerExist( RString sAnnouncerName );
void SwitchAnnouncer( RString sNewAnnouncerName );
@@ -13,6 +18,9 @@ public:
RString GetPathTo( RString sFolderName );
bool HasSoundsFor( RString sFolderName );
// Lua
void PushSelf( lua_State *L );
protected:
static RString GetAnnouncerDirFromName( RString sAnnouncerName );
RString GetPathTo( RString AnnouncerPath, RString sFolderName );