import enum gamemappinsMappinTargetType
{
	World,
	Minimap,
	Map,
}

importonly struct MappinEntry
{
	import var id : NewMappinID;
	import var worldPosition : Vector4;
}

importonly abstract class IMappinSystem extends IReplicatedGameSystem
{
}

importonly class MappinSystem extends IMappinSystem
{
	public import function ChangeMappinVariant( id : NewMappinID, newVariant : gamedataMappinVariant );
	public import function SetMappinActive( id : NewMappinID, active : Bool );
	public import function SetMappinPosition( id : NewMappinID, position : Vector4 );
	public import function SetMappinScriptData( id : NewMappinID, scriptData : MappinScriptData );
	public import function SetMappinDebugCaption( id : NewMappinID, caption : String );
	public import function RegisterMappin( data : MappinData, position : Vector4 ) : NewMappinID;
	public import function RegisterMappinWithObject( data : MappinData, object : weak< GameObject >, optional slotName : CName, optional offset : Vector3 ) : NewMappinID;
	public import function RegisterGrenadeMappin( data : MappinData, grenadeObject : weak< GameObject > ) : NewMappinID;
	public import function RegisterFastTravelMappin( data : MappinData, fastTravelData : FastTravelPointData ) : NewMappinID;
	public import function RegisterRemotePlayerMappin( data : MappinData, playerObject : weak< GameObject > ) : NewMappinID;
	public import function RegisterVehicleMappin( data : MappinData, object : weak< GameObject >, optional slotName : CName, optional offset : Vector3 ) : NewMappinID;
	public import function UnregisterMappin( id : NewMappinID );
	public import function GetMappinEntries( targetType : gamemappinsMappinTargetType, out mappins : array< MappinEntry > );
	public import function GetMappins( targetType : gamemappinsMappinTargetType, out mappins : array< IMappin > );
	public import function GetMappin( mappinId : NewMappinID ) : IMappin;
	public import function OnAreaEntered( evt : AreaEnteredEvent );
	public import function OnAreaExited( obj : weak< GameObject >, triggerId : EntityID );
	public import function OnAreaTypeChanged( entityID : EntityID, areaType : CName );
	public import function UpdateCurrentLocationName( locationName : String, isNewLocation : Bool );
	public import function GetPointOfInterestMappinSavedState( hash : Uint32, out mappinPhase : Uint16, out mappinVariant : Uint16, out active : Bool ) : Bool;
	public import function GetQuestMappinPositionsByObjective( objectiveHash : Uint32, out positions : array< Vector3 > ) : Bool;
	public import function GetMappinFromObjective( phaseEntry : weak< JournalEntry >, objectiveEntry : weak< JournalEntry > ) : weak< IMappin >;
	public import function GetMappinFromQuest( questEntry : weak< JournalEntry > ) : weak< IMappin >;
	public import function GetQuestMappinPosition( mappinHash : Uint32, out position : Vector3 ) : Bool;
	public import function SetMappinTrackingAlternative( mappinID : NewMappinID, targetMappinID : NewMappinID );
	public import function GetManuallyTrackedMappinID() : NewMappinID;
	public import function GetDelamainTrackedMappinID() : NewMappinID;
	public import function UntrackMappin();
	public import function DebugDiscoverAllPoiMappins();
}

