Skip to content

Commit 7a5ee23

Browse files
committed
Go on further with sjm training system. do some refactoring
1 parent 70b21ae commit 7a5ee23

File tree

37 files changed

+327
-308
lines changed

37 files changed

+327
-308
lines changed

lib/commands/main_menu/create_new_simulation_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
3-
import 'package:sj_manager/bloc/simulation/commands/simulation_flow/jumper_reports/set_up_jumper_level_reports_command.dart';
3+
import 'package:sj_manager/commands/simulation/simulation_flow/jumper_reports/set_up_jumper_level_reports_command.dart';
44
import 'package:sj_manager/main.dart';
55
import 'package:sj_manager/models/game_variants/game_variants_io_utils.dart';
66
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';

lib/bloc/simulation/commands/change_jumper_training_command.dart renamed to lib/commands/simulation/common/change_jumper_training_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
3-
import 'package:sj_manager/bloc/simulation/simulation_database_cubit.dart';
3+
import 'package:sj_manager/commands/simulation/common/simulation_database_cubit.dart';
44
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
55
import 'package:sj_manager/models/simulation/flow/training/jumper_training_config.dart';
66
import 'package:sj_manager/models/user_db/jumper/jumper.dart';

lib/bloc/simulation/commands/manage_partnerships_command.dart renamed to lib/commands/simulation/common/manage_partnerships_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
33
import 'package:provider/provider.dart';
4-
import 'package:sj_manager/bloc/simulation/simulation_database_cubit.dart';
4+
import 'package:sj_manager/commands/simulation/common/simulation_database_cubit.dart';
55
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
66
import 'package:sj_manager/models/user_db/jumper/jumper.dart';
77
import 'package:sj_manager/models/user_db/team/personal_coach_team.dart';

lib/bloc/simulation/commands/search_for_candidates_command.dart renamed to lib/commands/simulation/common/search_for_candidates_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
33
import 'package:provider/provider.dart';
4-
import 'package:sj_manager/bloc/simulation/simulation_database_cubit.dart';
4+
import 'package:sj_manager/commands/simulation/common/simulation_database_cubit.dart';
55
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
66
import 'package:sj_manager/models/simulation/flow/training/jumper_training_config.dart';
77
import 'package:sj_manager/models/user_db/jumper/jumper.dart';

lib/bloc/simulation/simulation_database_cubit.dart renamed to lib/commands/simulation/common/simulation_database_cubit.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ class SimulationDatabaseCubit extends Cubit<SimulationDatabase> {
55
SimulationDatabaseCubit({required SimulationDatabase initial}) : super(initial);
66

77
void update(SimulationDatabase database) {
8+
//print('update db: $database');
89
emit(database);
910
}
1011
}

