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
+67-17Lines changed: 67 additions & 17 deletions
Original file line number
Diff line number
Diff line change
@@ -9,13 +9,17 @@ export default createStore({
9
9
level: 1asnumber,//set level to 1 as total xp is 0 when state is created
10
10
xp: 0asnumber,
11
11
progress: 0asnumber,
12
+
dailyStreak: 0asnumber,//set daily streak to 0 and last completion date to undefined when state is created
13
+
lastCompletionDate: undefinedasstring|undefined,//last completion date in YYYY-MM-DD string
12
14
},
13
15
},
14
16
getters: {
15
17
getTodos: (state)=>state.todos,//get task list
16
18
getXp: (state)=>state.user.xp,//get user xp
17
19
getLevel: (state)=>state.user.level,//get user level
18
20
getProgress: (state)=>state.user.progress,//get user level progress
21
+
getDailyStreak: (state)=>state.user.dailyStreak,//get user daily streak
22
+
getLastCompletionDate: (state)=>state.user.lastCompletionDate,//get user last completion date
19
23
},
20
24
mutations: {
21
25
/**
@@ -28,12 +32,13 @@ export default createStore({
28
32
constdaysToDue: number=
29
33
(Number(newDate(task.dueDate+" 23:59:59.999"))-
30
34
Number(newDate().setHours(23,59,59,999)))/
31
-
(1000*24*60*60);//calculate number of days until the task is due
35
+
(1000*60*60*24);//calculate number of days until the task is due
32
36
constdateMultiplier: number=
33
37
daysToDue<0 ? -3/(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
34
-
letstreakMultiplier: number;//calculate task streak 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
35
-
letrepeatMultiplier: number;//calculate task repetition multiplier based on task repetition occurance and task repetition frequency
36
-
//calculate task repeition multiplier
38
+
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
39
+
letrepeatMultiplier: number;//calculate task repetition xp multiplier based on task repetition occurance and task repetition frequency
40
+
letdailyStreakMultiplier: number;//calculate daily streak xp multiplier based on daily streak
41
+
//calculate task repetition xp multiplier
37
42
if(task.repeatFrequency==1){
38
43
//if task repetition is daily
39
44
if(task.repeatOften<7){
@@ -82,27 +87,71 @@ export default createStore({
82
87
//if task is completed before due date (not overdue)
dailyStreakMultiplier=1;//1x daily streak xp multiplier if daily streak is 0 or 1
109
+
}elseif(state.user.dailyStreak<3){
110
+
dailyStreakMultiplier=1+0.1*(state.user.dailyStreak-1);//1x daily streak xp multiplier from 1 streak plus 0.1x streak multiplier for each daily streak
111
+
}elseif(state.user.dailyStreak<7){
112
+
dailyStreakMultiplier=1.2+0.05*(state.user.dailyStreak-3);//1.2x daily streak xp multiplier from 3 streak plus 0.05x streak multiplier for each daily streak
113
+
}elseif(state.user.dailyStreak<14){
114
+
dailyStreakMultiplier=1.4+0.03*(state.user.dailyStreak-7);//1.4x daily streak xp multiplier from 7 streak plus 0.03x streak multiplier for each daily streak
115
+
}elseif(state.user.dailyStreak<30){
116
+
dailyStreakMultiplier=1.61+0.02*(state.user.dailyStreak-14);//1.61x daily streak xp multiplier from 14 streak plus 0.02x streak multiplier for each daily streak
117
+
}elseif(state.user.dailyStreak<90){
118
+
dailyStreakMultiplier=1.89+0.01*(state.user.dailyStreak-30);//1.89x daily streak xp multiplier from 30 streak plus 0.01x streak multiplier for each daily streak
119
+
}elseif(state.user.dailyStreak<180){
120
+
dailyStreakMultiplier=2.49+0.005*(state.user.dailyStreak-90);//2.49x daily streak xp multiplier from 90 streak plus 0.005x streak multiplier for each daily streak
121
+
}elseif(state.user.dailyStreak<365){
122
+
dailyStreakMultiplier=2.94+0.002*(state.user.dailyStreak-180);//2.94x daily streak xp multiplier from 30 streak plus 0.002x streak multiplier for each daily streak
123
+
}else{
124
+
dailyStreakMultiplier=3.31;//3.31x daily streak xp multiplier from 365 daily streak
streakMultiplier=1;//1x task streak multiplier if task streak is 0 or completed a one-time task
88
137
}elseif(task.streak<5){
89
-
streakMultiplier=1.1+0.05*(task.streak-1);//1.1x task streak multiplier from 1 streak plus 0.05x streak multiplier for each task streak
138
+
streakMultiplier=1.1+0.05*(task.streak-1);//1.1x task streak xp multiplier from 1 streak plus 0.05x streak multiplier for each task streak
90
139
}elseif(task.streak<10){
91
-
streakMultiplier=1.3+0.04*(task.streak-5);//1.3x task streak multiplier from 5 streak plus 0.04x streak multiplier for each task streak
140
+
streakMultiplier=1.3+0.04*(task.streak-5);//1.3x task streak xp multiplier from 5 streak plus 0.04x streak multiplier for each task streak
92
141
}elseif(task.streak<20){
93
-
streakMultiplier=1.5+0.02*(task.streak-10);//1.5x task streak multiplier from 10 streak plus 0.02x streak multiplier for each task streak
142
+
streakMultiplier=1.5+0.02*(task.streak-10);//1.5x task streak xp multiplier from 10 streak plus 0.02x streak multiplier for each task streak
94
143
}elseif(task.streak<50){
95
-
streakMultiplier=1.7+0.01*(task.streak-20);//1.7x task streak multiplier from 20 streak plus 0.01x streak multiplier for each task streak
144
+
streakMultiplier=1.7+0.01*(task.streak-20);//1.7x task streak xp multiplier from 20 streak plus 0.01x streak multiplier for each task streak
96
145
}elseif(task.streak<100){
97
-
streakMultiplier=2+0.005*(task.streak-50);//2x task streak multiplier from 50 streak plus 0.005x streak multiplier for each task streak
146
+
streakMultiplier=2+0.005*(task.streak-50);//2x task streak xp multiplier from 50 streak plus 0.005x streak multiplier for each task streak
98
147
}elseif(task.streak<200){
99
-
streakMultiplier=2.25+0.0025*(task.streak-100);//2.25x task streak multiplier from 100 streak plus 0.0025x streak multiplier for each task streak
148
+
streakMultiplier=2.25+0.0025*(task.streak-100);//2.25x task streak xp multiplier from 100 streak plus 0.0025x streak multiplier for each task streak
100
149
}elseif(task.streak<500){
101
-
streakMultiplier=2.5+0.001*(task.streak-200);//2.5x task streak multiplier from 200 streak plus 0.001x streak multiplier for each task streak
150
+
streakMultiplier=2.5+0.001*(task.streak-200);//2.5x task streak xp multiplier from 200 streak plus 0.001x streak multiplier for each task streak
102
151
}elseif(task.streak<1000){
103
-
streakMultiplier=2.8+0.0004*(task.streak-500);//2.8x task streak multiplier from 500 task streak plus 0.0004x streak multiplier for each task streak
152
+
streakMultiplier=2.8+0.0004*(task.streak-500);//2.8x task streak xp multiplier from 500 task streak plus 0.0004x streak multiplier for each task streak
104
153
}else{
105
-
streakMultiplier=3;//3x task streak multiplier from 1000 task streak
154
+
streakMultiplier=3;//3x task streak xp multiplier from 1000 task streak
106
155
}
107
156
//calculate amount of xp earned when task is completed
state.user.xp+=xp;//get amount of xp earned based on task difficulty, task priority, task due date and task repetition
168
+
state.user.xp+=xp;//get amount of xp earned based on task difficulty, task priority, task due date, task repetition, task streak and daily streak multipliers
0 commit comments