Skip to content

Commit 9c24391

Browse files
committed
Add multiplier based on number of days completed
1 parent 5db8570 commit 9c24391

File tree

2 files changed

+57
-5
lines changed

2 files changed

+57
-5
lines changed

src/components/TaskList.vue

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@
3737
getCurrentScore.toLocaleString("en-US")
3838
}}</span>
3939
</p>
40+
<p>
41+
Days Completed:
42+
<span id="text-numeric-display">{{
43+
getDaysCompleted.toLocaleString("en-US")
44+
}}</span>
45+
</p>
4046
<p>
4147
Best Points Earned After Completing the Task:
4248
<span id="text-numeric-display">{{
@@ -186,6 +192,9 @@ export default defineComponent({
186192
getCurrentDailyStreak() {
187193
return store.getters.getDailyStreak; //get current daily streak
188194
},
195+
getDaysCompleted() {
196+
return store.getters.getDaysCompleted; //get number of days completed
197+
},
189198
getCurrentTasksCompletedToday() {
190199
return store.getters.getTasksCompletedToday; //get tasks completed in a day (today)
191200
},

src/store/index.ts

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export default createStore({
3232
rating: 0 as number, //set the rating to 0 when state is created
3333
bestScoreEarned: 0 as number, //the highest number of points earned achieved when the task is completed
3434
dailyStreak: 0 as number, //set the daily streak to 0 and last completion date to undefined when state is created
35+
daysCompleted: 0 as number, //set the number of days completed to 0 when state is created
3536
tasksCompletedToday: 0 as number, //set the number of tasks completed in a day (today) to 0
3637
totalTasksCompleted: 0 as number, //set the total number of tasks completed to 0
3738
lastCompletionDate: undefined as string | undefined, //user task last completion date in YYYY-MM-DD string
@@ -48,6 +49,7 @@ export default createStore({
4849
getScore: (state) => state.user.score, //get the user score
4950
getRating: (state) => state.user.rating, //get the user rating
5051
getDailyStreak: (state) => state.user.dailyStreak, //get the user daily streak
52+
getDaysCompleted: (state) => state.user.daysCompleted, //get the number of days completed
5153
getTasksCompletedToday: (state) => state.user.tasksCompletedToday, //get the user tasks completed in a day
5254
getTotalTasksCompleted: (state) => state.user.totalTasksCompleted, //get the user total tasks completed
5355
getLastCompletionDate: (state) => state.user.lastCompletionDate, //get the user last completion date
@@ -86,9 +88,10 @@ export default createStore({
8688
let repeatMultiplier: number; //calculate the task repetition XP and score multiplier based on task repetition occurrence and task repetition interval
8789
let dailyStreakMultiplier: number; //calculate the daily streak XP and score multiplier based on daily streak
8890
let levelMultiplier: number; //calculate the level score multiplier based on user level
89-
let dayTasksMultiplier: number; //calculate the XP and score multiplier for tasks completed in a day (today)
90-
let tasksMultiplier: number; //calculate the score multiplier for total number of tasks completed
91+
let dayTasksMultiplier: number; //calculate the XP and score multiplier based on tasks completed in a day (today)
92+
let tasksMultiplier: number; //calculate the score multiplier based on total number of tasks completed
9193
let rankMultiplier: number; //calculate the rank multiplier based on current user rating score
94+
let daysCompletedMultiplier: number; //calculate the XP and score multiplier based on number of days completed
9295
const activeTasks: number = state.tasks.filter(
9396
(taskList) => !taskList.isCompleted,
9497
).length; //calculate the number of active tasks (tasks that are not completed) using Array.filter
@@ -178,6 +181,7 @@ export default createStore({
178181
) {
179182
//if the new day has passed
180183
state.user.tasksCompletedToday = 1; //reset the number of tasks completed in a day to 1
184+
state.user.daysCompleted++; //increase number of days completed
181185
} else {
182186
state.user.tasksCompletedToday++; //increase the number of tasks completed in a day by 1
183187
}
@@ -577,6 +581,43 @@ export default createStore({
577581
} else {
578582
rankMultiplier = 71; //71 rank multiplier for rating from 1,000,000,000
579583
}
584+
//calculate the multiplier based on number of days completed
585+
if (state.user.daysCompleted === 0 || state.user.daysCompleted === 1) {
586+
daysCompletedMultiplier = 1; //1x days completed multiplier for 0 or 1 days completed
587+
} else if (state.user.daysCompleted < 3) {
588+
daysCompletedMultiplier = 1 + 0.1 * (state.user.daysCompleted - 1); //1x days completed multiplier from 1 day completed plus 0.1x for each day completed
589+
} else if (state.user.daysCompleted < 7) {
590+
daysCompletedMultiplier = 1.2 + 0.05 * (state.user.daysCompleted - 3); //1.2x days completed multiplier from 3 days completed plus 0.05x for each day completed
591+
} else if (state.user.daysCompleted < 14) {
592+
daysCompletedMultiplier = 1.4 + 0.03 * (state.user.daysCompleted - 7); //1.4x days completed multiplier from 7 days completed (1 week) plus 0.03x for each day completed
593+
} else if (state.user.daysCompleted < 30) {
594+
daysCompletedMultiplier = 1.61 + 0.02 * (state.user.daysCompleted - 14); //1.61x days completed multiplier from 14 days completed (2 weeks) plus 0.02x for each day completed
595+
} else if (state.user.daysCompleted < 60) {
596+
daysCompletedMultiplier = 1.93 + 0.01 * (state.user.daysCompleted - 30); //1.93x days completed multiplier from 30 days completed (approximately 1 month) plus 0.01x for each day completed
597+
} else if (state.user.daysCompleted < 90) {
598+
daysCompletedMultiplier =
599+
2.23 + 0.005 * (state.user.daysCompleted - 60); //2.23x days completed multiplier from 60 days completed (approximately 2 months) plus 0.005x for each day completed
600+
} else if (state.user.daysCompleted < 180) {
601+
daysCompletedMultiplier =
602+
2.38 + 0.004 * (state.user.daysCompleted - 90); //2.38x days completed multiplier from 90 days completed (approximately 3 months) plus 0.004x for each day completed
603+
} else if (state.user.daysCompleted < 365) {
604+
daysCompletedMultiplier =
605+
2.74 + 0.0025 * (state.user.daysCompleted - 180); //2.74x days completed multiplier from 180 days completed (approximately 6 months) plus 0.0025x for each day completed
606+
} else if (state.user.daysCompleted < 730) {
607+
daysCompletedMultiplier =
608+
3.2025 + 0.002 * (state.user.daysCompleted - 365); //3.2025x days completed multiplier from 365 days completed (approximately 1 year) plus 0.002x for each day completed
609+
} else if (state.user.daysCompleted < 1461) {
610+
daysCompletedMultiplier =
611+
3.9325 + 0.001 * (state.user.daysCompleted - 730); //3.9325x days completed multiplier from 730 days completed (approximately 2 years) plus 0.001x for each day completed
612+
} else if (state.user.daysCompleted < 3652) {
613+
daysCompletedMultiplier =
614+
4.6625 + 0.0005 * (state.user.daysCompleted - 1461); //4.6625x days completed multiplier from 1,461 days completed (approximately 4 years) plus 0.0005x for each day completed
615+
} else if (state.user.daysCompleted < 7305) {
616+
daysCompletedMultiplier =
617+
5.758 + 0.0002 * (state.user.daysCompleted - 3652); //5.758x days completed multiplier from 3,652 days completed (approximately 10 years) plus 0.0002x for each day completed
618+
} else {
619+
daysCompletedMultiplier = 6.4886; //6.4886x days completed multiplier from 7,305 days completed
620+
}
580621
//calculate the amount of XP earned and points earned when the task is completed
581622
const rankXpEarned: number = Math.max(
582623
Math.floor(
@@ -610,7 +651,8 @@ export default createStore({
610651
dailyStreakMultiplier *
611652
dayTasksMultiplier *
612653
(1 + task.rank / 10) *
613-
(1 + rankMultiplier / 10),
654+
(1 + rankMultiplier / 10) *
655+
daysCompletedMultiplier,
614656
),
615657
1,
616658
); //get at least 1 XP when the task is completed
@@ -636,11 +678,12 @@ export default createStore({
636678
tasksMultiplier *
637679
activeTasksMultiplier *
638680
(1 + task.rank / 10) *
639-
(1 + rankMultiplier / 10),
681+
(1 + rankMultiplier / 10) *
682+
daysCompletedMultiplier,
640683
),
641684
1,
642685
); //get at least 1 point when the task is completed
643-
state.user.score += pointsEarned; //get the amount of points earned based on task difficulty, task priority, task due date, task repetition, task streak, daily streak, user level and rank multipliers
686+
state.user.score += pointsEarned; //get the amount of points earned based on task difficulty, task priority, task due date, task repetition, task streak, daily streak, user level, rank and days completed multipliers
644687
if (pointsEarned > state.user.bestScoreEarned) {
645688
//if the points earned are greater than the best score earned
646689
state.user.bestScoreEarned = pointsEarned; //set the best score earned to points earned when the task is completed

0 commit comments

Comments
 (0)