// Modifying methods.

        public void AddUnit(UnitCore unit, Vector2Int position)
        {
            if (unit is null)
            {
                throw new ArgumentNullException(nameof(unit));
            }
            var onPosition = this[position];

            if (onPosition != null)
            {
                throw new InvalidOperationException($"Position {position} is already occupied by {onPosition}.");
            }
            unit = unit.Clone();
            unit.Connect(Presentation);
            presentationsToUnits[unit.Presentation] = unit;
            unitsToPositions[unit]     = position;
            positionsToUnits[position] = unit;
            state = state.BuildTransition(unit.Presentation);
        }