LevelMapParams constructor

LevelMapParams({
  1. required int levelCount,
  2. required double currentLevel,
  3. Color pathColor = Colors.black,
  4. double levelHeight = 200,
  5. double pathStrokeWidth = 3,
  6. double dashLengthFactor = 0.025,
  7. bool enableVariationBetweenCurves = true,
  8. double maxVariationFactor = 0.2,
  9. bool showPathShadow = true,
  10. Offset shadowDistanceFromPathOffset = const Offset(-2, 12),
  11. Offset minReferencePositionOffsetFactor = const Offset(0.4, 0.3),
  12. Offset maxReferencePositionOffsetFactor = const Offset(1, 0.7),
  13. Offset? firstCurveReferencePointOffsetFactor,
  14. List<ImageParams>? bgImagesToBePaintedRandomly,
  15. ImageParams? startLevelImage,
  16. required ImageParams completedLevelImage,
  17. required ImageParams currentLevelImage,
  18. required ImageParams lockedLevelImage,
  19. ImageParams? pathEndImage,
})

Note: If you see any hard edge, decrease the maxVariationFactor,else disable the enableVariationBetweenCurves parameter, Default is 0.2. If you need the curves to be fixed in every build, set the enableVariationBetweenCurves to false and set the firstCurveReferencePointOffsetFactor, Default is random.

Implementation

LevelMapParams({
  required this.levelCount,
  required double currentLevel,
  this.pathColor = Colors.black,
  this.levelHeight = 200,
  this.pathStrokeWidth = 3,
  this.dashLengthFactor = 0.025,
  this.enableVariationBetweenCurves = true,
  this.maxVariationFactor = 0.2,
  this.showPathShadow = true,
  this.shadowDistanceFromPathOffset = const Offset(-2, 12),
  this.minReferencePositionOffsetFactor = const Offset(0.4, 0.3),
  this.maxReferencePositionOffsetFactor = const Offset(1, 0.7),
  this.firstCurveReferencePointOffsetFactor,
  this.bgImagesToBePaintedRandomly,
  this.startLevelImage,
  required this.completedLevelImage,
  required this.currentLevelImage,
  required this.lockedLevelImage,
  this.pathEndImage,
})  : assert(currentLevel <= levelCount,
          "Current level should be less than total level count"),
      assert(currentLevel >= 1, "Current level should at least be 1"),
      assert(dashLengthFactor >= 0 && dashLengthFactor <= 0.5,
          "Dash length factor should be between 0 and 0.5"),
      assert(100 % (dashLengthFactor * 100) == 0,
          "Dash length factor should be a factor of 1"),
      assert(
          minReferencePositionOffsetFactor.dx <= 1 &&
              minReferencePositionOffsetFactor.dx >= 0 &&
              minReferencePositionOffsetFactor.dy <= 1 &&
              minReferencePositionOffsetFactor.dy >= 0,
          "dx and dy of minEndReferenceOffsetVariationFactor should be between 0 and 1"),
      assert(
          maxReferencePositionOffsetFactor.dx <= 1 &&
              maxReferencePositionOffsetFactor.dx >= 0 &&
              maxReferencePositionOffsetFactor.dy <= 1 &&
              maxReferencePositionOffsetFactor.dy >= 0,
          "dx and dy of maxEndReferenceOffsetVariationFactor should be between 0 and 1"),
      this.curveReferenceOffsetVariationForEachLevel = List.generate(
          levelCount,
          (index) => Offset(
              (_random.nextBool()
                      ? _random.nextDouble()
                      : -_random.nextDouble()) *
                  maxVariationFactor,
              (_random.nextBool()
                      ? _random.nextDouble()
                      : -_random.nextDouble()) *
                  maxVariationFactor),
          growable: false) {
  this.currentLevel = currentLevel.clamp(1, levelCount).toDouble();
  this.firstCurveReferencePointOffsetFactor =
      firstCurveReferencePointOffsetFactor ??
          Offset(_random.nextDouble(), _random.nextDouble());
}