diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 8ef194bdd4..5929b0baa3 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -36,13 +36,59 @@ namespace OpenRA.Traits Dead = 32 } - // NOTE: Each subsequent category is a superset of the previous categories - // and categories are mutually exclusive. + /// + /// When performing locomotion or pathfinding related checks, + /// determines whether the blocking rules will be applied when encountering other actors. + /// public enum BlockedByActor { + /// + /// Actors on the map are ignored, as if they were not present. + /// An actor can only be blocked by impassable terrain. + /// An actor can never be blocked by other actors. The blocking rules will never be evaluated. + /// None, + + /// + /// Actors on the map that are moving, or moveable & allied are ignored. + /// An actor is Immovable is any of the following applies: + /// + /// Lacks the Mobile trait. + /// The Mobile trait is disabled or paused. + /// The Mobile trait property IsImmovable is true. + /// + /// Note the above definition means an actor can be Movable, but may not be Moving, i.e. it is Stationary. + /// Actors are allied if their owners have the relationship. + /// An actor can be blocked by impassable terrain. + /// An actor can be blocked by immovable actors *if* they are deemed as blocking by the blocking rules. + /// An actor can be blocked by an actor capable of moving, if it is not an ally and *if* they are deemed as + /// blocking by the blocking rules. + /// An actor can never be blocked by an allied actor capable of moving, even if the other actor is stationary. + /// An actor can never be blocked by a moving actor. + /// Immovable, + + /// + /// Actors on the map that are moving are ignored. + /// An actor is moving if both of the following apply: + /// + /// It is a Moveable actor (see ). + /// The Mobile trait property CurrentMovementTypes contains the flag Horizontal. + /// + /// Otherwise the actor is deemed to be Stationary. + /// An actor can be blocked by impassable terrain. + /// An actor can be blocked by immovable actors and stationary actors *if* they are deemed as blocking by the + /// blocking rules. + /// An actor can never be blocked by a moving actor. + /// Stationary, + + /// + /// Actors on the map are not ignored. + /// An actor can be blocked by impassable terrain. + /// An actor can be blocked by immovable actors, stationary actors and moving actors *if* they are deemed as + /// blocking by the blocking rules. + /// All }