Worst-case scenario: the UEd Goblin wipes the map and burns down your house.
ASCriticalObjectiveVolumes are used in connection with GameObjectives in the UT2004 Assault gametype. If one or more GameObjectives have a CriticalObjectiveVolumeTag which matches this volume's Events->Tag. Then whenever an attacker enters this volume, those objectives will be marked as "critical", and the "critical objective warning" (a siren and flashing HUD icon) will be signalled to the defending team.
- Pawn ConstraintPawnClass
- Only pawns matching this pawn class (or its descendants) will trigger the critical objective alarm when entering this volume.
- Info CheckTimer
- Internal timer used to periodically check if the objective is still "critical".
- This actor is associated with one or more GameObjectives by matching this Tag with the GameObjective's CriticalObjectiveVolumeTag property.
- Skips normal Volume initialization and goes straight to super(Brush).PostBeginPlay() to avoid the AssociatedActorTag stuff in Volume (ASCriticalVolumes do not support associated actors).
- Clean up the CheckTimer, if there is one.
- bool IsCriticalPawn( Pawn P )
- Determine whether the Pawn P matches the requirements (ConstraintPawnClass) for triggering a critical state for the objective.
- bool IsStillCritical()
- Determine whether there are any Pawns touching this volume which pass the IsCriticalPawn test. If there are, re-send the "critical objective warning" to the defenders of all of the objectives associated with this volume. If there aren't any valid touching Pawns, clear the "critical" status on all associated objectives.
- Go to the "Safe" state.
This is the "normal" state of the ASCriticalObjectiveVolume.
- Touch( Actor Other )
- If Other is a Pawn matching the ConstraintPawnClass, set all associated objectives "critical status" to true, send warning to their defenders, and go into the "Critical" state.
This state is entered after the Touch event (in the Safe state) has set the objectives to be "critical".
- Create a new VolumeTimer (and store it in CheckTimer) to periodically see if we're still critical.
- TimerPop( VolumeTimer T )
- When the CheckTimer pops, call IsStillCritical to check if we're still critical.
Apparently entered when one of the associated objectives is disabled.
- Check if we have any remaining active objectives, and if not, go to the "Disabled" state.
This state is entered when we don't have any more active objectives to take care of.
- If we have a CheckTimer, clean it up.