//============================================================================= // KFChokePointTrigger //============================================================================= // A custom trigger used to mark bottleneck locations in the map for special // special AI considerations. KFDoorTriggers are also Chokepoints. // DOES NOT currently support overlapping touch! //============================================================================= // Killing Floor 2 // Copyright (C) 2015 Tripwire Interactive LLC //============================================================================= class KFTrigger_ChokePoint extends Trigger_PawnsOnly placeable native(AI); cpptext { #if WITH_EDITOR virtual void CheckForErrors(); // Skip 'Trigger is not referenced' warning #endif } /** If true, larger enemies will have reduced collision while going through this choke point */ var() bool bReduceCollisionRadius; /** If true, collision between all zeds will be reduced while attempting to go through this choke point */ var() bool bReduceTeammateCollision; /** The reduced size of a zed going through a chokepiont */ var const float MaxCollisionRadius; simulated event Touch(Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal) { local KFPawn_Monster KFPM; super.Touch(Other, OtherComp, HitLocation, HitNormal); if( bReduceCollisionRadius ) { KFPM = KFPawn_Monster(Other); if( KFPM != none ) { KFPM.CurrentChokePointTrigger = self; if( KFPM.CylinderComponent != none && KFPM.CylinderComponent.CollisionRadius > MaxCollisionRadius ) { KFPM.ChokePointTimer(); } } } } simulated event UnTouch(Actor Other) { local KFPawn_Monster KFPM; super.UnTouch( Other ); KFPM = KFPawn_Monster(Other); if( KFPM != none ) { KFPM.CurrentChokePointTrigger = none; } } simulated function bool CanRestoreChokeCollision(KFPawn_Monster KFPM) { local KFPawn_Human TouchingHuman; // If a human is in this volume, restore our collision size ForEach TouchingActors(class'KFPawn_Human',TouchingHuman) { return true; } return false; } simulated function bool CanReduceTeammateCollision() { return bReduceTeammateCollision; } simulated function bool PartialReduceTeammateCollision() { return false; } DefaultProperties { Begin Object NAME=CollisionCylinder LegacyClassName=Trigger_TriggerCylinderComponent_Class CollisionRadius=+00200.000000 CollisionHeight=+00100.000000 End Object bProjTarget=false bStatic=true bReduceCollisionRadius=true bReduceTeammateCollision=true MaxCollisionRadius=36 }