@@ -11,6 +11,7 @@ export default createStore({
1111 progress : 0 as number ,
1212 score : 0 as number , //set score to 0 when state is created
1313 dailyStreak : 0 as number , //set daily streak to 0 and last completion date to undefined when state is created
14+ tasksCompletedToday : 0 as number , //set tasks completed in a day (today) to 0
1415 lastCompletionDate : undefined as string | undefined , //last completion date in YYYY-MM-DD string
1516 } ,
1617 } ,
@@ -21,6 +22,7 @@ export default createStore({
2122 getProgress : ( state ) => state . user . progress , //get user level progress
2223 getScore : ( state ) => state . user . score , //get user score
2324 getDailyStreak : ( state ) => state . user . dailyStreak , //get user daily streak
25+ getTasksCompletedToday : ( state ) => state . user . tasksCompletedToday , //get user tasks completed in a day
2426 getLastCompletionDate : ( state ) => state . user . lastCompletionDate , //get user last completion date
2527 } ,
2628 mutations : {
@@ -41,6 +43,7 @@ export default createStore({
4143 let repeatMultiplier : number ; //calculate task repetition XP multiplier based on task repetition occurrence and task repetition frequency
4244 let dailyStreakMultiplier : number ; //calculate daily streak XP multiplier based on daily streak
4345 let levelMultiplier : number ; //calculate level score multiplier based on user level
46+ let dayTasksMultiplier : number ; //calculate XP multiplier for tasks completed in a day
4447 //calculate task repetition XP multiplier
4548 if ( task . repeatFrequency === 1 ) {
4649 //if task repetition is daily
@@ -91,21 +94,30 @@ export default createStore({
9194 task . streak ++ ; //increase task streak
9295 }
9396 //calculate daily streak
94- const currentDate : Date = new Date ( ) ;
9597 if (
9698 state . user . lastCompletionDate === undefined ||
97- new Date ( currentDate . setDate ( currentDate . getDate ( ) - 1 ) ) >
99+ new Date ( new Date ( ) . setDate ( new Date ( ) . getDate ( ) - 1 ) ) >
98100 new Date ( state . user . lastCompletionDate + " 23:59:59.999" )
99101 ) {
100102 //if user last completion date is before yesterday or undefined (no user task completed yet)
101103 state . user . dailyStreak = 1 ; //reset daily streak to 1
102104 } else if (
103- Number ( new Date ( currentDate . setHours ( 23 , 59 , 59 , 999 ) ) ) -
105+ Number ( new Date ( new Date ( ) . setHours ( 23 , 59 , 59 , 999 ) ) ) -
104106 Number ( new Date ( state . user . lastCompletionDate + " 23:59:59.999" ) ) ===
105107 1000 * 60 * 60 * 24
106108 ) {
107109 state . user . dailyStreak ++ ; //increase daily streak
108110 }
111+ //calculate number of tasks completed in a day
112+ if (
113+ state . user . lastCompletionDate === undefined ||
114+ Number ( new Date ( state . user . lastCompletionDate + " 23:59:59.999" ) ) !==
115+ Number ( new Date ( new Date ( ) . setHours ( 23 , 59 , 59 , 999 ) ) )
116+ ) {
117+ state . user . tasksCompletedToday = 1 ; //reset tasks completed in a day to 1
118+ } else {
119+ state . user . tasksCompletedToday ++ ; //increase tasks completed in a day by 1
120+ }
109121 //calculate daily streak XP multiplier
110122 if ( state . user . dailyStreak === ( 0 || 1 ) ) {
111123 dailyStreakMultiplier = 1 ; //1x daily streak XP multiplier if daily streak is 0 or 1
@@ -144,10 +156,11 @@ export default createStore({
144156 } else {
145157 dailyStreakMultiplier = 9.783 ; //9.783x daily streak XP multiplier from 3652 daily streak
146158 }
159+
147160 //set last completion date to today
148161 state . user . lastCompletionDate = new Date (
149- currentDate . setMinutes (
150- currentDate . getMinutes ( ) - currentDate . getTimezoneOffset ( )
162+ new Date ( ) . setMinutes (
163+ new Date ( ) . getMinutes ( ) - new Date ( ) . getTimezoneOffset ( )
151164 )
152165 )
153166 . toISOString ( )
@@ -180,6 +193,33 @@ export default createStore({
180193 } else {
181194 streakMultiplier = 6.1 ; //6.1x task streak XP multiplier from 10000 task streak
182195 }
196+ //calculate multiplier based on tasks completed in a day
197+ if ( state . user . tasksCompletedToday === 1 ) {
198+ dayTasksMultiplier = 1 ; //1x multiplier for 1 task completed in a day
199+ } else if ( state . user . tasksCompletedToday < 5 ) {
200+ dayTasksMultiplier = 1 + 0.125 * ( state . user . tasksCompletedToday - 1 ) ; //1x multiplier plus 0.125x multiplier for each task completed in a day from 1 task
201+ } else if ( state . user . tasksCompletedToday < 10 ) {
202+ dayTasksMultiplier = 1.5 + 0.1 * ( state . user . tasksCompletedToday - 5 ) ; //1.5x multiplier plus 0.1x multiplier for each task completed in a day from 5 tasks
203+ } else if ( state . user . tasksCompletedToday < 20 ) {
204+ dayTasksMultiplier = 2 + 0.05 * ( state . user . tasksCompletedToday - 10 ) ; //2x multiplier plus 0.05x multiplier for each task completed in a day from 10 tasks
205+ } else if ( state . user . tasksCompletedToday < 50 ) {
206+ dayTasksMultiplier =
207+ 2.5 + 0.025 * ( state . user . tasksCompletedToday - 20 ) ; //2.5x multiplier plus 0.025x multiplier for each task completed in a day from 20 tasks
208+ } else if ( state . user . tasksCompletedToday < 100 ) {
209+ dayTasksMultiplier =
210+ 3.25 + 0.01 * ( state . user . tasksCompletedToday - 50 ) ; //3.25x multiplier plus 0.01x multiplier for each task completed in a day from 50 tasks
211+ } else if ( state . user . tasksCompletedToday < 200 ) {
212+ dayTasksMultiplier =
213+ 3.75 + 0.005 * ( state . user . tasksCompletedToday - 100 ) ; //3.75x multiplier plus 0.1x multiplier for each task completed in a day from 100 tasks
214+ } else if ( state . user . tasksCompletedToday < 500 ) {
215+ dayTasksMultiplier =
216+ 4.25 + 0.002 * ( state . user . tasksCompletedToday - 200 ) ; //4.25x multiplier plus 0.00x multiplier for each task completed in a day from 5 tasks
217+ } else if ( state . user . tasksCompletedToday < 1000 ) {
218+ dayTasksMultiplier =
219+ 4.85 + 0.001 * ( state . user . tasksCompletedToday - 500 ) ; //4.85x multiplier plus 0.00x multiplier for each task completed in a day from 5 tasks
220+ } else {
221+ dayTasksMultiplier = 5.35 ; //5.35x multiplier from 1001 tasks
222+ }
183223 //calculate level score multiplier based on user level
184224 if ( state . user . level === 1 ) {
185225 levelMultiplier = 1 ; //1x level score multiplier if user level is 1
@@ -220,7 +260,8 @@ export default createStore({
220260 dateMultiplier *
221261 repeatMultiplier *
222262 streakMultiplier *
223- dailyStreakMultiplier
263+ dailyStreakMultiplier *
264+ dayTasksMultiplier
224265 ) ,
225266 1
226267 ) ; //get at least 1 XP when the task is completed
@@ -233,6 +274,7 @@ export default createStore({
233274 repeatMultiplier *
234275 streakMultiplier *
235276 dailyStreakMultiplier *
277+ dayTasksMultiplier *
236278 levelMultiplier
237279 ) ,
238280 1
0 commit comments