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
+52-2Lines changed: 52 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -9,6 +9,7 @@ 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
+
score: 0asnumber,//set score to 0 when state is created
12
13
dailyStreak: 0asnumber,//set daily streak to 0 and last completion date to undefined when state is created
13
14
lastCompletionDate: undefinedasstring|undefined,//last completion date in YYYY-MM-DD string
14
15
},
@@ -18,6 +19,7 @@ export default createStore({
18
19
getXp: (state)=>state.user.xp,//get user XP
19
20
getLevel: (state)=>state.user.level,//get user level
20
21
getProgress: (state)=>state.user.progress,//get user level progress
22
+
getScore: (state)=>state.user.score,//get user score
21
23
getDailyStreak: (state)=>state.user.dailyStreak,//get user daily streak
22
24
getLastCompletionDate: (state)=>state.user.lastCompletionDate,//get user last completion date
23
25
},
@@ -38,6 +40,7 @@ export default createStore({
38
40
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
41
letrepeatMultiplier: number;//calculate task repetition XP multiplier based on task repetition occurrence and task repetition frequency
40
42
letdailyStreakMultiplier: number;//calculate daily streak XP multiplier based on daily streak
43
+
letlevelMultiplier: number;//calculate level score multiplier based on user level
41
44
//calculate task repetition XP multiplier
42
45
if(task.repeatFrequency==1){
43
46
//if task repetition is daily
@@ -171,7 +174,39 @@ export default createStore({
171
174
}else{
172
175
streakMultiplier=3.8;//3.8x task streak XP multiplier from 10000 task streak
173
176
}
174
-
//calculate amount of XP earned when task is completed
177
+
//calculate level score multiplier based on user level
178
+
if(state.user.level==1){
179
+
levelMultiplier=1;//1x level score multiplier if user level is 1
180
+
}elseif(state.user.level<3){
181
+
levelMultiplier=1+0.1*(state.user.level-1);//1x level score multiplier from level 1 plus 0.1x level score multiplier for each level
182
+
}elseif(state.user.level<5){
183
+
levelMultiplier=1.2+0.05*(state.user.level-3);//1.2x level score multiplier from level 3 plus 0.05x level score multiplier for each level
184
+
}elseif(state.user.level<10){
185
+
levelMultiplier=1.3+0.04*(state.user.level-5);//1.3x level score multiplier from level 5 plus 0.04x level score multiplier for each level
186
+
}elseif(state.user.level<20){
187
+
levelMultiplier=1.5+0.03*(state.user.level-10);//1.5x level score multiplier from level 1 plus 0.03x level score multiplier for each level
188
+
}elseif(state.user.level<50){
189
+
levelMultiplier=1.8+0.02*(state.user.level-20);//1.8x level score multiplier from level 20 plus 0.02x level score multiplier for each level
190
+
}elseif(state.user.level<100){
191
+
levelMultiplier=2.4+0.012*(state.user.level-50);//2.4x level score multiplier from level 50 plus 0.012x level score multiplier for each level
192
+
}elseif(state.user.level<200){
193
+
levelMultiplier=3+0.01*(state.user.level-100);//3x level score multiplier from level 100 plus 0.01x level score multiplier for each level
194
+
}elseif(state.user.level<300){
195
+
levelMultiplier=4+0.005*(state.user.level-200);//4x level score multiplier from level 200 plus 0.005x level score multiplier for each level
196
+
}elseif(state.user.level<500){
197
+
levelMultiplier=4.5+0.0025*(state.user.level-300);//4.5x level score multiplier from level 300 plus 0.0025x level score multiplier for each level
198
+
}elseif(state.user.level<1000){
199
+
levelMultiplier=5+0.002*(state.user.level-500);//5x level score multiplier from level 500 plus 0.002x level score multiplier for each level
200
+
}elseif(state.user.level<2000){
201
+
levelMultiplier=6+0.001*(state.user.level-1000);//6x level score multiplier from level 1000 plus 0.001x level score multiplier for each level
202
+
}elseif(state.user.level<5000){
203
+
levelMultiplier=7+0.0005*(state.user.level-2000);//7x level score multiplier from level 2000 plus 0.0005x level score multiplier for each level
204
+
}elseif(state.user.level<10000){
205
+
levelMultiplier=8.5+0.0002*(state.user.level-5000);//8.5x level score multiplier from level 5000 plus 0.0002x level score multiplier for each level
206
+
}else{
207
+
levelMultiplier=9.5;//9.5 level score multiplier from level 10000
208
+
}
209
+
//calculate amount of XP earned and points earned when task is completed
175
210
constxp: number=Math.max(
176
211
Math.floor(
177
212
task.difficulty*
@@ -184,7 +219,22 @@ export default createStore({
184
219
1
185
220
);//get at least 1 XP when the task is completed
186
221
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
187
-
alert(`Task ${task.task} completed!\nYou earned ${xp} XP!`);//alert user to show how many XP they earned after completing the task
222
+
constscore: number=Math.max(
223
+
Math.floor(
224
+
task.difficulty*
225
+
task.priority*
226
+
dateMultiplier*
227
+
repeatMultiplier*
228
+
streakMultiplier*
229
+
dailyStreakMultiplier*
230
+
levelMultiplier
231
+
),
232
+
1
233
+
);//get at least 1 point when the task is completed
234
+
state.user.score+=score;//get amount of points earned based on task difficulty, task priority, task due date, task repetition, task streak, daily streak and user level multipliers
0 commit comments