mojo_client/src/Client/DefScript/DynamicEvent.cpp
False.Genesis 54a37a3ff9 * updated items & items cache to 2.0.12
* added extracting of map & area names to stuffextract
* code cleanups
2007-05-06 00:34:30 +00:00

87 lines
2.2 KiB
C++

#include "DefScript.h"
#include "DynamicEvent.h"
struct DefScript_DynamicEvent
{
std::string name, cmd, parent;
clock_t counter, interval;
};
DefScript_DynamicEventMgr::DefScript_DynamicEventMgr(DefScriptPackage *pack)
{
_pack = pack;
_lastclock = clock();
}
DefScript_DynamicEventMgr::~DefScript_DynamicEventMgr()
{
for(DefDynamicEventList::iterator i = _storage.begin(); i != _storage.end(); i++)
{
delete *i;
}
}
void DefScript_DynamicEventMgr::Add(std::string name, std::string script, clock_t interval, const char *parent)
{
_DEFSC_DEBUG( printf("DEFSCRIPT: Add Event %s, interval=%u, parent=%s\n",name.c_str(),interval,parent?parent:""); printf("DEFSCRIPT: EventRun='%s'\n",script.c_str()); )
if(name.empty() || script.empty() || interval==0)
return;
for(DefDynamicEventList::iterator i = _storage.begin(); i != _storage.end(); i++)
if((*i)->name == name)
return; // event with that name is already registered
DefScript_DynamicEvent *e = new DefScript_DynamicEvent;
e->name = name;
e->cmd = script;
e->interval = interval;
e->parent = parent?parent:"";
e->counter = 0;
_storage.push_back(e);
}
void DefScript_DynamicEventMgr::Remove(std::string name)
{
if(name.empty())
return;
for(DefDynamicEventList::iterator i = _storage.begin(); i != _storage.end(); i++)
{
if((*i)->name == name)
{
delete *i;
_storage.erase(i);
break;
}
}
return;
}
void DefScript_DynamicEventMgr::Update(void)
{
clock_t diff = clock() - _lastclock;
_lastclock = clock();
DefScript *sc;
for(DefDynamicEventList::iterator i = _storage.begin(); i != _storage.end(); i++)
{
sc = NULL;
try
{
(*i)->counter += diff;
if((*i)->counter >= (*i)->interval)
{
(*i)->counter %= (*i)->interval;
if(!(*i)->parent.empty())
sc = _pack->GetScript((*i)->parent);
if(sc)
_pack->RunSingleLineFromScript((*i)->cmd,sc);
else
_pack->RunSingleLine((*i)->cmd);
}
}
catch (...)
{
printf("Error in DefScript_DynamicEventMgr::Update()\n");
}
}
}