Head.c
class Head_Default extends Head
{
bool m_handling_exception = false;
int m_beard_idx;
int m_hair_idx;
ref map<int,ref SelectionTranslation> m_HeadHairHidingStateMap;
ref array<string> m_HeadHairSelectionArray;
void Head_Default()
{
Init();
}
void Init()
{
m_HeadHairHidingStateMap = new map<int,ref SelectionTranslation>;
m_HeadHairSelectionArray = new array<string>;
ConfigGetTextArray("simpleHiddenSelections",m_HeadHairSelectionArray);
m_beard_idx = m_HeadHairSelectionArray.Find("beard");
m_hair_idx = m_HeadHairSelectionArray.Find("hair");
if (!ConfigIsExisting("HairHiding"))
m_handling_exception = true;
InitSelectionTranslation();
}
void InitSelectionTranslation()
{
for (int i = 0; i < m_HeadHairSelectionArray.Count(); i++)
{
SelectionTranslation selTran = new SelectionTranslation(this,i);
selTran.SetSelectionState(true);
m_HeadHairHidingStateMap.Insert(i,selTran); //all considered "shown" on init
}
}
bool GetHeadHideableSelections(out array<string> selections)
{
selections = m_HeadHairSelectionArray;
return true;
}
int GetBeardIndex()
{
return m_beard_idx;
}
int GetHairIndex()
{
return m_hair_idx;
}
int GetSelectionIndex(string str)
{
return m_HeadHairSelectionArray.Find(str);
}
bool IsHandlingException()
{
return m_handling_exception;
}
};
class SelectionTranslation
{
bool m_SelectionState;
bool m_TranslationFinished = false;
string m_BasePath;// = "cfgVehicles " + GetType() + " HairHiding";
ref array<int> m_TranslatedSelections;
Head_Default m_Head;
void SelectionTranslation(Head_Default head, int idx)
{
m_Head = head;
m_BasePath = "cfgVehicles " + m_Head.GetType() + " HairHiding";
InitTranslatedSelections(idx);
}
void InitTranslatedSelections(int idx)
{
if ( !m_Head.ConfigIsExisting("HairHiding") )
return;
string path;
int selectionIdx = -1;
m_TranslatedSelections = new array<int>;
//Hair
path = m_BasePath + " Group_Hair";
SearchAndTranslate(path,idx);
//Beard
path = m_BasePath + " Group_Beard";
SearchAndTranslate(path,idx);
//Hair + Beard
path = m_BasePath + " Group_HairBeard";
SearchAndTranslate(path,idx);
//other
for (int i = 0; !m_TranslationFinished; i++)
{
path = m_BasePath + " Group_" + i;
if ( g_Game.ConfigIsExisting(path) )
{
SearchAndTranslate(path,idx);
}
else
{
m_TranslationFinished = true;
}
}
}
bool SearchAndTranslate(string path, int idx)
{
if (!g_Game.ConfigIsExisting(path))
return false;
array<string> tempArrayStr = new array<string>;
g_Game.ConfigGetTextArray(path + " memberSelections", tempArrayStr);
int indexInOriginalArray = -2;
for (int i = 0; i < tempArrayStr.Count(); i++)
{
indexInOriginalArray = m_Head.m_HeadHairSelectionArray.Find(tempArrayStr.Get(i));
if ( idx == indexInOriginalArray ) //found it
{
g_Game.ConfigGetTextArray(path + " simpleSelectionName", tempArrayStr);
for (i = 0; i < tempArrayStr.Count(); i++)
{
m_TranslatedSelections.Insert(m_Head.m_HeadHairSelectionArray.Find(tempArrayStr.Get(i)));
}
m_TranslationFinished = true;
return true;
}
}
return false;
}
void SetSelectionState(bool state)
{
m_SelectionState = state;
}
bool GetSelectionState()
{
return m_SelectionState;
}
ref array<int> GetTranslatedSelections()
{
return m_TranslatedSelections;
}
};