include "TriggerLibs/HeroesLib"

include "TriggerLibs/MapMechanicsLib"

include "LibNPLD_h"



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

// Library: Hanamura

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

// Constants

const int libMHmu_gv_hanamuraCoreBarrageCount = 1;

const string libMHmu_gv_hanamuraMechanicName_C = "Hanamura";

const int libMHmu_gv_mapMechanic_CooldownTimer_Duration = 180;

const int libMHmu_gv_mapMechanic_PayloadWarningCoundown_Duration_C = 10;

const int libMHmu_gv_swordsmanCampXPValue = 0;

const int libMHmu_gv_visionCampXPValue = 300;

const int libMHmu_gv_payloadShotCount_C = 12;



// Structures

struct libMHmu_gs_Hanamura {

    timer lv_mapMechanic_ObjectivePreviewTimer;

    timer lv_mapMechanic_ObjectivePreviewDelay;

    unit[libCore_gv_bALMaxTeams + 1] lv_mapMechanic_PreviewUnit;

    unit[libCore_gv_bALMaxTeams + 1] lv_mapMechanic_DestinationUnit;

    unit lv_mapMechanic_WarningUnit;

    bool lv_mapMechanic_FirstPayloadSpawned;

    actor[4] lv_hanamuraActorOnlyGates;

};



struct libMHmu_gs_Elevator {

    timer lv_elevatorInitialRaiseTimer;

    timer lv_elevatorRaiseTimer;

    timer lv_elevatorLowerTimer;

    bool lv_elevatorWasLowered;

    fixed lv_elevatorLowerTime;

};



// Variable Declarations

int libMHmu_gv_mapMechanic_WarningTimer_Duration;

libMHmu_gs_Hanamura libMHmu_gv_hanamura;

timer libMHmu_gv_hanamuraMM10secondcountdownTimer;

bool libMHmu_gv_hanamuraUseVisionCamps;

int[libMapM_gv_jungleMaxMercGroups + 1] libMHmu_gv_mercCamp_TeamOwner;

unit[libMapM_gv_jungleMaxMercGroups + 1] libMHmu_gv_mercCamp_VisionUnit;

fixed libMHmu_gv_henchmenBirthStunDelay;

unit[libCore_gv_bALMaxPlayers + 1] libMHmu_gv_heroInTargetMode;

string[libCore_gv_bALMaxTeams + 1][libNPLD_gv_pathCountPerTeam_C + 1] libMHmu_gv_payloadPaths;

point[libCore_gv_bALMaxTeams + 1] libMHmu_gv_payloadPathSpawnPoint;

int libMHmu_gv_missileInFlightCount;

int libMHmu_gv_progress;

timer libMHmu_gv_elevator_Forced_Lower_Timer;

unit libMHmu_gv_elevator_PathingBlocker_Unit;

doodad libMHmu_gv_elevator_Doodad;

region libMHmu_gv_elevator_Region;

point libMHmu_gv_elevator_Point;

bool libMHmu_gv_elevator_WaitingToLower;

libMHmu_gs_Elevator libMHmu_gv_elevator;

timer[libCore_gv_bALMaxPlayers + 1] libMHmu_gv_eOMPusherTimer;



// Function Declarations

void libMHmu_gf_InitSwordsmanMercCampBruiserCamp1 ();

void libMHmu_gf_InitVisionMercCampBruiserCamp3 ();

void libMHmu_gf_InitKnightsMercCampBruiserCamp3 ();

void libMHmu_gf_AllDefendersAreStandingonTheirSpawnPoints (int lp_camp);

void libMHmu_gf_OrderDefendertoLookatCenter (int lp_campID, unit lp_defender);

void libMHmu_gf_HenchmenCustomRespawnCreepsForCamp (int lp_camp, int lp_newOwningPlayer);

void libMHmu_gf_HenchmenRuntopointandlookatmiddle (unit lp_henchman, int lp_campID);

fixed libMHmu_gf_ReturnTownHealth (int lp_town, int lp_owner);

int libMHmu_gf_ReturnHigherHealthTown (int lp_owningTeam, int lp_townIndex_1, int lp_townIndex_2);

int libMHmu_gf_GetTownForPayloadAttack (int lp_ignoredTownindex, int lp_attackingTeam);

unit libMHmu_gf_GetTargetForPayloadAttack (unit lp_previousTarget, int lp_team_OwnedPayload, int lp_town);

void libMHmu_gf_MakePayloadAttack (int lp_attackingTeam);

void libMHmu_gf_ElevatorAddRemoveUnpathableUnit (bool lp_addRemove);

void libMHmu_gf_ElevatorAttempttoLowerMonitor ();

void libMHmu_gf_PayloadSpawning ();

void libMHmu_gf_PayloadsSpawned ();

void libMHmu_gf_PayloadsPathCompletedOrder ();

void libMHmu_gf_PayloadsPathCompletedChaos ();

void libMHmu_gf_ShowWarningTimer ();

void libMHmu_gf_ShowWarningIndicator (int lp_team);

void libMHmu_gf_ShowDestinationIndicator (int lp_team);

void libMHmu_gf_DestroyDestinationIndicator (int lp_team);

void libMHmu_gf_EOMInitializeEndofMatchAward ();

int libMHmu_gf_ppathGetPathID (string lp_inputString);



// Trigger Declarations

trigger libMHmu_gt_HanamuraCoreBarrageProc;

trigger libMHmu_gt_MapInitialization;

trigger libMHmu_gt_MapMechanicInitialized;

trigger libMHmu_gt_OpenTheGatesTimerExpires;

trigger libMHmu_gt_MapMechanicTimerExpires;

trigger libMHmu_gt_MapMechanicWarningExpires;

trigger libMHmu_gt_MapMechanic10SecondCountdownTimerExpires;

trigger libMHmu_gt_HenchmenCreateVisionUnits;

trigger libMHmu_gt_ReconCampTaken;

trigger libMHmu_gt_InitializeMinionData;

trigger libMHmu_gt_InitializeMinionScalingData;

trigger libMHmu_gt_PayloadTargetOn;

trigger libMHmu_gt_PayloadTargetOff;

trigger libMHmu_gt_PayloadReachesDestination;

trigger libMHmu_gt_KeepOrFortGetsTakenOver;

trigger libMHmu_gt_PayloadAttackLaunch;

trigger libMHmu_gt_PayloadAttackImpact;

trigger libMHmu_gt_ElevatorAddUnpathableLocationAtStart;

trigger libMHmu_gt_ElevatorStartInitialTimer;

trigger libMHmu_gt_ElevatorInitialTimerExpires;

trigger libMHmu_gt_ElevatorRaiseTimerExpires;

trigger libMHmu_gt_ElevatorForcedLower;

trigger libMHmu_gt_EOMInitializePusherBehaviors;

trigger libMHmu_gt_EOMPusherAdded;

trigger libMHmu_gt_EOMPusherRemoved;

trigger libMHmu_gt_EOMReportPushingScore;

trigger libMHmu_gt_EventStart;

trigger libMHmu_gt_ppath;



// Library Initialization

void libMHmu_InitVariables ();