Currently, UnitAI often calls "MoveToTarget/Point" without checking if we are already in range of that. This works because UnitMotion's MoveToTarget/Point range functions return "false" if we are already in range (according to UM) and the code expects that.
This is broken because:
- Returning "False" when a move is not necessary OR impossible is a weird interface.
- UnitAI should be in charge of deciding if we are in range for actions, not unit motion.
- UnitMotion should not be the component with range checking functions (these have nothing to do with movement, see D981).
- Relying on movement supposes the entity has a UnitMotion component, which it might not. By explicitly checking we are in range first, we are moving closer to merging BuildAI and unitAI.
Note that there are several places in UnitAI where we are already calling Check...Range before moving, so this is arguably a standardisation.
This is a prerequisite to D981 since that currently sends us in an infinite loop because range checks in unit motion and the range functions are actually different.