include "TriggerLibs/NativeLib"

include "TriggerLibs/GameLib"

include "TriggerLibs/MapMechanicsLib"

include "TriggerLibs/GameDataHelperLib"



include "LibHFEN_h"



//--------------------------------------------------------------------------------------------------

// Library: Fenix

//--------------------------------------------------------------------------------------------------

// External Library Initialization

void libHFEN_InitLibraries () {

    libNtve_InitVariables();

    libGame_InitVariables();

    libMapM_InitVariables();

    libGDHL_InitVariables();

}



// Variable Initialization

bool libHFEN_InitVariables_completed = false;



void libHFEN_InitVariables () {

    if (libHFEN_InitVariables_completed) {

        return;

    }



    libHFEN_InitVariables_completed = true;



    libHFEN_gv_heroFenixRapidRechargeHealingModifier = CatalogReferenceGetAsFixed("Effect,FenixRapidRechargeHealingDummyModifyUnit,XP", c_playerAny);

}



// Functions

void libHFEN_gf_HeroFenixIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libHFEN_gv_heroFenixTriggerRegistrationVariable += 1;

    if ((libHFEN_gv_heroFenixTriggerRegistrationVariable == 1)) {

        TriggerEnable(libHFEN_gt_FenixRapidRechargeOn, true);

        TriggerEnable(libHFEN_gt_FenixRapidRechargeOff, true);

        TriggerEnable(libHFEN_gt_FenixWarpWarpWarfareCooldownReset, true);

    }



}



void libHFEN_gf_HeroFenixDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libHFEN_gv_heroFenixTriggerRegistrationVariable -= 1;

    if ((libHFEN_gv_heroFenixTriggerRegistrationVariable < 0)) {

        libHFEN_gv_heroFenixTriggerRegistrationVariable = 0;

    }



    if ((libHFEN_gv_heroFenixTriggerRegistrationVariable == 0)) {

        TriggerEnable(libHFEN_gt_FenixRapidRechargeOn, false);

        TriggerEnable(libHFEN_gt_FenixRapidRechargeShieldHealing, false);

        TriggerEnable(libHFEN_gt_FenixRapidRechargeOff, false);

        TriggerEnable(libHFEN_gt_FenixWarpWarpWarfareCooldownReset, false);

    }



}



// Triggers

//--------------------------------------------------------------------------------------------------

// Trigger: Fenix - Rapid Recharge - On

//--------------------------------------------------------------------------------------------------

bool libHFEN_gt_FenixRapidRechargeOn_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((libGame_gf_HeroGainTalentGainedTalent() == "FenixRapidRecharge"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    TriggerEnable(libHFEN_gt_FenixRapidRechargeShieldHealing, true);

    libHFEN_gv_heroFenixRapidRechargeRegistrationVariable += 1;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libHFEN_gt_FenixRapidRechargeOn_Init () {

    libHFEN_gt_FenixRapidRechargeOn = TriggerCreate("libHFEN_gt_FenixRapidRechargeOn_Func");

    TriggerEnable(libHFEN_gt_FenixRapidRechargeOn, false);

    libGame_gf_HeroGainTalent(libHFEN_gt_FenixRapidRechargeOn);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Fenix - Rapid Recharge - Shield Healing

//--------------------------------------------------------------------------------------------------

bool libHFEN_gt_FenixRapidRechargeShieldHealing_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_fenixPlayer;

    unit lv_fenixUnit;

    fixed lv_healingReceived;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_fenixPlayer = UnitGetOwner(EventUnit());

    lv_fenixUnit = libGame_gv_players[lv_fenixPlayer].lv_heroUnit;

    lv_healingReceived = EventUnitHealAmount();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_fenixUnit) == "HeroFenix"))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_fenixPlayer, "FenixRapidRecharge") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueModifyFixed(c_gameCatalogEffect, "FenixRapidRechargeShieldHealer", "RechargeVitalRate", lv_fenixPlayer, (lv_healingReceived * libHFEN_gv_heroFenixRapidRechargeHealingModifier), c_upgradeOperationSet);

    UnitCreateEffectUnit(lv_fenixUnit, "FenixRapidRechargeShieldHealer", lv_fenixUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libHFEN_gt_FenixRapidRechargeShieldHealing_Init () {

    libHFEN_gt_FenixRapidRechargeShieldHealing = TriggerCreate("libHFEN_gt_FenixRapidRechargeShieldHealing_Func");

    TriggerEnable(libHFEN_gt_FenixRapidRechargeShieldHealing, false);

    TriggerAddEventUnitHealed(libHFEN_gt_FenixRapidRechargeShieldHealing, null, c_unitVitalLife, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Fenix - Rapid Recharge - Off

//--------------------------------------------------------------------------------------------------

bool libHFEN_gt_FenixRapidRechargeOff_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_localPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_localPlayer = libGame_gf_HeroRespecsTalentsPlayer();



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_localPlayer, "FenixRapidRecharge") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libHFEN_gv_heroFenixRapidRechargeRegistrationVariable -= 1;

    if ((libHFEN_gv_heroFenixRapidRechargeRegistrationVariable == 0)) {

        TriggerEnable(libHFEN_gt_FenixRapidRechargeShieldHealing, false);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libHFEN_gt_FenixRapidRechargeOff_Init () {

    libHFEN_gt_FenixRapidRechargeOff = TriggerCreate("libHFEN_gt_FenixRapidRechargeOff_Func");

    TriggerEnable(libHFEN_gt_FenixRapidRechargeOff, false);

    libGame_gf_HeroRespecsTalents(libHFEN_gt_FenixRapidRechargeOff);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Fenix - Warp - Warp Warfare - Cooldown Reset

//--------------------------------------------------------------------------------------------------

bool libHFEN_gt_FenixWarpWarpWarfareCooldownReset_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_fenixPlayer;

    unit lv_unit;

    unit lv_vehicle;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_fenixPlayer = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    lv_unit = libGame_gv_players[lv_fenixPlayer].lv_heroUnit;

    lv_vehicle = libGame_gv_players[lv_fenixPlayer].lv_activeVehicle;



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_fenixPlayer, "FenixWarpWarfare") == true))) {

            return false;

        }



        if (!(((UnitGetType(lv_unit) == "HeroFenix") || (UnitGetType(lv_vehicle) == "HeroFenix")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_unit, "FenixWarpWarpWarfareSetCooldown", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libHFEN_gt_FenixWarpWarpWarfareCooldownReset_Init () {

    libHFEN_gt_FenixWarpWarpWarfareCooldownReset = TriggerCreate("libHFEN_gt_FenixWarpWarpWarfareCooldownReset_Func");

    TriggerEnable(libHFEN_gt_FenixWarpWarpWarfareCooldownReset, false);

    libGame_gf_HeroParticipatedInTakedown(libHFEN_gt_FenixWarpWarpWarfareCooldownReset);

}



void libHFEN_InitTriggers () {

    libHFEN_gt_FenixRapidRechargeOn_Init();

    libHFEN_gt_FenixRapidRechargeShieldHealing_Init();

    libHFEN_gt_FenixRapidRechargeOff_Init();

    libHFEN_gt_FenixWarpWarpWarfareCooldownReset_Init();

}



//--------------------------------------------------------------------------------------------------

// Library Initialization

//--------------------------------------------------------------------------------------------------

bool libHFEN_InitLib_completed = false;



void libHFEN_InitLib () {

    if (libHFEN_InitLib_completed) {

        return;

    }



    libHFEN_InitLib_completed = true;



    libHFEN_InitLibraries();

    libHFEN_InitVariables();

    libHFEN_InitTriggers();

}