Skip to content

Commit 308b0aa

Browse files
committed
Add score multiplier for total tasks completed
1 parent 120cc6b commit 308b0aa

File tree

2 files changed

+67
-8
lines changed

2 files changed

+67
-8
lines changed

src/components/TodoList.vue

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
<p>
77
Tasks Completed Today: {{ tasksCompletedTodays.toLocaleString("en-US") }}
88
</p>
9+
<p>
10+
Total Tasks Completed: {{ totalTasksCompletions.toLocaleString("en-US") }}
11+
</p>
912
<p>Score: {{ scores.toLocaleString("en-US") }}</p>
1013
<!--show circular progress bar filled with level progress--><ve-progress
1114
:progress="progresses"
@@ -92,7 +95,7 @@ export default defineComponent({
9295
//eslint-disable-next-line
9396
return store.getters.getTodos.sort((a: any, b: any) =>
9497
a.dueDate.localeCompare(b.dueDate)
95-
); //get todos and sort tasks by due date with the top one the oldest
98+
); //get tasks (todos) and sort tasks by task's due date with the top one the oldest
9699
},
97100
levels() {
98101
return store.getters.getLevel; //get current level
@@ -112,6 +115,9 @@ export default defineComponent({
112115
tasksCompletedTodays() {
113116
return store.getters.getTasksCompletedToday; //get tasks completed in a day (today)
114117
},
118+
totalTasksCompletions() {
119+
return store.getters.getTotalTasksCompleted; //get total tasks completed
120+
},
115121
lastCompletedDates() {
116122
return store.getters.getLastCompletionDate; //get current last completion date
117123
},

src/store/index.ts

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ 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
14+
tasksCompletedToday: 0 as number, //set number of tasks completed in a day (today) to 0
15+
totalTasksCompleted: 0 as number, //set total number of tasks completed to 0
1516
lastCompletionDate: undefined as string | undefined, //last completion date in YYYY-MM-DD string
1617
},
1718
},
@@ -23,6 +24,7 @@ export default createStore({
2324
getScore: (state) => state.user.score, //get user score
2425
getDailyStreak: (state) => state.user.dailyStreak, //get user daily streak
2526
getTasksCompletedToday: (state) => state.user.tasksCompletedToday, //get user tasks completed in a day
27+
getTotalTasksCompleted: (state) => state.user.totalTasksCompleted, //get user total tasks completed
2628
getLastCompletionDate: (state) => state.user.lastCompletionDate, //get user last completion date
2729
},
2830
mutations: {
@@ -38,12 +40,13 @@ export default createStore({
3840
Number(new Date().setHours(23, 59, 59, 999))) /
3941
(1000 * 60 * 60 * 24); //calculate number of days until the task is due
4042
const dateMultiplier: 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-
let streakMultiplier: 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-
let repeatMultiplier: number; //calculate task repetition XP multiplier based on task repetition occurrence and task repetition frequency
44-
let dailyStreakMultiplier: 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+
let streakMultiplier: 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+
let repeatMultiplier: number; //calculate task repetition XP and score multiplier based on task repetition occurrence and task repetition frequency
46+
let dailyStreakMultiplier: number; //calculate daily streak XP and score multiplier based on daily streak
4547
let levelMultiplier: number; //calculate level score multiplier based on user level
46-
let dayTasksMultiplier: number; //calculate XP multiplier for tasks completed in a day
48+
let dayTasksMultiplier: number; //calculate XP and score multiplier for tasks completed in a day
49+
let tasksMultiplier: number; //calculate score multiplier for total number of tasks completed
4750
//calculate task repetition XP multiplier
4851
if (task.repeatFrequency === 1) {
4952
//if task repetition is daily
@@ -252,6 +255,55 @@ export default createStore({
252255
} else {
253256
levelMultiplier = 9.5; //9.5 level score multiplier from level 10000
254257
}
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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
} else if (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+
}
255307
//calculate amount of XP earned and points earned when task is completed
256308
const xp: number = Math.max(
257309
Math.floor(
@@ -275,7 +327,8 @@ export default createStore({
275327
streakMultiplier *
276328
dailyStreakMultiplier *
277329
dayTasksMultiplier *
278-
levelMultiplier
330+
levelMultiplier *
331+
tasksMultiplier
279332
),
280333
1
281334
); //get at least 1 point when the task is completed

0 commit comments

Comments
 (0)