/** * Activated when an actor touches another actor. Will be called on both actors, first on the actor that * was originally touched, then on the actor that did the touching * * Originator: the actor that owns this event * Instigator: the actor that was touched * Copyright 1998-2013 Epic Games, Inc. All Rights Reserved. */ class SeqEvent_Touch extends SequenceEvent native(Sequence); cpptext { virtual UBOOL CheckTouchActivate(AActor *inOriginator, AActor *inInstigator, UBOOL bTest = FALSE); virtual UBOOL CheckUnTouchActivate(AActor *inOriginator, AActor *inInstigator, UBOOL bTest = FALSE); protected: // hide the default implementation to force use of CheckTouchActivate/CheckUnTouchActivate virtual UBOOL CheckActivate(AActor *InOriginator, AActor *InInstigator, UBOOL bTest=FALSE, TArray* ActivateIndices = NULL, UBOOL bPushTop = FALSE); virtual void DoTouchActivation(AActor *InOriginator, AActor *InInstigator); virtual void DoUnTouchActivation(AActor *InOriginator, AActor *InInstigator, INT TouchIdx); }; //========================== // Base variables /** List of class types that are considered valid for this event */ var(TouchTypes) array > ClassProximityTypes; /** List of class types that are considered valid for this event */ var(TouchTypes) array > IgnoredClassProximityTypes; /** Force the player to be overlapping at the time of activation? */ var() bool bForceOverlapping; /** * Use Instigator, not actual Actor. * For projectiles, it returns the instigator. */ var() bool bUseInstigator; /** whether dead (Health < 0) pawns can be considered touching */ var() bool bAllowDeadPawns; /** List of all actors that have activated this touch event, so that untouch may be properly fired. */ var array TouchedList; native noexport final function bool CheckTouchActivate(Actor InOriginator, Actor InInstigator, optional bool bTest); native noexport final function bool CheckUnTouchActivate(Actor InOriginator, Actor InInstigator, optional bool bTest); event Toggled() { local int Idx; // if now enabled if (bEnabled) { // check activation for everything currently touching the originator if (Originator != None) { for (Idx = 0; Idx < Originator.Touching.Length; Idx++) { CheckTouchActivate(Originator,Originator.Touching[Idx]); } } } else { // otherwise clear the touched list TouchedList.Length = 0; } } /** notification that the given Pawn has died while touching an Actor with this event connected to it * @param P - the pawn that died */ function NotifyTouchingPawnDied(Pawn P) { if (!bAllowDeadPawns) { CheckUnTouchActivate(Originator, P); } } /** * Return the version number for this class. Child classes should increment this method by calling Super then adding * a individual class version to the result. When a class is first created, the number should be 0; each time one of the * link arrays is modified (VariableLinks, OutputLinks, InputLinks, etc.), the number that is added to the result of * Super.GetObjClassVersion() should be incremented by 1. * * @return the version number for this specific class. */ static event int GetObjClassVersion() { return Super.GetObjClassVersion() + 1; } defaultproperties { ObjName="Touch" ObjCategory="Physics" ClassProximityTypes(0)=class'Pawn' // NVCHANGE_BEGIN: DMS -- Allow Destructibles to be damaged by damage volumes ClassProximityTypes(1)=class'ApexDestructibleActor' // NVCHANGE_END: DMS -- Allow Destructibles to be damaged by damage volumes OutputLinks(0)=(LinkDesc="Touched") OutputLinks(1)=(LinkDesc="UnTouched") OutputLinks(2)=(LinkDesc="Empty") // default to overlap check, as this is generally the expected behavior bForceOverlapping=TRUE // set a default retrigger delay since touches are fairly frequent ReTriggerDelay=0.1f }