include "TriggerLibs/NativeLib"

include "TriggerLibs/HeroesLib"

include "TriggerLibs/GameLib"

include "TriggerLibs/GameDataHelperLib"



include "LibHDEC_h"



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

// Library: Deckard

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

// External Library Initialization

void libHDEC_InitLibraries () {

    libNtve_InitVariables();

    libCore_InitVariables();

    libGame_InitVariables();

    libGDHL_InitVariables();

}



// Variable Initialization

bool libHDEC_InitVariables_completed = false;



void libHDEC_InitVariables () {

    int init_i;



    if (libHDEC_InitVariables_completed) {

        return;

    }



    libHDEC_InitVariables_completed = true;



    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libHDEC_gv_heroDeckardScrollOfSealingUnitGroup[init_i] = UnitGroupEmpty();

    }

}



// Functions

void libHDEC_gf_HeroDeckardIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libHDEC_gv_heroDeckardTriggerRegistrationVariable += 1;

    if ((libHDEC_gv_heroDeckardTriggerRegistrationVariable == 1)) {

        TriggerEnable(libHDEC_gt_HeroDeckardAncientBlessingsAoEProcHandler, true);

        TriggerEnable(libHDEC_gt_DeckardHealingPotionCreatedAddUnitToVisibilityUnitGroup, true);

    }



}



void libHDEC_gf_HeroDeckardDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libHDEC_gv_heroDeckardTriggerRegistrationVariable -= 1;

    if ((libHDEC_gv_heroDeckardTriggerRegistrationVariable < 0)) {

        libHDEC_gv_heroDeckardTriggerRegistrationVariable = 0;

    }



    if ((libHDEC_gv_heroDeckardTriggerRegistrationVariable == 0)) {

        TriggerEnable(libHDEC_gt_HeroDeckardAncientBlessingsAoEProcHandler, false);

        TriggerEnable(libHDEC_gt_DeckardHealingPotionCreatedAddUnitToVisibilityUnitGroup, false);

    }



}



// Triggers

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

// Trigger: Deckard - Healing Potion Created - Add Unit To Visibility Unit Group

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

bool libHDEC_gt_DeckardHealingPotionCreatedAddUnitToVisibilityUnitGroup_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!(((UnitGetType(EventUnitCreatedUnit()) == "DeckardHealingPotion") || (UnitGetType(EventUnitCreatedUnit()) == "DeckardLesserHealingPotion")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitGroupAdd(libGDHL_gv_updateOnAnyVisibilityChangeUnitGroup, EventUnitCreatedUnit());

    return true;

}



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

void libHDEC_gt_DeckardHealingPotionCreatedAddUnitToVisibilityUnitGroup_Init () {

    libHDEC_gt_DeckardHealingPotionCreatedAddUnitToVisibilityUnitGroup = TriggerCreate("libHDEC_gt_DeckardHealingPotionCreatedAddUnitToVisibilityUnitGroup_Func");

    TriggerEnable(libHDEC_gt_DeckardHealingPotionCreatedAddUnitToVisibilityUnitGroup, false);

    TriggerAddEventUnitCreated(libHDEC_gt_DeckardHealingPotionCreatedAddUnitToVisibilityUnitGroup, null, "DeckardHealingPotion", null);

    TriggerAddEventUnitCreated(libHDEC_gt_DeckardHealingPotionCreatedAddUnitToVisibilityUnitGroup, null, "DeckardHoradricCube", null);

}



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

// Trigger: Hero - Deckard - Ancient Blessings - AoE Proc Handler

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

bool libHDEC_gt_HeroDeckardAncientBlessingsAoEProcHandler_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_casterUnit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectPoint(EventPlayerEffectUsedUnit(c_effectUnitSource), "DeckardAncientBlessingsAoESearch", EventPlayerEffectUsedPoint(c_effectLocationTargetPoint));

    return true;

}



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

void libHDEC_gt_HeroDeckardAncientBlessingsAoEProcHandler_Init () {

    libHDEC_gt_HeroDeckardAncientBlessingsAoEProcHandler = TriggerCreate("libHDEC_gt_HeroDeckardAncientBlessingsAoEProcHandler_Func");

    TriggerEnable(libHDEC_gt_HeroDeckardAncientBlessingsAoEProcHandler, false);

    TriggerAddEventPlayerEffectUsed(libHDEC_gt_HeroDeckardAncientBlessingsAoEProcHandler, c_playerAny, "DeckardAncientBlessingsAoEProcDummy");

}



void libHDEC_InitTriggers () {

    libHDEC_gt_DeckardHealingPotionCreatedAddUnitToVisibilityUnitGroup_Init();

    libHDEC_gt_HeroDeckardAncientBlessingsAoEProcHandler_Init();

}



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

// Library Initialization

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

bool libHDEC_InitLib_completed = false;



void libHDEC_InitLib () {

    if (libHDEC_InitLib_completed) {

        return;

    }



    libHDEC_InitLib_completed = true;



    libHDEC_InitLibraries();

    libHDEC_InitVariables();

    libHDEC_InitTriggers();

}