/**
 * Copyright 1998-2011 Epic Games, Inc. All Rights Reserved.
 */

// Change this or predefine it to your class type
`if(`notdefined(StatsClass))
	`define StatsClass class'KFGameplayEventsWriter'
`endif

`define GET_ZedDeath 			1001
`define GET_KFDamage			1002

`if(`notdefined(StatsContext))

	 `if(`isdefined(GAMEINFO))
		`define StatsContext		GameplayEventsWriter
		`define ValidStatsContext	GameplayEventsWriter != None && GameplayEventsWriter.IsSessionInProgress()
	 `else
		`define StatsContext		KFGameInfo(WorldInfo.Game).GameplayEventsWriter
		`define ValidStatsContext	WorldInfo.Game != None && KFGameInfo(WorldInfo.Game).GameplayEventsWriter != None && KFGameInfo(WorldInfo.Game).GameplayEventsWriter.IsSessionInProgress()
	`endif

`endif

/** Gameplay */
`define RecordZedSpawn(KFPC) if(`ValidStatsContext){`StatsContext.LogPlayerIntEvent(`StatId(ZED_SPAWNED),`KFPC,0);}

/** AI */
`define RecordSpawnVolumeRating(SpawnVolume,FinalRating,UsageRating,LocationRating) if(`ValidStatsContext){`StatsContext.LogSpawnVolumeRating(`SpawnVolume,`FinalRating,`UsageRating,`LocationRating);}
`define RecordPlayersAtSpawn(Player,ViewLoc,ViewRot) if(`ValidStatsContext){`StatsContext.LogPlayersAtSpawn(`Player,`ViewLoc,`ViewRot);}
`define RecordBestSpawnVolume(SpawnVolume, WaveNum, Count) if(`ValidStatsContext){`StatsContext.LogBestSpawnVolume(`SpawnVolume, `WaveNum, `Count);}

`define RecordAIMoveFailure(NPC,ViewLoc,ViewRot,MoveGoal,Msg) if(`ValidStatsContext){`StatsContext.LogAIMoveFailure(`NPC,`ViewLoc,`ViewRot,`MoveGoal,`Msg);}
`define RecordAIGetNextMoveGoalFailure(NPC,ViewLoc,ViewRot,MoveGoal,Msg) if(`ValidStatsContext){`StatsContext.LogAIGetNextMoveGoalFailure(`NPC,`ViewLoc,`ViewRot,`MoveGoal,`Msg);}
`define RecordAIBump(EventID,NPC,NPCLocation,NPCRotation,BumpedActor,Msg) if(`ValidStatsContext){`StatsContext.LogAIBump(`EventID,`NPC,`NPCLocation,`NPCRotation,`BumpedActor,`Msg);}
`define RecordAIJumpSpot(NPC,NPCLocation,NPCRotation,JumpSpot,Msg) if(`ValidStatsContext){`StatsContext.LogAIJumpSpot(`NPC,`NPCLocation,`NPCRotation,`JumpSpot,`Msg);}
`define RecordAIWall(EventID,NPC,NPCLocation,NPCRotation,Wall,Msg) if(`ValidStatsContext){`StatsContext.LogAIWall(`EventID,`NPC,`NPCLocation,`NPCRotation,`Wall,`Msg);}
`define RecordAIDoor(EventID,NPC,NPCLocation,Door,Msg) if(`ValidStatsContext){`StatsContext.LogAIDoor(`EventID,`NPC,`NPCLocation,`Door,`Msg);}
`define RecordAIChargeAttack(NPC,StartLoc,EndLoc,Msg) if(`ValidStatsContext){`StatsContext.LogAIChargeAttack(`NPC,`StartLoc,`EndLoc,`Msg);}
`define RecordAIChangedEnemy(NPC,NewEnemy,OldEnemy,Msg) if(`ValidStatsContext){`StatsContext.LogAIChangedEnemy(`NPC,`NewEnemy,`OldEnemy,`Msg);}
`define RecordAIRedirectedPath(NPC,MoveGoal,Msg) if(`ValidStatsContext){`StatsContext.LogAIRedirectedPath(`NPC,`MoveGoal,`Msg);}
`define RecordAIBlockedPath(NPC,Start,End,Msg) if(`ValidStatsContext){`StatsContext.LogAIBlockedPath(`NPC,`Start,`End,`Msg);}
`define RecordAIPathObstruction(EventID,NPC,Obstruction,Msg) if(`ValidStatsContext){`StatsContext.LogAIPathObstruction(`EventID,`NPC,`Obstruction,`Msg);}
`define RecordAIMoveTimeOut(NPC,MoveTarget,Msg) if(`ValidStatsContext){`StatsContext.LogAIMoveTimeOut(`NPC,`MoveTarget,`Msg);}
`define RecordAIFailedAnchor(EventID,NPC,MoveTarget,Msg) if(`ValidStatsContext){`StatsContext.LogAIFailedAnchor(`EventID,`NPC,`MoveTarget,`Msg);}
`define RecordAIBasedOnPawn(NPC,BasePawn,Msg) if(`ValidStatsContext){`StatsContext.LogAIBasedOnPawn(`NPC,`BasePawn,`Msg);}
`define RecordAIHeadlessWander(NPC,Msg) if(`ValidStatsContext){`StatsContext.LogAIHeadlessWander(`NPC,`Msg);}
`define RecordAIDestroyedDoor(NPC,Door,Msg) if(`ValidStatsContext){`StatsContext.LogAIDestroyedDoor(`NPC,`Door,`Msg);}
`define RecordAIPathGoalEvalAbort(NPC,Eval,StartNav,Msg) if(`ValidStatsContext){`StatsContext.LogAIPathGoalEvalAbort(`NPC,`Eval,`StartNav,`Msg);}
`define RecordAIPathFailure(NPC,Anchor,Goal,Msg) if(`ValidStatsContext){`StatsContext.LogAIPathFailure(`NPC,`Anchor,`Goal,`Msg);}

`include(Engine\Classes\GameStats.uci);