You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/store/index.ts
+60-7Lines changed: 60 additions & 7 deletions
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,8 @@ export default createStore({
11
11
progress: 0asnumber,
12
12
score: 0asnumber,//set score to 0 when state is created
13
13
dailyStreak: 0asnumber,//set daily streak to 0 and last completion date to undefined when state is created
14
-
tasksCompletedToday: 0asnumber,//set tasks completed in a day (today) to 0
14
+
tasksCompletedToday: 0asnumber,//set number of tasks completed in a day (today) to 0
15
+
totalTasksCompleted: 0asnumber,//set total number of tasks completed to 0
15
16
lastCompletionDate: undefinedasstring|undefined,//last completion date in YYYY-MM-DD string
16
17
},
17
18
},
@@ -23,6 +24,7 @@ export default createStore({
23
24
getScore: (state)=>state.user.score,//get user score
24
25
getDailyStreak: (state)=>state.user.dailyStreak,//get user daily streak
25
26
getTasksCompletedToday: (state)=>state.user.tasksCompletedToday,//get user tasks completed in a day
27
+
getTotalTasksCompleted: (state)=>state.user.totalTasksCompleted,//get user total tasks completed
26
28
getLastCompletionDate: (state)=>state.user.lastCompletionDate,//get user last completion date
27
29
},
28
30
mutations: {
@@ -38,12 +40,13 @@ export default createStore({
38
40
Number(newDate().setHours(23,59,59,999)))/
39
41
(1000*60*60*24);//calculate number of days until the task is due
40
42
constdateMultiplier: number=
41
-
daysToDue<0 ? -2/(daysToDue-1) : 1+1/(daysToDue+1);//if task is overdue, XP multiplier is less than 1 that decreases over time when task is overdue, else XP multiplier bonus increases (more than 1) when task gets closer to due date
42
-
letstreakMultiplier: number;//calculate task streak XP multiplier based on task streak, if task is completed before the due date then the streak increases else if the task is completed overdue (after the due date) reset task streak to 0
43
-
letrepeatMultiplier: number;//calculate task repetition XP multiplier based on task repetition occurrence and task repetition frequency
44
-
letdailyStreakMultiplier: number;//calculate daily streak XP multiplier based on daily streak
43
+
daysToDue<0 ? -2/(daysToDue-1) : 1+1/(daysToDue+1);//if task is overdue, XP and score multiplier is less than 1 that decreases over time when task is overdue, else XP multiplier bonus increases (more than 1) when task gets closer to due date
44
+
letstreakMultiplier: number;//calculate task streak XP and score multiplier based on task streak, if task is completed before the due date then the streak increases else if the task is completed overdue (after the due date) reset task streak to 0
45
+
letrepeatMultiplier: number;//calculate task repetition XP and score multiplier based on task repetition occurrence and task repetition frequency
46
+
letdailyStreakMultiplier: number;//calculate daily streak XP and score multiplier based on daily streak
45
47
letlevelMultiplier: number;//calculate level score multiplier based on user level
46
-
letdayTasksMultiplier: number;//calculate XP multiplier for tasks completed in a day
48
+
letdayTasksMultiplier: number;//calculate XP and score multiplier for tasks completed in a day
49
+
lettasksMultiplier: number;//calculate score multiplier for total number of tasks completed
47
50
//calculate task repetition XP multiplier
48
51
if(task.repeatFrequency===1){
49
52
//if task repetition is daily
@@ -252,6 +255,55 @@ export default createStore({
252
255
}else{
253
256
levelMultiplier=9.5;//9.5 level score multiplier from level 10000
254
257
}
258
+
state.user.totalTasksCompleted++;//increase total tasks completed by 1
259
+
//calculate task score multiplier
260
+
if(state.user.totalTasksCompleted===1){
261
+
tasksMultiplier=1;//1x task score multiplier for 1 task completed
262
+
}elseif(state.user.totalTasksCompleted<3){
263
+
tasksMultiplier=1+0.1*(state.user.totalTasksCompleted-1);//1x task score multiplier from 1 task plus 0.1x task score multiplier for each task completed
264
+
}elseif(state.user.totalTasksCompleted<5){
265
+
tasksMultiplier=1.2+0.05*(state.user.totalTasksCompleted-3);//1.2x task score multiplier from 3 tasks plus 0.05x task score multiplier for each task completed
266
+
}elseif(state.user.totalTasksCompleted<10){
267
+
tasksMultiplier=1.3+0.04*(state.user.totalTasksCompleted-5);//1.3x task score multiplier from 5 tasks plus 0.04x task score multiplier for each task completed
268
+
}elseif(state.user.totalTasksCompleted<20){
269
+
tasksMultiplier=1.5+0.03*(state.user.totalTasksCompleted-10);//1.5x task score multiplier from 10 tasks plus 0.03x task score multiplier for each task completed
270
+
}elseif(state.user.totalTasksCompleted<50){
271
+
tasksMultiplier=1.8+0.02*(state.user.totalTasksCompleted-20);//1.8x task score multiplier from 20 tasks plus 0.02x task score multiplier for each task completed
272
+
}elseif(state.user.totalTasksCompleted<100){
273
+
tasksMultiplier=2.4+0.012*(state.user.totalTasksCompleted-50);//2.4x task score multiplier from 50 tasks plus 0.012x task score multiplier for each task completed
274
+
}elseif(state.user.totalTasksCompleted<200){
275
+
tasksMultiplier=3+0.01*(state.user.totalTasksCompleted-100);//3x task score multiplier from 100 tasks plus 0.01x task score multiplier for each task completed
276
+
}elseif(state.user.totalTasksCompleted<500){
277
+
tasksMultiplier=4+0.005*(state.user.totalTasksCompleted-200);//4x task score multiplier from 200 tasks plus 0.005x task score multiplier for each task completed
278
+
}elseif(state.user.totalTasksCompleted<1000){
279
+
tasksMultiplier=5.5+0.003*(state.user.totalTasksCompleted-500);//5.5x task score multiplier from 500 tasks plus 0.003x task score multiplier for each task completed
280
+
}elseif(state.user.totalTasksCompleted<2000){
281
+
tasksMultiplier=7+0.002*(state.user.totalTasksCompleted-1000);//7x task score multiplier from 1000 tasks plus 0.002x task score multiplier for each task completed
282
+
}elseif(state.user.totalTasksCompleted<5000){
283
+
tasksMultiplier=9+0.001*(state.user.totalTasksCompleted-2000);//9x task score multiplier from 2000 tasks plus 0.001x task score multiplier for each task completed
284
+
}elseif(state.user.totalTasksCompleted<10000){
285
+
tasksMultiplier=12+0.0005*(state.user.totalTasksCompleted-5000);//12x task score multiplier from 5000 tasks plus 0.0005x task score multiplier for each task completed
286
+
}elseif(state.user.totalTasksCompleted<20000){
287
+
tasksMultiplier=
288
+
14.5+0.0003*(state.user.totalTasksCompleted-10000);//14.5x task score multiplier from 10000 tasks plus 0.0003x task score multiplier for each task completed
289
+
}elseif(state.user.totalTasksCompleted<50000){
290
+
tasksMultiplier=
291
+
17.5+0.00025*(state.user.totalTasksCompleted-20000);//17.5x task score multiplier from 20000 tasks plus 0.00025x task score multiplier for each task completed
292
+
}elseif(state.user.totalTasksCompleted<100000){
293
+
tasksMultiplier=
294
+
25+0.0001*(state.user.totalTasksCompleted-50000);//25x task score multiplier from 50000 tasks plus 0.0001x task score multiplier for each task completed
295
+
}elseif(state.user.totalTasksCompleted<200000){
296
+
tasksMultiplier=
297
+
30+0.00006*(state.user.totalTasksCompleted-100000);//30x task score multiplier from 100000 tasks plus 0.00006x task score multiplier for each task completed
298
+
}elseif(state.user.totalTasksCompleted<500000){
299
+
tasksMultiplier=
300
+
36+0.00003*(state.user.totalTasksCompleted-200000);//36x task score multiplier from 200000 tasks plus 0.0000x task score multiplier for each task completed
301
+
}elseif(state.user.totalTasksCompleted<1000000){
302
+
tasksMultiplier=
303
+
45+0.00002*(state.user.totalTasksCompleted-500000);//45x task score multiplier from 500000 tasks plus 0.05x task score multiplier for each task completed
304
+
}else{
305
+
tasksMultiplier=55;//55x task score multiplier from 1000000 tasks
306
+
}
255
307
//calculate amount of XP earned and points earned when task is completed
256
308
constxp: number=Math.max(
257
309
Math.floor(
@@ -275,7 +327,8 @@ export default createStore({
275
327
streakMultiplier*
276
328
dailyStreakMultiplier*
277
329
dayTasksMultiplier*
278
-
levelMultiplier
330
+
levelMultiplier*
331
+
tasksMultiplier
279
332
),
280
333
1
281
334
);//get at least 1 point when the task is completed
0 commit comments