An agent gate decorates another terrain type and changes its behavior
so that all agents except the player consider that cell impassable,
and will not move through it. This can be used to keep agents in certain
areas, if desirable.

canEnter(Agent agent,
Cell cell,
Direction direction)
Can the (non-player) agent enter this terrain? Without regard to side
effects, this method should determine if the agent can actually move into
the cell.

boolean

canExit(Agent agent,
Cell cell,
Direction direction)
Can the (non-player) agent exit this terrain? Without regard to side
effects, this method should determine if the agent can actually move into
the cell.

AgentGate

canEnter

Can the (non-player) agent enter this terrain? Without regard to side
effects, this method should determine if the agent can actually move into
the cell. Error on the side of caution and return false if the answer
is ambiguous.

canExit

Can the (non-player) agent exit this terrain? Without regard to side
effects, this method should determine if the agent can actually move into
the cell. Error on the side of caution and return false if the answer
is ambiguous.