int FStateDefinitions::GetStateLabelIndex (FName statename) { FStateDefine *std = FindStateLabelInList(StateLabels, statename, false); if (std == NULL) { return -1; } assert((size_t)std->State <= StateArray.Size() + 1); return (int)((ptrdiff_t)std->State - 1); }
FStateDefine *FStateDefinitions::FindStateAddress(const char *name) { FStateDefine *statedef = NULL; TArray<FName> &namelist = MakeStateNameList(name); TArray<FStateDefine> *statelist = &StateLabels; for(unsigned i = 0; i < namelist.Size(); i++) { statedef = FindStateLabelInList(*statelist, namelist[i], true); statelist = &statedef->Children; } return statedef; }
FState * FStateDefinitions::FindState(const char * name) { FStateDefine * statedef=NULL; TArray<FName> &namelist = MakeStateNameList(name); TArray<FStateDefine> * statelist = &StateLabels; for(unsigned i=0;i<namelist.Size();i++) { statedef = FindStateLabelInList(*statelist, namelist[i], false); if (statedef == NULL) return NULL; statelist = &statedef->Children; } return statedef? statedef->State : NULL; }
FState * FindState(AActor * actor, const PClass * type, const char * name) { static TArray<FName> namelist(3); FStateDefine * statedef=NULL; MakeStateNameList(name, &namelist); TArray<FStateDefine> * statelist = &StateLabels; for(unsigned i=0;i<namelist.Size();i++) { statedef = FindStateLabelInList(*statelist, namelist[i], false); if (statedef == NULL) return NULL; statelist = &statedef->Children; } return statedef? statedef->State : NULL; }
void FStateDefinitions::AddStateDefines(const FStateLabels *list) { if (list != NULL) for(int i = 0; i < list->NumLabels; i++) { if (list->Labels[i].Children == NULL) { if (!FindStateLabelInList(StateLabels, list->Labels[i].Label, false)) { FStateDefine def; def.Label = list->Labels[i].Label; def.State = list->Labels[i].State; def.DefineFlags = SDF_STATE; StateLabels.Push(def); } } } }