openmohaa/code/fgame/scriptflags.cpp
2023-06-15 23:44:02 +02:00

82 lines
1.1 KiB
C++

#include "scriptflags.h"
#include "scriptthread.h"
#include "scriptvm.h"
FlagList flags;
Flag* FlagList::FindFlag(const char* name)
{
for (int i = 0; i < m_Flags.NumObjects(); i++)
{
Flag* index = m_Flags[i];
// found the flag
if (strcmp(index->flagName, name) == 0) {
return index;
}
}
return NULL;
}
void FlagList::AddFlag(Flag* flag)
{
m_Flags.AddObject(flag);
}
void FlagList::RemoveFlag(Flag* flag)
{
m_Flags.RemoveObject(flag);
}
Flag::Flag()
{
flags.AddFlag(this);
}
Flag::~Flag()
{
flags.RemoveFlag(this);
m_WaitList.FreeObjectList();
}
void Flag::Reset()
{
bSignaled = false;
}
void Flag::Set()
{
// Don't signal again
if (bSignaled) {
return;
}
bSignaled = true;
for (int i = 0; i < m_WaitList.NumObjects(); i++)
{
ScriptVM* Thread = m_WaitList[i];
if (Thread->state != STATE_DESTROYED && Thread->m_Thread != NULL) {
Thread->m_Thread->StoppedWaitFor(STRING_EMPTY, false);
}
}
// Clear the list
m_WaitList.FreeObjectList();
}
void Flag::Wait(ScriptThread* Thread)
{
// Don't wait if it's signaled
if (bSignaled) {
return;
}
Thread->StartedWaitFor();
m_WaitList.AddObject(Thread->m_ScriptVM);
}