lib/bloc/simulation/commands/simulation_exit_command.dart renamed to lib/commands/simulation/common/simulation_exit_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
3-
import 'package:sj_manager/bloc/simulation/simulation_database_cubit.dart';
3+
import 'package:sj_manager/commands/simulation/common/simulation_database_cubit.dart';
44
import 'package:sj_manager/main.dart';
55
import 'package:sj_manager/models/simulation/database/helper/simulation_database_helper.dart';
66
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
3-
import 'package:sj_manager/bloc/simulation/commands/simulation_flow/set_up_subteams_command.dart';
4-
import 'package:sj_manager/bloc/simulation/commands/simulation_flow/set_up_trainings_command.dart';
5-
import 'package:sj_manager/bloc/simulation/simulation_database_cubit.dart';
3+
import 'package:sj_manager/commands/simulation/simulation_flow/set_up_subteams_command.dart';
4+
import 'package:sj_manager/commands/simulation/simulation_flow/set_up_trainings_command.dart';
5+
import 'package:sj_manager/commands/simulation/common/simulation_database_cubit.dart';
66
import 'package:sj_manager/models/simulation/database/actions/simulation_action_type.dart';
77
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
88
import 'package:sj_manager/utils/datetime.dart';
@@ -17,26 +17,26 @@ class ContinueSimulationCommand {
1717
final SimulationDatabase database;
1818

1919
Future<void> execute() async {
20-
final changedDate = database.currentDate.add(const Duration(days: 1));
21-
final changedDb = database.copyWith(currentDate: changedDate);
22-
2320
if (isSameDay(
24-
today: changedDate,
25-
targetDate: changedDb.actionDeadlines[SimulationActionType.settingUpSubteams]!,
21+
today: database.currentDate,
22+
targetDate: database.actionDeadlines[SimulationActionType.settingUpSubteams]!,
2623
)) {
27-
SetUpSubteamsCommand(context: context, database: changedDb).execute();
24+
SetUpSubteamsCommand(context: context, database: database).execute();
2825
}
2926

3027
if (isSameDay(
31-
today: changedDate,
32-
targetDate: changedDb.actionDeadlines[SimulationActionType.settingUpTraining]!,
28+
today: database.currentDate,
29+
targetDate: database.actionDeadlines[SimulationActionType.settingUpTraining]!,
3330
)) {
34-
await SetUpTrainingsCommand(context: context, database: changedDb).execute();
31+
await SetUpTrainingsCommand(context: context, database: database).execute();
3532
}
3633

34+
final changedDate = database.currentDate.add(const Duration(days: 1));
35+
3736
if (!context.mounted) return;
3837
//SimulateGlobalTrainingCommand(context: context, database: changedDb).execute();
3938

39+
final changedDb = database.copyWith(currentDate: changedDate);
4040
context.read<SimulationDatabaseCubit>().update(changedDb);
4141
}
4242
}
Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'package:sj_manager/models/simulation/flow/reports/jumper_level_description.dart';
22
import 'package:sj_manager/models/simulation/flow/reports/jumper_reports.dart';
33
import 'package:sj_manager/models/user_db/jumper/jumper.dart';
4-
import 'package:sj_manager/models/user_db/jumper/jumping_technique.dart';
54

