/* -------------------------------------------------------------- Condition_LineOfSight -------------------------------------------------------------- A Condition which is marked complete when a living human player looks at / has an unobstructed line of sight to it. Author : Alex Quick -------------------------------------------------------------- */ class ObjCondition_LineOfSight extends KF_ObjectiveCondition editinlinenew; var () float MinDotProduct; var () float MinDistance; var () bool bPerformLineCheck; var bool bHasLOS; function Reset() { Super.Reset(); bHasLOS = false; } function ConditionTick(float DeltaTime) { local Controller C; local float Dist; for ( C=GetObjOwner().Level.ControllerList; C!=None; C=C.NextController ) { if(KFPlayerController_Story(C) != none && C.Pawn != none) { if(KFPlayerController_Story(C).IsLookingAtLocation(GetLocation(),MinDotProduct) && C.Pawn != none) { Dist = VSize(C.Pawn.Location - GetLocation()); if( Dist <= MinDistance) { bHasLOS = (!bPerformLineCheck || GetObjOwner().FastTrace(PlayerController(C).CalcViewLocation, GetLocation())); //EyePostion() is returning a funny value sometimes. Not sure why. C.Pawn./*EyePosition()*/Location if(bHasLOS) { SetTargetActor(InstigatorName,C.Pawn); break; } } } } } Super.ConditionTick(DeltaTime); } /* returns the percentage of completion for this condition */ function float GetCompletionPct() { return float(bHasLOS) ; } DefaultProperties { bPerformLineCheck=true MinDistance = 1000 }