diff --git a/lib/application/calculator_asc_materials_item/calculator_asc_materials_item_bloc.dart b/lib/application/calculator_asc_materials_item/calculator_asc_materials_item_bloc.dart index 481d4761d..443fed9b7 100644 --- a/lib/application/calculator_asc_materials_item/calculator_asc_materials_item_bloc.dart +++ b/lib/application/calculator_asc_materials_item/calculator_asc_materials_item_bloc.dart @@ -115,8 +115,8 @@ class CalculatorAscMaterialsItemBloc extends Bloc[]; @@ -212,7 +212,11 @@ class CalculatorAscMaterialsItemBloc extends Bloc(cl, dl); } - int _getClosestAscensionLevel(int toItemLevel) { + /// Gets the closest ascension level [toItemLevel] + /// + /// Keep in mind that you can be of level 80 but that doesn't mean you have ascended to level 6, + /// that's why you must provide [isAscended] + int _getClosestAscensionLevel(int toItemLevel, bool isAscended) { if (toItemLevel <= 0) { throw Exception('The provided itemLevel = $toItemLevel is not valid'); } @@ -222,6 +226,7 @@ class CalculatorAscMaterialsItemBloc extends Bloc= toItemLevel && ascensionLevel == -1) { ascensionLevel = kvp.key; + break; } continue; } @@ -233,7 +238,7 @@ class CalculatorAscMaterialsItemBloc extends Bloc kvp.key == ascensionLevel).value) { - return ascensionLevel; + return isAscended ? ascensionLevel : ascensionLevel - 1; } return ascensionLevel - 1; @@ -252,7 +257,7 @@ class CalculatorAscMaterialsItemBloc extends Bloc kvp.key == currentAscensionLevel); - final suggestedAscLevel = _getClosestAscensionLevel(currentItemLevel); + final suggestedAscLevel = _getClosestAscensionLevel(currentItemLevel, true); if (currentKvp.key != suggestedAscLevel) { return currentKvp.value; @@ -304,16 +309,36 @@ class CalculatorAscMaterialsItemBloc extends Bloc kvp.value.contains(skillLevel)); - final isNotTheLast = entry.value.last != skillLevel; - if (inclusive) { - return entry.key <= maxAscensionLevel && isNotTheLast; + /// Checks if a skill can be increased. + /// + /// Keep in mind that the values provided must be already validated + bool _canSkillBeIncreased(int skillLevel, int maxAscensionLevel) { + if (maxAscensionLevel < 0) { + throw Exception('The provided ascension level = $maxAscensionLevel is not valid'); } - return entry.key < maxAscensionLevel && isNotTheLast; + + if (maxAscensionLevel == 0 && skillLevel > minSkillLevel) { + return true; + } else if (maxAscensionLevel == 0 && skillLevel == minSkillLevel) { + return false; + } + + final currentSkillEntry = skillAscensionMap.entries.firstWhere((kvp) => kvp.value.contains(skillLevel)); + final ascensionEntry = skillAscensionMap.entries.firstWhere((kvp) => kvp.key == maxAscensionLevel); + + //If the ascension level are different, just return true, since we don't need to make any validation in this method + if (ascensionEntry.key != currentSkillEntry.key) { + return true; + } + + //otherwise, return true only if this skill is not the last in the map + final isNotTheLast = currentSkillEntry.value.last != skillLevel; + return isNotTheLast; } + /// This method checks if the provided skills are enabled or not. + /// + /// Keep in mind that the values provided must be already validated Tuple4 _isSkillEnabled( int currentLevel, int desiredLevel, @@ -321,20 +346,11 @@ class CalculatorAscMaterialsItemBloc extends Bloc(currentDecEnabled, currentIncEnabled, desiredDecEnabled, desiredIncEnabled); - //Current - // incrementIsDisabled: currentLevel == CalculatorAscMaterialsItemBloc.maxSkillLevel, - // decrementIsDisabled: currentLevel == CalculatorAscMaterialsItemBloc.minSkillLevel, - - //Desired - // incrementIsDisabled: desiredLevel == CalculatorAscMaterialsItemBloc.maxSkillLevel, - // decrementIsDisabled: desiredLevel == CalculatorAscMaterialsItemBloc.minSkillLevel, } } diff --git a/lib/domain/app_constants.dart b/lib/domain/app_constants.dart index 83955b2bf..0df476aee 100644 --- a/lib/domain/app_constants.dart +++ b/lib/domain/app_constants.dart @@ -37,187 +37,199 @@ const skillAscensionMap = { }; const characterExp = [ - ItemExperience.forCharacters(1, 1000, 0), - ItemExperience.forCharacters(2, 1325, 1000), - ItemExperience.forCharacters(3, 1700, 2325), - ItemExperience.forCharacters(4, 2150, 4025), - ItemExperience.forCharacters(5, 2625, 6175), - ItemExperience.forCharacters(6, 3150, 8800), - ItemExperience.forCharacters(7, 3725, 11950), - ItemExperience.forCharacters(8, 4350, 15675), - ItemExperience.forCharacters(9, 5000, 20025), - ItemExperience.forCharacters(10, 5700, 25025), - ItemExperience.forCharacters(11, 6450, 30725), - ItemExperience.forCharacters(12, 7225, 37175), - ItemExperience.forCharacters(13, 8050, 44400), - ItemExperience.forCharacters(14, 8925, 52450), - ItemExperience.forCharacters(15, 9825, 61375), - ItemExperience.forCharacters(16, 10750, 71200), - ItemExperience.forCharacters(17, 11725, 81950), - ItemExperience.forCharacters(18, 12725, 93675), - ItemExperience.forCharacters(19, 13775, 106400), - ItemExperience.forCharacters(20, 14875, 120175), - ItemExperience.forCharacters(21, 16800, 135050), - ItemExperience.forCharacters(22, 18000, 151850), - ItemExperience.forCharacters(23, 19250, 169850), - ItemExperience.forCharacters(24, 20550, 189100), - ItemExperience.forCharacters(25, 21875, 209650), - ItemExperience.forCharacters(26, 23250, 231525), - ItemExperience.forCharacters(27, 24650, 254775), - ItemExperience.forCharacters(28, 26100, 279425), - ItemExperience.forCharacters(29, 27575, 305525), - ItemExperience.forCharacters(30, 29100, 333100), - ItemExperience.forCharacters(31, 30650, 362200), - ItemExperience.forCharacters(32, 32250, 392850), - ItemExperience.forCharacters(33, 33875, 425100), - ItemExperience.forCharacters(34, 35550, 458975), - ItemExperience.forCharacters(35, 37250, 494525), - ItemExperience.forCharacters(36, 38975, 531775), - ItemExperience.forCharacters(37, 40750, 570750), - ItemExperience.forCharacters(38, 42575, 611500), - ItemExperience.forCharacters(39, 44425, 654075), - ItemExperience.forCharacters(40, 46300, 698500), - ItemExperience.forCharacters(41, 50625, 744800), - ItemExperience.forCharacters(42, 52700, 795425), - ItemExperience.forCharacters(43, 54775, 848125), - ItemExperience.forCharacters(44, 56900, 902900), - ItemExperience.forCharacters(45, 59075, 959800), - ItemExperience.forCharacters(46, 61275, 1018875), - ItemExperience.forCharacters(47, 63525, 1080150), - ItemExperience.forCharacters(48, 65800, 1143675), - ItemExperience.forCharacters(49, 68125, 1209475), - ItemExperience.forCharacters(50, 70475, 1277600), - ItemExperience.forCharacters(51, 76500, 1348075), - ItemExperience.forCharacters(52, 79050, 1424575), - ItemExperience.forCharacters(53, 81650, 1503625), - ItemExperience.forCharacters(54, 84275, 1585275), - ItemExperience.forCharacters(55, 86950, 1669550), - ItemExperience.forCharacters(56, 89650, 1756500), - ItemExperience.forCharacters(57, 92400, 1846150), - ItemExperience.forCharacters(58, 95175, 1938550), - ItemExperience.forCharacters(59, 98000, 2033725), - ItemExperience.forCharacters(60, 100875, 2131725), - ItemExperience.forCharacters(61, 108950, 2232600), - ItemExperience.forCharacters(62, 112050, 2341550), - ItemExperience.forCharacters(63, 115175, 2453600), - ItemExperience.forCharacters(64, 118325, 2568775), - ItemExperience.forCharacters(65, 121525, 2687100), - ItemExperience.forCharacters(66, 124775, 2808625), - ItemExperience.forCharacters(67, 128075, 2933400), - ItemExperience.forCharacters(68, 131400, 3061475), - ItemExperience.forCharacters(69, 134775, 3192875), - ItemExperience.forCharacters(70, 138175, 3327650), - ItemExperience.forCharacters(71, 148700, 3465825), - ItemExperience.forCharacters(72, 152375, 3614525), - ItemExperience.forCharacters(73, 156075, 3766900), - ItemExperience.forCharacters(74, 159825, 3922975), - ItemExperience.forCharacters(75, 163600, 4082800), - ItemExperience.forCharacters(76, 167425, 4246400), - ItemExperience.forCharacters(77, 171300, 4413825), - ItemExperience.forCharacters(78, 175225, 4585125), - ItemExperience.forCharacters(79, 179175, 4760350), - ItemExperience.forCharacters(80, 183175, 4939525), - ItemExperience.forCharacters(81, 216225, 5122700), - ItemExperience.forCharacters(82, 243025, 5338925), - ItemExperience.forCharacters(83, 273100, 5581950), - ItemExperience.forCharacters(84, 306800, 5855050), - ItemExperience.forCharacters(85, 344600, 6161850), - ItemExperience.forCharacters(86, 386950, 6506450), - ItemExperience.forCharacters(87, 434425, 6893400), - ItemExperience.forCharacters(88, 487625, 7327825), - ItemExperience.forCharacters(89, 547200, 7815450), - ItemExperience.forCharacters(90, -1, 8362650), + ItemExperienceModel.forCharacters(1, 1000, 0), + ItemExperienceModel.forCharacters(2, 1325, 1000), + ItemExperienceModel.forCharacters(3, 1700, 2325), + ItemExperienceModel.forCharacters(4, 2150, 4025), + ItemExperienceModel.forCharacters(5, 2625, 6175), + ItemExperienceModel.forCharacters(6, 3150, 8800), + ItemExperienceModel.forCharacters(7, 3725, 11950), + ItemExperienceModel.forCharacters(8, 4350, 15675), + ItemExperienceModel.forCharacters(9, 5000, 20025), + ItemExperienceModel.forCharacters(10, 5700, 25025), + ItemExperienceModel.forCharacters(11, 6450, 30725), + ItemExperienceModel.forCharacters(12, 7225, 37175), + ItemExperienceModel.forCharacters(13, 8050, 44400), + ItemExperienceModel.forCharacters(14, 8925, 52450), + ItemExperienceModel.forCharacters(15, 9825, 61375), + ItemExperienceModel.forCharacters(16, 10750, 71200), + ItemExperienceModel.forCharacters(17, 11725, 81950), + ItemExperienceModel.forCharacters(18, 12725, 93675), + ItemExperienceModel.forCharacters(19, 13775, 106400), + ItemExperienceModel.forCharacters(20, 14875, 120175), + ItemExperienceModel.forCharacters(21, 16800, 135050), + ItemExperienceModel.forCharacters(22, 18000, 151850), + ItemExperienceModel.forCharacters(23, 19250, 169850), + ItemExperienceModel.forCharacters(24, 20550, 189100), + ItemExperienceModel.forCharacters(25, 21875, 209650), + ItemExperienceModel.forCharacters(26, 23250, 231525), + ItemExperienceModel.forCharacters(27, 24650, 254775), + ItemExperienceModel.forCharacters(28, 26100, 279425), + ItemExperienceModel.forCharacters(29, 27575, 305525), + ItemExperienceModel.forCharacters(30, 29100, 333100), + ItemExperienceModel.forCharacters(31, 30650, 362200), + ItemExperienceModel.forCharacters(32, 32250, 392850), + ItemExperienceModel.forCharacters(33, 33875, 425100), + ItemExperienceModel.forCharacters(34, 35550, 458975), + ItemExperienceModel.forCharacters(35, 37250, 494525), + ItemExperienceModel.forCharacters(36, 38975, 531775), + ItemExperienceModel.forCharacters(37, 40750, 570750), + ItemExperienceModel.forCharacters(38, 42575, 611500), + ItemExperienceModel.forCharacters(39, 44425, 654075), + ItemExperienceModel.forCharacters(40, 46300, 698500), + ItemExperienceModel.forCharacters(41, 50625, 744800), + ItemExperienceModel.forCharacters(42, 52700, 795425), + ItemExperienceModel.forCharacters(43, 54775, 848125), + ItemExperienceModel.forCharacters(44, 56900, 902900), + ItemExperienceModel.forCharacters(45, 59075, 959800), + ItemExperienceModel.forCharacters(46, 61275, 1018875), + ItemExperienceModel.forCharacters(47, 63525, 1080150), + ItemExperienceModel.forCharacters(48, 65800, 1143675), + ItemExperienceModel.forCharacters(49, 68125, 1209475), + ItemExperienceModel.forCharacters(50, 70475, 1277600), + ItemExperienceModel.forCharacters(51, 76500, 1348075), + ItemExperienceModel.forCharacters(52, 79050, 1424575), + ItemExperienceModel.forCharacters(53, 81650, 1503625), + ItemExperienceModel.forCharacters(54, 84275, 1585275), + ItemExperienceModel.forCharacters(55, 86950, 1669550), + ItemExperienceModel.forCharacters(56, 89650, 1756500), + ItemExperienceModel.forCharacters(57, 92400, 1846150), + ItemExperienceModel.forCharacters(58, 95175, 1938550), + ItemExperienceModel.forCharacters(59, 98000, 2033725), + ItemExperienceModel.forCharacters(60, 100875, 2131725), + ItemExperienceModel.forCharacters(61, 108950, 2232600), + ItemExperienceModel.forCharacters(62, 112050, 2341550), + ItemExperienceModel.forCharacters(63, 115175, 2453600), + ItemExperienceModel.forCharacters(64, 118325, 2568775), + ItemExperienceModel.forCharacters(65, 121525, 2687100), + ItemExperienceModel.forCharacters(66, 124775, 2808625), + ItemExperienceModel.forCharacters(67, 128075, 2933400), + ItemExperienceModel.forCharacters(68, 131400, 3061475), + ItemExperienceModel.forCharacters(69, 134775, 3192875), + ItemExperienceModel.forCharacters(70, 138175, 3327650), + ItemExperienceModel.forCharacters(71, 148700, 3465825), + ItemExperienceModel.forCharacters(72, 152375, 3614525), + ItemExperienceModel.forCharacters(73, 156075, 3766900), + ItemExperienceModel.forCharacters(74, 159825, 3922975), + ItemExperienceModel.forCharacters(75, 163600, 4082800), + ItemExperienceModel.forCharacters(76, 167425, 4246400), + ItemExperienceModel.forCharacters(77, 171300, 4413825), + ItemExperienceModel.forCharacters(78, 175225, 4585125), + ItemExperienceModel.forCharacters(79, 179175, 4760350), + ItemExperienceModel.forCharacters(80, 183175, 4939525), + ItemExperienceModel.forCharacters(81, 216225, 5122700), + ItemExperienceModel.forCharacters(82, 243025, 5338925), + ItemExperienceModel.forCharacters(83, 273100, 5581950), + ItemExperienceModel.forCharacters(84, 306800, 5855050), + ItemExperienceModel.forCharacters(85, 344600, 6161850), + ItemExperienceModel.forCharacters(86, 386950, 6506450), + ItemExperienceModel.forCharacters(87, 434425, 6893400), + ItemExperienceModel.forCharacters(88, 487625, 7327825), + ItemExperienceModel.forCharacters(89, 547200, 7815450), + ItemExperienceModel.forCharacters(90, -1, 8362650), ]; const weaponExp = [ - ItemExperience.forWeapons(1, 600, 0), - ItemExperience.forWeapons(2, 950, 600), - ItemExperience.forWeapons(3, 1350, 1550), - ItemExperience.forWeapons(4, 1800, 2900), - ItemExperience.forWeapons(5, 2325, 4700), - ItemExperience.forWeapons(6, 2925, 7025), - ItemExperience.forWeapons(7, 3525, 9950), - ItemExperience.forWeapons(8, 4200, 13475), - ItemExperience.forWeapons(9, 4950, 17675), - ItemExperience.forWeapons(10, 5700, 22625), - ItemExperience.forWeapons(11, 6525, 28325), - ItemExperience.forWeapons(12, 7400, 34850), - ItemExperience.forWeapons(13, 8300, 42250), - ItemExperience.forWeapons(14, 9225, 50550), - ItemExperience.forWeapons(15, 10200, 59775), - ItemExperience.forWeapons(16, 11250, 69975), - ItemExperience.forWeapons(17, 12300, 81225), - ItemExperience.forWeapons(18, 13425, 93525), - ItemExperience.forWeapons(19, 14600, 106950), - ItemExperience.forWeapons(20, 15750, 121550), - ItemExperience.forWeapons(21, 17850, 137300), - ItemExperience.forWeapons(22, 19175, 155150), - ItemExperience.forWeapons(23, 20550, 174325), - ItemExperience.forWeapons(24, 21975, 194875), - ItemExperience.forWeapons(25, 23450, 216850), - ItemExperience.forWeapons(26, 24950, 240300), - ItemExperience.forWeapons(27, 26475, 265250), - ItemExperience.forWeapons(28, 28050, 291725), - ItemExperience.forWeapons(29, 29675, 319775), - ItemExperience.forWeapons(30, 31350, 349450), - ItemExperience.forWeapons(31, 33050, 380800), - ItemExperience.forWeapons(32, 34800, 413850), - ItemExperience.forWeapons(33, 36575, 448650), - ItemExperience.forWeapons(34, 38400, 485225), - ItemExperience.forWeapons(35, 40250, 523625), - ItemExperience.forWeapons(36, 42150, 563875), - ItemExperience.forWeapons(37, 44100, 606025), - ItemExperience.forWeapons(38, 46100, 650125), - ItemExperience.forWeapons(39, 48125, 696225), - ItemExperience.forWeapons(40, 50150, 744350), - ItemExperience.forWeapons(41, 54875, 794500), - ItemExperience.forWeapons(42, 57125, 849375), - ItemExperience.forWeapons(43, 59400, 906500), - ItemExperience.forWeapons(44, 61725, 965900), - ItemExperience.forWeapons(45, 64100, 1027625), - ItemExperience.forWeapons(46, 66500, 1091725), - ItemExperience.forWeapons(47, 68925, 1158225), - ItemExperience.forWeapons(48, 71400, 1227150), - ItemExperience.forWeapons(49, 73950, 1298550), - ItemExperience.forWeapons(50, 76500, 1372500), - ItemExperience.forWeapons(51, 83075, 1449000), - ItemExperience.forWeapons(52, 85850, 1532075), - ItemExperience.forWeapons(53, 88650, 1617925), - ItemExperience.forWeapons(54, 91550, 1706575), - ItemExperience.forWeapons(55, 94425, 1798125), - ItemExperience.forWeapons(56, 97400, 1892550), - ItemExperience.forWeapons(57, 100350, 1989950), - ItemExperience.forWeapons(58, 103400, 2090300), - ItemExperience.forWeapons(59, 106475, 2193700), - ItemExperience.forWeapons(60, 109575, 2300175), - ItemExperience.forWeapons(61, 118350, 2409750), - ItemExperience.forWeapons(62, 121700, 2528100), - ItemExperience.forWeapons(63, 125100, 2649800), - ItemExperience.forWeapons(64, 128550, 2774900), - ItemExperience.forWeapons(65, 132050, 2903450), - ItemExperience.forWeapons(66, 135575, 3035500), - ItemExperience.forWeapons(67, 139125, 3171075), - ItemExperience.forWeapons(68, 142725, 3310200), - ItemExperience.forWeapons(69, 146375, 3452925), - ItemExperience.forWeapons(70, 150075, 3599300), - ItemExperience.forWeapons(71, 161525, 3749375), - ItemExperience.forWeapons(72, 165500, 3910900), - ItemExperience.forWeapons(73, 169500, 4076400), - ItemExperience.forWeapons(74, 173550, 4245900), - ItemExperience.forWeapons(75, 177650, 4419450), - ItemExperience.forWeapons(76, 181800, 4597100), - ItemExperience.forWeapons(77, 186000, 4778900), - ItemExperience.forWeapons(78, 190250, 4964900), - ItemExperience.forWeapons(79, 194525, 5155150), - ItemExperience.forWeapons(80, 198875, 5349675), - ItemExperience.forWeapons(81, 234725, 5548550), - ItemExperience.forWeapons(82, 263825, 5783275), - ItemExperience.forWeapons(83, 296400, 6047100), - ItemExperience.forWeapons(84, 332975, 6343500), - ItemExperience.forWeapons(85, 373950, 6676475), - ItemExperience.forWeapons(86, 419925, 7050425), - ItemExperience.forWeapons(87, 471375, 7470350), - ItemExperience.forWeapons(88, 529050, 7941725), - ItemExperience.forWeapons(89, 593675, 8470775), - ItemExperience.forWeapons(90, -1, 9064450), + ItemExperienceModel.forWeapons(1, 600, 0), + ItemExperienceModel.forWeapons(2, 950, 600), + ItemExperienceModel.forWeapons(3, 1350, 1550), + ItemExperienceModel.forWeapons(4, 1800, 2900), + ItemExperienceModel.forWeapons(5, 2325, 4700), + ItemExperienceModel.forWeapons(6, 2925, 7025), + ItemExperienceModel.forWeapons(7, 3525, 9950), + ItemExperienceModel.forWeapons(8, 4200, 13475), + ItemExperienceModel.forWeapons(9, 4950, 17675), + ItemExperienceModel.forWeapons(10, 5700, 22625), + ItemExperienceModel.forWeapons(11, 6525, 28325), + ItemExperienceModel.forWeapons(12, 7400, 34850), + ItemExperienceModel.forWeapons(13, 8300, 42250), + ItemExperienceModel.forWeapons(14, 9225, 50550), + ItemExperienceModel.forWeapons(15, 10200, 59775), + ItemExperienceModel.forWeapons(16, 11250, 69975), + ItemExperienceModel.forWeapons(17, 12300, 81225), + ItemExperienceModel.forWeapons(18, 13425, 93525), + ItemExperienceModel.forWeapons(19, 14600, 106950), + ItemExperienceModel.forWeapons(20, 15750, 121550), + ItemExperienceModel.forWeapons(21, 17850, 137300), + ItemExperienceModel.forWeapons(22, 19175, 155150), + ItemExperienceModel.forWeapons(23, 20550, 174325), + ItemExperienceModel.forWeapons(24, 21975, 194875), + ItemExperienceModel.forWeapons(25, 23450, 216850), + ItemExperienceModel.forWeapons(26, 24950, 240300), + ItemExperienceModel.forWeapons(27, 26475, 265250), + ItemExperienceModel.forWeapons(28, 28050, 291725), + ItemExperienceModel.forWeapons(29, 29675, 319775), + ItemExperienceModel.forWeapons(30, 31350, 349450), + ItemExperienceModel.forWeapons(31, 33050, 380800), + ItemExperienceModel.forWeapons(32, 34800, 413850), + ItemExperienceModel.forWeapons(33, 36575, 448650), + ItemExperienceModel.forWeapons(34, 38400, 485225), + ItemExperienceModel.forWeapons(35, 40250, 523625), + ItemExperienceModel.forWeapons(36, 42150, 563875), + ItemExperienceModel.forWeapons(37, 44100, 606025), + ItemExperienceModel.forWeapons(38, 46100, 650125), + ItemExperienceModel.forWeapons(39, 48125, 696225), + ItemExperienceModel.forWeapons(40, 50150, 744350), + ItemExperienceModel.forWeapons(41, 54875, 794500), + ItemExperienceModel.forWeapons(42, 57125, 849375), + ItemExperienceModel.forWeapons(43, 59400, 906500), + ItemExperienceModel.forWeapons(44, 61725, 965900), + ItemExperienceModel.forWeapons(45, 64100, 1027625), + ItemExperienceModel.forWeapons(46, 66500, 1091725), + ItemExperienceModel.forWeapons(47, 68925, 1158225), + ItemExperienceModel.forWeapons(48, 71400, 1227150), + ItemExperienceModel.forWeapons(49, 73950, 1298550), + ItemExperienceModel.forWeapons(50, 76500, 1372500), + ItemExperienceModel.forWeapons(51, 83075, 1449000), + ItemExperienceModel.forWeapons(52, 85850, 1532075), + ItemExperienceModel.forWeapons(53, 88650, 1617925), + ItemExperienceModel.forWeapons(54, 91550, 1706575), + ItemExperienceModel.forWeapons(55, 94425, 1798125), + ItemExperienceModel.forWeapons(56, 97400, 1892550), + ItemExperienceModel.forWeapons(57, 100350, 1989950), + ItemExperienceModel.forWeapons(58, 103400, 2090300), + ItemExperienceModel.forWeapons(59, 106475, 2193700), + ItemExperienceModel.forWeapons(60, 109575, 2300175), + ItemExperienceModel.forWeapons(61, 118350, 2409750), + ItemExperienceModel.forWeapons(62, 121700, 2528100), + ItemExperienceModel.forWeapons(63, 125100, 2649800), + ItemExperienceModel.forWeapons(64, 128550, 2774900), + ItemExperienceModel.forWeapons(65, 132050, 2903450), + ItemExperienceModel.forWeapons(66, 135575, 3035500), + ItemExperienceModel.forWeapons(67, 139125, 3171075), + ItemExperienceModel.forWeapons(68, 142725, 3310200), + ItemExperienceModel.forWeapons(69, 146375, 3452925), + ItemExperienceModel.forWeapons(70, 150075, 3599300), + ItemExperienceModel.forWeapons(71, 161525, 3749375), + ItemExperienceModel.forWeapons(72, 165500, 3910900), + ItemExperienceModel.forWeapons(73, 169500, 4076400), + ItemExperienceModel.forWeapons(74, 173550, 4245900), + ItemExperienceModel.forWeapons(75, 177650, 4419450), + ItemExperienceModel.forWeapons(76, 181800, 4597100), + ItemExperienceModel.forWeapons(77, 186000, 4778900), + ItemExperienceModel.forWeapons(78, 190250, 4964900), + ItemExperienceModel.forWeapons(79, 194525, 5155150), + ItemExperienceModel.forWeapons(80, 198875, 5349675), + ItemExperienceModel.forWeapons(81, 234725, 5548550), + ItemExperienceModel.forWeapons(82, 263825, 5783275), + ItemExperienceModel.forWeapons(83, 296400, 6047100), + ItemExperienceModel.forWeapons(84, 332975, 6343500), + ItemExperienceModel.forWeapons(85, 373950, 6676475), + ItemExperienceModel.forWeapons(86, 419925, 7050425), + ItemExperienceModel.forWeapons(87, 471375, 7470350), + ItemExperienceModel.forWeapons(88, 529050, 7941725), + ItemExperienceModel.forWeapons(89, 593675, 8470775), + ItemExperienceModel.forWeapons(90, -1, 9064450), ]; + +double getItemTotalExp(int currentLevel, int desiredLevel, bool forCharacters) { + if (currentLevel > desiredLevel) { + throw Exception('CurrentLevel = $currentLevel cannot be greater than DesiredLevel = $desiredLevel'); + } + + //here remember that the upper bound must not be included, that's why we use item.level < desiredLevel + return (forCharacters ? characterExp : weaponExp) + .where((item) => item.level >= currentLevel && item.level < desiredLevel) + .map((item) => item.nextLevelExp) + .fold(0, (previous, current) => previous + current); +} diff --git a/lib/domain/assets.dart b/lib/domain/assets.dart index 36a456727..45242110b 100644 --- a/lib/domain/assets.dart +++ b/lib/domain/assets.dart @@ -38,6 +38,9 @@ class Assets { static String currencyBasePath = '$itemsBasePath/currency'; static String othersBasePath = '$itemsBasePath/others'; static String ingredientsBasePath = '$itemsBasePath/ingredients'; + static String experienceBasePath = '$itemsBasePath/experience'; + + //Others static String otherImgsBasePath = 'assets/others'; static String getArtifactPath(String name) => '$artifactsBasePath/$name'; @@ -68,6 +71,7 @@ class Assets { static String getCurrencyMaterialPath(String name) => '$currencyBasePath/$name'; static String getOtherMaterialPath(String name) => '$othersBasePath/$name'; static String getIngredientMaterialPath(String name) => '$ingredientsBasePath/$name'; + static String getExperienceMaterialPath(String name) => '$experienceBasePath/$name'; static String getMaterialPath(String name, MaterialType type) { switch (type) { @@ -91,6 +95,9 @@ class Assets { return getOtherMaterialPath(name); case MaterialType.ingredient: return getIngredientMaterialPath(name); + case MaterialType.expCharacter: + case MaterialType.expWeapon: + return getExperienceMaterialPath(name); default: throw Exception('Invalid material type = $type'); } diff --git a/lib/domain/enums/ascension_material_summary_type.dart b/lib/domain/enums/ascension_material_summary_type.dart index 679739d01..8e647a03d 100644 --- a/lib/domain/enums/ascension_material_summary_type.dart +++ b/lib/domain/enums/ascension_material_summary_type.dart @@ -5,4 +5,5 @@ enum AscensionMaterialSummaryType { day, currency, others, + exp, }