65
class DefaultJumperLevelReportCreator {
76
DefaultJumperLevelReportCreator({
@@ -51,21 +50,6 @@ class DefaultJumperLevelReportCreator {
5150
print('jumper.skills.flightQuality: ${jumper.skills.flightQuality}');
5251
print('jumper.skills.landingQuality: ${jumper.skills.landingQuality}');
5352

54-
final riskInJumps = switch (jumper.skills.jumpingTechnique) {
55-
JumpingTechnique.veryDefensive => JumperCharacteristicOthernessStrength.below5,
56-
JumpingTechnique.clearlyDefensive => JumperCharacteristicOthernessStrength.below4,
57-
JumpingTechnique.defensive => JumperCharacteristicOthernessStrength.below3,
58-
JumpingTechnique.cautious => JumperCharacteristicOthernessStrength.below2,
59-
JumpingTechnique.slightlyCautious => JumperCharacteristicOthernessStrength.below1,
60-
JumpingTechnique.balanced => JumperCharacteristicOthernessStrength.average,
61-
JumpingTechnique.fairlyUnpredictable =>
62-
JumperCharacteristicOthernessStrength.above1,
63-
JumpingTechnique.unpredictable => JumperCharacteristicOthernessStrength.above2,
64-
JumpingTechnique.risky => JumperCharacteristicOthernessStrength.above3,
65-
JumpingTechnique.clearlyRisky => JumperCharacteristicOthernessStrength.above4,
66-
JumpingTechnique.veryRisky => JumperCharacteristicOthernessStrength.above5,
67-
};
68-
6953
return JumperLevelReport(
7054
levelDescription: levelDescription,
7155
characteristics: {
@@ -78,7 +62,6 @@ class DefaultJumperLevelReportCreator {
7862
JumperLevelCharacteristicCategory.landing: findAppropriateOthernessStrength(
7963
jumper.skills.landingQuality - averageSkillRating,
8064
),
81-
JumperLevelCharacteristicCategory.riskInJumps: riskInJumps,
8265
},
8366
);
8467
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:flutter/material.dart';
2-
import 'package:sj_manager/bloc/simulation/commands/simulation_flow/jumper_reports/default_jumper_level_report_creator.dart';
2+
import 'package:sj_manager/commands/simulation/simulation_flow/jumper_reports/default_jumper_level_report_creator.dart';
33
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
44
import 'package:sj_manager/models/simulation/flow/reports/jumper_level_description.dart';
55

lib/bloc/simulation/commands/simulation_flow/set_up_trainings_command.dart renamed to lib/commands/simulation/simulation_flow/set_up_trainings_command.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
33
import 'package:provider/provider.dart';
4-
import 'package:sj_manager/bloc/simulation/simulation_database_cubit.dart';
4+
import 'package:sj_manager/commands/simulation/common/simulation_database_cubit.dart';
55
import 'package:sj_manager/models/simulation/database/actions/simulation_action_type.dart';
66
import 'package:sj_manager/models/simulation/database/helper/simulation_database_helper.dart';
77
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
@@ -23,10 +23,6 @@ class SetUpTrainingsCommand {
2323
Future<void> execute() async {
2424
final dbHelper = context.read<SimulationDatabaseHelper>();
2525

26-
final changedDate = database.currentDate.add(const Duration(days: 1));
27-
final changedDb = database.copyWith(currentDate: changedDate);
28-
context.read<SimulationDatabaseCubit>().update(changedDb);
29-
3026
await showSjmDialog(
3127
barrierDismissible: false,
3228
context: context,
@@ -53,8 +49,9 @@ class SetUpTrainingsCommand {
5349
currentDynamicParams!.copyWith(trainingConfig: trainingConfig);
5450
},
5551
);
52+
print('new dynamic params uuuuuuuu : $dynamicParams');
5653
final changedDatabase =
57-
changedDb.copyWith(jumpersDynamicParameters: dynamicParams);
54+
database.copyWith(jumpersDynamicParameters: dynamicParams);
5855
context.read<SimulationDatabaseCubit>().update(changedDatabase);
5956
},
6057
),
Lines changed: 80 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,20 @@ import 'package:flutter/material.dart';
22
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
33
import 'package:sj_manager/models/simulation/flow/training/jumping_technique_change_training.dart';
44
import 'package:sj_manager/models/user_db/jumper/jumper.dart';
5+
import 'package:sj_manager/training_engine/components/jumping_technique_change_training_duration_calculator.dart';
56
import 'package:sj_manager/utils/show_dialog.dart';
67
import 'package:sj_manager/utils/translating.dart';
78

9+
class ChangeJumpingTechniqueChangeTrainingCommandResult {
10+
const ChangeJumpingTechniqueChangeTrainingCommandResult({
11+
required this.confirmed,
12+
this.daysLeft,
13+
});
14+
15+
final bool confirmed;
16+
final int? daysLeft;
17+
}
18+
819
class ChangeJumpingTechniqueChangeTrainingCommand {
920
ChangeJumpingTechniqueChangeTrainingCommand({
1021
required this.context,
@@ -20,52 +31,112 @@ class ChangeJumpingTechniqueChangeTrainingCommand {
2031
final Jumper jumper;
2132
final JumpingTechniqueChangeTrainingType oldTraining;
2233
final JumpingTechniqueChangeTrainingType newTraining;
23-
final Function(bool confirmed) onFinish;
34+
final Function(ChangeJumpingTechniqueChangeTrainingCommandResult result) onFinish;
2435

2536
Future<void> execute() async {
26-
print('Change jumping technique training. Old: $oldTraining. New: $newTraining');
2737
if (oldTraining == JumpingTechniqueChangeTrainingType.maintain) {
38+
final levelOfConsciousness =
39+
database.jumpersDynamicParameters[jumper]!.levelOfConsciousness;
40+
final daysLeft = JumpingTechniqueChangeTrainingDurationCalculator().calculateDays(
41+
trainingType: newTraining,
42+
levelOfConsciousness: levelOfConsciousness,
43+
);
2844
final bool? ok = await showSjmDialog(
2945
context: context,
3046
barrierDismissible: true,
3147
child: _DoYouWannaChangeDialog(
3248
newTraining: newTraining,
49+
duration: daysLeft,
3350
),
3451
);
35-
onFinish(ok ?? false);
52+
onFinish(ChangeJumpingTechniqueChangeTrainingCommandResult(
53+
confirmed: ok ?? false,
54+
daysLeft: daysLeft,
55+
));
3656
} else {
3757
final daysLeft = database
3858
.jumpersDynamicParameters[jumper]!.jumpingTechniqueChangeTrainingDaysLeft;
59+
if (daysLeft == null) {
60+
throw StateError(
61+
'Jumper ($jumper) have trainingConfig.jumpingTechniqueChangeTraining set, but jumpingTechniqueChangeTrainingDaysLeft is null',
62+
);
63+
}
3964

4065
final bool? ok = await showSjmDialog(
4166
context: context,
4267
barrierDismissible: true,
4368
child: _DoYouWannaStopDialog(
4469
oldTraining: oldTraining,
45-
daysCount: daysLeft ?? 5, // TODO days left
70+
daysCount: daysLeft,
4671
),
4772
);
48-
onFinish(ok ?? false);
73+
onFinish(ChangeJumpingTechniqueChangeTrainingCommandResult(
74+
confirmed: ok ?? false,
75+
daysLeft: daysLeft,
76+
));
4977
}
5078
}
5179
}
5280

5381
class _DoYouWannaChangeDialog extends StatelessWidget {
5482
const _DoYouWannaChangeDialog({
83+
required this.duration,
5584
required this.newTraining,
5685
});
5786

87+
final int duration;
5888
final JumpingTechniqueChangeTrainingType newTraining;
5989

6090
@override
6191
Widget build(BuildContext context) {
62-
final contentText = newTraining == JumpingTechniqueChangeTrainingType.increaseRisk
63-
? 'Czy chcesz zacząć trening polegający na zmianie sposobu skakania? Zajmie to trochę czasu. Po zakończeniu treningu zawodnik/zawodniczka będzie wkładał(a) więcej ryzyka w swoje skoki - mogą czasem zyskać na "błysku" choć ogólnie będą mniej powtarzalne'
64-
: 'Czy chcesz zacząć trening polegający na zmianie sposobu skakania? Zajmie to trochę czasu. Po zakończeniu treningu zawodnik/zawodniczka będzie wkładał(a) mniej ryzyka w swoje skoki - będą one bardziej powtarzalne, ale być może stracą na "błysku"';
92+
final regularText = Theme.of(context).textTheme.bodyMedium;
93+
final boldText = Theme.of(context).textTheme.titleSmall;
94+
95+
final textWidget = newTraining == JumpingTechniqueChangeTrainingType.increaseRisk
96+
? Text.rich(
97+
TextSpan(
98+
children: [
99+
TextSpan(
100+
text:
101+
'Czy chcesz zacząć trening polegający na zmianie sposobu skakania? ',
102+
style: regularText,
103+
),
104+
TextSpan(
105+
text: 'Zajmie to $duration dni. ',
106+
style: boldText,
107+
),
108+
TextSpan(
109+
text:
110+
'Po zakończeniu treningu zawodnik/zawodniczka będzie wkładał(a) więcej ryzyka w swoje skoki - mogą czasem zyskać na "błysku" choć ogólnie będą mniej powtarzalne.',
111+
style: regularText,
112+
),
113+
],
114+
),
115+
)
116+
: Text.rich(
117+
TextSpan(
118+
children: [
119+
TextSpan(
120+
text:
121+
'Czy chcesz zacząć trening polegający na zmianie sposobu skakania? ',
122+
style: regularText,
123+
),
124+
TextSpan(
125+
text: 'Zajmie to $duration dni. ',
126+
style: boldText,
127+
),
128+
TextSpan(
129+
text:
130+
'Po zakończeniu treningu zawodnik/zawodniczka będzie wkładał(a) mniej ryzyka w swoje skoki - będą one bardziej powtarzalne, ale być może stracą na "błysku".',
131+
style: regularText,
132+
),
133+
],
134+
),
135+
);
65136

66137
return AlertDialog(
67138
title: const Text('Zmiana sposobu skakania'),
68-
content: Text(contentText),
139+
content: textWidget,
69140
actions: [
70141
TextButton(
71142
onPressed: () {

lib/bloc/simulation/commands/simulation_flow/training/simulate_global_training_command.dart renamed to lib/commands/simulation/simulation_flow/training/simulate_global_training_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:flutter/material.dart';
2-
import 'package:sj_manager/bloc/simulation/commands/simulation_flow/training/simulate_jumper_training_command.dart';
2+
import 'package:sj_manager/commands/simulation/simulation_flow/training/simulate_jumper_training_command.dart';
33
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
44

55
class SimulateGlobalTrainingCommand {
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_bloc/flutter_bloc.dart';
3+
import 'package:sj_manager/commands/simulation/common/simulation_database_cubit.dart';
4+
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
5+
import 'package:sj_manager/models/user_db/jumper/jumper.dart';
6+
import 'package:sj_manager/training_engine/jumper_training_engine.dart';
7+
8+
class SimulateJumperTrainingCommand {
9+
SimulateJumperTrainingCommand({
10+
required this.context,
11+
required this.database,
12+
required this.jumper,
13+
required this.scaleFactor,
14+
});
15+
16+
final BuildContext context;
17+
final SimulationDatabase database;
18+
final Jumper jumper;
19+
final double scaleFactor;
20+
21+
void execute() {
22+
final dynamicParams = database.jumpersDynamicParameters[jumper];
23+
if (dynamicParams == null) {
24+
throw StateError(
25+
'Cannot simulate the training for particular jumper ($jumper) because it does not have dynamic params record in database',
26+
);
27+
}
28+
final changedJumpersDynamicParams = Map.of(database.jumpersDynamicParameters);
29+
changedJumpersDynamicParams[jumper] = changedJumpersDynamicParams[jumper]!.copyWith(
30+
jumpingTechniqueChangeTrainingDaysLeft:
31+
(dynamicParams.jumpingTechniqueChangeTrainingDaysLeft ?? 0) - 1,
32+
);
33+
34+
final trainingResult = JumperTrainingEngine(
35+
jumper: jumper,
36+
dynamicParams: changedJumpersDynamicParams[jumper]!,
37+
scaleFactor: scaleFactor,
38+
).doTraining();
39+
40+
changedJumpersDynamicParams[jumper] = changedJumpersDynamicParams[jumper]!.copyWith(
41+
form: trainingResult.form,
42+
jumpsConsistency: trainingResult.jumpsConsistency,
43+
fatigue: trainingResult.fatigue,
44+
);
45+
final changedJumpers = List.of(database.jumpers.last);
46+
changedJumpers[changedJumpers.indexOf(jumper)] =
47+
jumper.copyWith(skills: trainingResult.skills);
48+
database.jumpers.set(changedJumpers); // Maybe it doesn't work correctly
49+
final changedDatabase =
50+
database.copyWith(jumpersDynamicParameters: changedJumpersDynamicParams);
51+
context.read<SimulationDatabaseCubit>().update(changedDatabase);
52+
}
53+
}

0 commit comments

Comments
 (0)