87 lines
2.2 KiB
C++
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");
|
|
}
|
|
}
|
|
}
|
|
|