This commit is contained in:
Paul 2001-01-23 21:05:48 +00:00
parent 104f5a734a
commit e2dba7722f
5 changed files with 79 additions and 7 deletions

View File

@ -101,6 +101,10 @@ class CGUISprite *CConversation::s_guiIcon=NULL;
class CGUITextBox *CConversation::s_guiText=NULL; class CGUITextBox *CConversation::s_guiText=NULL;
class FontBank *CConversation::s_fontBank=NULL; class FontBank *CConversation::s_fontBank=NULL;
class CScript *CConversation::s_registeredScripts[MAX_LOADED_SCRIPTS];
int CConversation::s_registeredScriptIds[MAX_LOADED_SCRIPTS];
int CConversation::s_numRegisteredScripts=0;
class CScript *CConversation::s_currentScript=NULL; class CScript *CConversation::s_currentScript=NULL;
int CConversation::s_currentState=STATE_INACTIVE; int CConversation::s_currentState=STATE_INACTIVE;
@ -119,6 +123,8 @@ int CConversation::s_currentSelectedAnswer=0;
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CConversation::init() void CConversation::init()
{ {
ASSERT(s_numRegisteredScripts==0);
s_guiFrame=new ("Conversation GUI") CGUIGroupFrame(); s_guiFrame=new ("Conversation GUI") CGUIGroupFrame();
s_guiFrame->init(0); s_guiFrame->init(0);
s_guiFrame->setObjectXYWH((512-FRAME_WIDTH)/2,256-FRAME_BOTTOM_OFFSET-FRAME_HEIGHT,FRAME_WIDTH,FRAME_HEIGHT); s_guiFrame->setObjectXYWH((512-FRAME_WIDTH)/2,256-FRAME_BOTTOM_OFFSET-FRAME_HEIGHT,FRAME_WIDTH,FRAME_HEIGHT);
@ -142,6 +148,7 @@ void CConversation::init()
s_fontBank->setOt(0); s_fontBank->setOt(0);
s_currentState=STATE_INACTIVE; s_currentState=STATE_INACTIVE;
s_currentScript=NULL;
} }
@ -153,6 +160,7 @@ void CConversation::init()
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CConversation::shutdown() void CConversation::shutdown()
{ {
dumpConversationScripts();
s_guiFrame->shutdown(); delete s_guiFrame; s_guiFrame->shutdown(); delete s_guiFrame;
} }
@ -167,6 +175,8 @@ void CConversation::think(int _frames)
{ {
if(isActive()) if(isActive())
{ {
ASSERT(s_currentScript);
if(s_currentState==STATE_JUST_ACTIVATED) if(s_currentState==STATE_JUST_ACTIVATED)
{ {
s_currentState=STATE_ACTIVE; s_currentState=STATE_ACTIVE;
@ -179,6 +189,7 @@ void CConversation::think(int _frames)
s_currentScript->run(); s_currentScript->run();
if(s_currentScript->isFinished()) if(s_currentScript->isFinished())
{ {
s_currentScript=NULL;
s_currentState=STATE_INACTIVE; s_currentState=STATE_INACTIVE;
} }
} }
@ -209,7 +220,13 @@ void CConversation::render()
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CConversation::registerConversationScript(FileEquate _feScript) void CConversation::registerConversationScript(FileEquate _feScript)
{ {
// Blah blah.. ASSERT(s_numRegisteredScripts<MAX_LOADED_SCRIPTS);
// Load in the script and register its id
s_registeredScripts[s_numRegisteredScripts]=new ("conversation script") CScript();
s_registeredScripts[s_numRegisteredScripts]->initialise(_feScript);
s_registeredScriptIds[s_numRegisteredScripts]=_feScript;
s_numRegisteredScripts++;
} }
@ -221,12 +238,23 @@ void CConversation::registerConversationScript(FileEquate _feScript)
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CConversation::trigger(FileEquate _feScript) void CConversation::trigger(FileEquate _feScript)
{ {
int i;
ASSERT(!isActive()); ASSERT(!isActive());
s_currentScript=new ("script") CScript(); // Is this script already registered?
s_currentScript->initialise(_feScript); for(i=0;i<s_numRegisteredScripts;i++)
{
if(s_registeredScriptIds[i]==_feScript)
{
// Found it..
s_currentScript=s_registeredScripts[i];
s_currentState=STATE_JUST_ACTIVATED;
return;
}
}
s_currentState=STATE_JUST_ACTIVATED; ASSERT(!"Script was not registered");
} }
@ -373,5 +401,24 @@ void CConversation::renderQuestion()
} }
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CConversation::dumpConversationScripts()
{
int i;
for(i=0;i<s_numRegisteredScripts;i++)
{
s_registeredScripts[i]->dump();
}
s_currentScript=NULL;
s_numRegisteredScripts=0;
}
/*=========================================================================== /*===========================================================================
end */ end */

View File

@ -44,7 +44,6 @@ public:
static void render(); static void render();
static void registerConversationScript(FileEquate _feScript); static void registerConversationScript(FileEquate _feScript);
static void trigger(FileEquate _feScript); static void trigger(FileEquate _feScript);
static int isActive(); static int isActive();
@ -113,10 +112,17 @@ private:
STATE_ACTIVE, STATE_ACTIVE,
}; };
// Maximum number of scripts per level
enum
{
MAX_LOADED_SCRIPTS=10,
};
static void thinkQuestion(); static void thinkQuestion();
static void renderQuestion(); static void renderQuestion();
static void dumpConversationScripts();
static class CGUIGroupFrame *s_guiFrame; static class CGUIGroupFrame *s_guiFrame;
static class CGUISprite *s_guiIcon; static class CGUISprite *s_guiIcon;
@ -125,6 +131,10 @@ private:
static CHAR_ICON_FRAMES s_characterIconFrames[MAX_CHARS]; static CHAR_ICON_FRAMES s_characterIconFrames[MAX_CHARS];
static class CScript *s_registeredScripts[MAX_LOADED_SCRIPTS];
static int s_registeredScriptIds[MAX_LOADED_SCRIPTS];
static int s_numRegisteredScripts;
static class CScript *s_currentScript; static class CScript *s_currentScript;
static int s_currentState; static int s_currentState;

View File

@ -68,7 +68,10 @@ void CGameScene::init()
s_genericFont->initialise( &standardFont ); s_genericFont->initialise( &standardFont );
s_genericFont->setColour( 255, 255 , 0 ); s_genericFont->setColour( 255, 255 , 0 );
VidSetClearScreen(1); VidSetClearScreen(1);
CConversation::init(); CConversation::init();
CConversation::registerConversationScript(SCRIPTS_SPEECHTEST_DAT); // Register one script for testing..
Level.init(); Level.init();
C2dEnemy *enemy; C2dEnemy *enemy;

View File

@ -87,6 +87,19 @@ void CScript::initialise(FileEquate _fe)
} }
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CScript::dump()
{
MemFree(m_stack);
MemFree(m_code);
}
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
Function: Function:
Purpose: Purpose:
@ -125,12 +138,10 @@ void CScript::run()
Params: Params:
Returns: Returns:
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
int testval=2;
void CScript::reset() void CScript::reset()
{ {
m_pc=0; m_pc=0;
m_sp=0; m_sp=0;
m_localVars[TMP1]=testval;
m_state=RESET; m_state=RESET;
} }

View File

@ -38,6 +38,7 @@ class CScript
{ {
public: public:
void initialise(FileEquate _fe); void initialise(FileEquate _fe);
void dump();
void reset(); void reset();
void run(); void run();