51 lines
1.2 KiB
C++
51 lines
1.2 KiB
C++
|
global character_registry *Global_CharacterRegistry = 0;
|
||
|
|
||
|
////////////////////////////////
|
||
|
//~ sixten: Character Registry Functions
|
||
|
static void CR_SetState(character_registry *State)
|
||
|
{
|
||
|
Global_CharacterRegistry = State;
|
||
|
}
|
||
|
|
||
|
static character_registry *CR_GetState(void)
|
||
|
{
|
||
|
return(Global_CharacterRegistry);
|
||
|
}
|
||
|
|
||
|
static character_list CR_GetCharacters(void)
|
||
|
{
|
||
|
character_registry *Registry = CR_GetState();
|
||
|
character_list List = Registry->Characters;
|
||
|
return(List);
|
||
|
}
|
||
|
|
||
|
static void CR_Init(character_registry *State)
|
||
|
{
|
||
|
CR_SetState(State);
|
||
|
|
||
|
State->Arena = ArenaAllocate(Megabytes(32));
|
||
|
}
|
||
|
|
||
|
static character_entry *CR_EntryFromName(string Name)
|
||
|
{
|
||
|
character_entry *Entry = 0;
|
||
|
|
||
|
character_registry *Registry = CR_GetState();
|
||
|
for(character_entry *Iter = Registry->Characters.First; Iter != 0; Iter = Iter->Next)
|
||
|
{
|
||
|
if(AreEqual(Name, Iter->Name))
|
||
|
{
|
||
|
Entry = Iter;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(!Entry)
|
||
|
{
|
||
|
Entry = PushStruct(Registry->Arena, character_entry);
|
||
|
Entry->Name = PushString(Registry->Arena, Name);
|
||
|
DLLInsertLast(Registry->Characters.First, Registry->Characters.Last, Entry);
|
||
|
}
|
||
|
|
||
|
return(Entry);
|
||
|
}
|