## Full example

    // Source: https://github.com/Jusas/XCOM2_ReconSoldierClass/blob/master/ReconOperatorSoldierClass/Src/ReconSoldierClass/Classes/ReconOperator_AcademyUnlocks.uc

    class ReconOperator_AcademyUnlocks extends X2StrategyElement;

    static function array<X2DataTemplate> CreateTemplates()
    {
    	local array<X2DataTemplate> Templates;

    	Templates.AddItem(AdrenalineUnlock());

    	return Templates;
    }

    static function X2SoldierAbilityUnlockTemplate AdrenalineUnlock()
    {
    	local X2SoldierAbilityUnlockTemplate Template;
    	local ArtifactCost Resources;

    	`CREATE_X2TEMPLATE(class'X2SoldierAbilityUnlockTemplate', Template, 'ReconAdrenalineUnlock');

    	Template.AllowedClasses.AddItem('ReconSoldierClass');
    	Template.AbilityName = 'ReconAdrenalineSpike';
    	Template.strImage = "img:///UILibrary_ReconOperator.GTS.GTS_adrenaline";

    	// Requirements
    	Template.Requirements.RequiredHighestSoldierRank = 5;
    	Template.Requirements.RequiredSoldierClass = 'ReconSoldierClass';
    	Template.Requirements.RequiredSoldierRankClassCombo = true;
    	Template.Requirements.bVisibleIfSoldierRankGatesNotMet = true;

    	// Cost
    	Resources.ItemTemplateName = 'Supplies';
    	Resources.Quantity = 75;
    	Template.Cost.ResourceCosts.AddItem(Resources);

    	return Template;
    }