Advertisement
Guest User

X2SimpleBodyPartFilter_Override.uc

a guest
Feb 8th, 2016
779
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. class X2SimpleBodyPartFilter_Override extends X2SimpleBodyPartFilter config(AllArmorOptions);
  3.  
  4. var config bool modIsActive;
  5. var config bool showVeteranOptions;
  6. var config bool ignoreCharacterTemplate;
  7.  
  8.  
  9. var private EGender Gender;
  10. var private ECharacterRace Race;
  11. var private X2BodyPartTemplate TorsoTemplate;
  12. var private name ArmorName;
  13. var private bool bCivilian;
  14. var private bool bVeteran;
  15.  
  16. //Used for initial torso selection
  17. var private name MatchCharacterTemplateForTorso;
  18. var private name MatchArmorTemplateForTorso;
  19.  
  20. function Set(EGender inGender, ECharacterRace inRace, name inTorsoTemplateName, bool bIsCivilian = false, bool bIsVeteran = false)
  21. {
  22.     Gender = inGender;
  23.     Race = inRace;
  24.     bCivilian = bIsCivilian;
  25.     bVeteran = bIsVeteran;
  26.  
  27.     if (inTorsoTemplateName != '')
  28.     {
  29.         TorsoTemplate = class'X2BodyPartTemplateManager'.static.GetBodyPartTemplateManager().FindUberTemplate("Torso", inTorsoTemplateName);
  30.         ArmorName = TorsoTemplate.ArmorTemplate;
  31.     }
  32.     else
  33.     {
  34.         ArmorName = '';
  35.     }
  36. }
  37.  
  38. function SetTorsoSelection(name InMatchCharacterTemplateForTorso, name InMatchArmorTemplateForTorso)
  39. {
  40.     MatchCharacterTemplateForTorso = InMatchCharacterTemplateForTorso;
  41.     MatchArmorTemplateForTorso = InMatchArmorTemplateForTorso;
  42. }
  43.  
  44. function bool FilterAny( X2BodyPartTemplate Template )
  45. {
  46.     return true;
  47. }
  48.  
  49. // Specialized filter method for building a character from scratch
  50. function bool FilterTorso(X2BodyPartTemplate Template)
  51. {
  52.     return  FilterByGenderAndNonSpecialized(Template) &&
  53.             (Template.ArmorTemplate == MatchArmorTemplateForTorso || Template.CharacterTemplate == MatchCharacterTemplateForTorso);
  54. }
  55.  
  56. function bool FilterByGender(X2BodyPartTemplate Template)
  57. {
  58.     return Template.Gender == eGender_None || Template.Gender == Gender;
  59. }
  60.  
  61. function bool FilterByRace(X2BodyPartTemplate Template)
  62. {
  63.     return Template.Race == ECharacterRace(Race);
  64. }
  65.  
  66. function bool FilterByNonSpecialized(X2BodyPartTemplate Template)
  67. {
  68.     return Template.SpecializedType == false && (!Template.bVeteran || bVeteran);
  69. }
  70.  
  71. function bool FilterByCivilian(X2BodyPartTemplate Template)
  72. {
  73.     return !bCivilian || Template.bCanUseOnCivilian;
  74. }
  75.  
  76. function bool FilterByTech(X2BodyPartTemplate Template)
  77. {
  78.     local X2TechTemplate TechTemplate;
  79.     local XComGameStateHistory History;
  80.     local XComGameState_HeadquartersXCom XComHQ;
  81.     local X2StrategyElementTemplateManager StratMgr;   
  82.    
  83.     //Automatically pass if no tech is specified
  84.     if (Template.Tech != '')
  85.     {
  86.         //Fetch the tech required
  87.         StratMgr = class'X2StrategyElementTemplateManager'.static.GetStrategyElementTemplateManager();
  88.         TechTemplate = X2TechTemplate(StratMgr.FindStrategyElementTemplate(Template.Tech));
  89.         if (TechTemplate != none)
  90.         {
  91.             //See if it has been researched
  92.             History = `XCOMHISTORY;
  93.             XComHQ = XComGameState_HeadquartersXCom(History.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersXCom', true));
  94.             if (XComHQ != none)
  95.             {
  96.                 if (XComHQ.IsTechResearched(TechTemplate.DataName))
  97.                 {
  98.                     return true;
  99.                 }
  100.                 else
  101.                 {
  102.                     return false;
  103.                 }
  104.             }
  105.             else
  106.             {
  107.                 return false; //No HQ, no tech and no body part allowed
  108.             }
  109.         }
  110.     }
  111.    
  112.     return true;
  113. }
  114.  
  115. function bool FilterByGenderAndRace(X2BodyPartTemplate Template)
  116. {
  117.     return  FilterByGender(Template) && FilterByRace(Template) && FilterByNonSpecialized(Template);
  118. }
  119.  
  120. function bool FilterByGenderAndNonSpecialized(X2BodyPartTemplate Template)
  121. {
  122.     return FilterByGender(Template) && FilterByNonSpecialized(Template);
  123. }
  124.  
  125. function bool FilterByGenderAndNonSpecializedCivilian(X2BodyPartTemplate Template)
  126. {
  127.     return FilterByGender(Template) && FilterByNonSpecialized(Template) && FilterByCivilian(Template);
  128. }
  129.  
  130. function bool FilterByGenderAndNonSpecializedAndTech(X2BodyPartTemplate Template)
  131. {
  132.     return FilterByGender(Template) && FilterByNonSpecialized(Template) && FilterByTech(Template);
  133. }
  134.  
  135. function bool FilterByTorsoAndArmorMatch(X2BodyPartTemplate Template)
  136. {
  137.     local bool bResult;
  138.     local bool bVet;
  139.     local bool bIgnoreCharacterTemplate;
  140.     bResult = FilterByGenderAndNonSpecialized(Template);
  141.     bVet = ((showVeteranOptions) || (TorsoTemplate.bVeteran == Template.bVeteran));
  142.     bIgnoreCharacterTemplate = ((ignoreCharacterTemplate) || (TorsoTemplate.CharacterTemplate == Template.CharacterTemplate));
  143.     if (Template == None || TorsoTemplate == None){
  144.         return false;
  145.     }
  146.  
  147.     if(modIsActive){
  148.         return bResult && bVet && bIgnoreCharacterTemplate;
  149.     }
  150.     return  FilterByGenderAndNonSpecialized(Template) &&
  151.         (TorsoTemplate.bVeteran == Template.bVeteran) &&
  152.         (TorsoTemplate.ArmorTemplate == Template.ArmorTemplate) &&
  153.         (TorsoTemplate.CharacterTemplate == Template.CharacterTemplate);
  154. }
  155.  
  156. function bool FilterByGenderAndArmor( X2BodyPartTemplate Template )
  157. {
  158.     //  Note: TorsoTemplate will always be none here, this is when we are SELECTING a torso
  159.     //  As the function  name states, we only want to check gender and armor.
  160.  
  161.     if (Template == None || ArmorName == '')
  162.         return false;
  163.  
  164.     if(modIsActive)
  165.         return (Template.Gender == Gender);
  166.     return  (Template.Gender == Gender) &&
  167.             (Template.ArmorTemplate == ArmorName);
  168. }
  169.  
  170. function string DebugString_X2SimpleBodyPartFilter()
  171. {
  172.     return `ShowEnum(EGender, Gender, Gender) @ `ShowEnum(ECharacterRace, Race, Race) @ ((TorsoTemplate != None) ? `ShowVar(TorsoTemplate.ArchetypeName) : "TorsoTemplate == None") @ `ShowVar(ArmorName);
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement