// 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); }