import enum AICoverExposureMethod
{
	Standing_Step_Left,
	Standing_Step_Right,
	Standing_Lean_Left,
	Standing_Lean_Right,
	Crouching_Step_Left,
	Crouching_Step_Right,
	Crouching_Lean_Left,
	Crouching_Lean_Right,
	Lean_Over,
	Stand_Up,
	Standing_Blind_Left,
	Standing_Blind_Right,
	Crouching_Blind_Left,
	Crouching_Blind_Right,
	Crouching_Blind_Top,
	Count,
}

import struct gameAvailableExposureMethodResult
{
	import var distanceToTarget : Float;
	import var method : AICoverExposureMethod;
}

import enum gameCoverHeight
{
	Invalid,
	Low,
	High,
}

import enum AIUninterruptibleActionType
{
	None,
	Default,
	EnteringCover,
	LeavingCover,
	Count,
}

importonly abstract class ICoverManager extends IGameSystem
{
}

importonly class CoverDemandHolder extends IScriptable
{
	public import function GetCoverID() : Uint64;
}

importonly final class CoverManager extends ICoverManager
{
	public import function RegisterCoverOccupant( coverId : Uint64, occupant : GameObject );
	public import function UnregisterCoverOccupant( occupant : GameObject );
	public import function IsCoverAvailable( coverId : Uint64, occupant : GameObject ) : Bool;
	public import function GetCoverHeight( coverId : Uint64 ) : gameCoverHeight;
	public import function GetCoverPosition( coverId : Uint64 ) : Vector4;
	public import function GetCoverWorldForward( coverId : Uint64 ) : Vector4;
	public import function GetCoverWorldUp( coverId : Uint64 ) : Vector4;
	public import function GetCoverRemainingHealthPercentage( coverId : Uint64 ) : Float;
	public import function IsProtectingHorizontallyAgainstObject( coverId : Uint64, object : GameObject, angleMultiplier : Float ) : Bool;
	public import function GetThreatsNotProtectedFrom( coverId : Uint64, occupant : GameObject, angleMultiplier : Float, predictionTime : Float, trackingMode : gamedataTrackingMode ) : array< TrackedLocation >;
	public import function GetUsableExposureSpotsForCover( coverId : Uint64, const threat : GameObject ) : array< gameAvailableExposureMethodResult >;
	public import function GetUsableExposureSpotsForCoverTolerance( coverId : Uint64, const threat : GameObject, maxTolerance : Float ) : array< gameAvailableExposureMethodResult >;
	public import function GetUsableExposureSpotsForCoverOccupant( occupant : GameObject, threat : GameObject ) : array< gameAvailableExposureMethodResult >;
	public import function GetUsableExposureSpotsNumForCoverTolerance( coverId : Uint64, const threat : GameObject, maxTolerance : Float, useRoughCalculations : Bool ) : Uint32;
	public import function GetCurrentCover( occupant : GameObject ) : Uint64;
	public import function NodeRefToObjectId( nodeRef : NodeRef ) : Uint64;
	public import function GetDemandCoverHolder( nodeRef : NodeRef ) : CoverDemandHolder;
	public import function LeaveCoverImmediately( occupant : GameObject );
	public import function IsEnteringOrLeavingCover( occupant : GameObject ) : Bool;
	public import function GetCoverActionType( occupant : GameObject ) : AIUninterruptibleActionType;
	public import function NotifyGotDamageInCover( coverId : Uint64, damageTime : EngineTime, executingCoverAction : Bool, isShooting : Bool );
	public import function IsCoverRegular( coverIdValue : Uint64 ) : Bool;
	public import function IsShootingSpot( coverIdValue : Uint64 ) : Bool;
	public import function SetMaxAllowedActionHalfAngleDeg( angleDeg : Float );
	public import function IsCoverValid( coverId : Uint64 ) : Bool;
	public import function RegisterCoverPreInstanceData( globalNodeRef : GlobalNodeRef, isEnabled : Bool );
	public import function UnregisterCoverPreInstanceData( globalNodeRef : GlobalNodeRef );
	public import function SetCoverEnabled( globalNodeRef : GlobalNodeRef );
	public import function SetCoverDisabled( globalNodeRef : GlobalNodeRef );
}

importonly final class MultiSelectCovers extends IScriptable
{
	import var selectedCovers : array< Uint64 >;
	import var coverRingTypes : array< gamedataAIRingType >;
	import var coversUseLOS : array< Bool >;
	import var sourcePresetName : array< CName >;
}

