Skip to content

Commit ff1ba5d

Browse files
committed
Add multiplier for completing tasks in a day
1 parent 7ac62b7 commit ff1ba5d

File tree

2 files changed

+54
-6
lines changed

2 files changed

+54
-6
lines changed

src/components/TodoList.vue

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
<p>Level: {{ levels.toLocaleString("en-US") }}</p>
44
<p>XP: {{ xps.toLocaleString("en-US") }}</p>
55
<p>Daily Streak: {{ dailyStreaks.toLocaleString("en-US") }}</p>
6+
<p>
7+
Tasks Completed Today: {{ tasksCompletedTodays.toLocaleString("en-US") }}
8+
</p>
69
<p>Score: {{ scores.toLocaleString("en-US") }}</p>
710
<!--show circular progress bar filled with level progress--><ve-progress
811
:progress="progresses"
@@ -106,6 +109,9 @@ export default defineComponent({
106109
dailyStreaks() {
107110
return store.getters.getDailyStreak; //get current daily streak
108111
},
112+
tasksCompletedTodays() {
113+
return store.getters.getTasksCompletedToday; //get tasks completed in a day (today)
114+
},
109115
lastCompletedDates() {
110116
return store.getters.getLastCompletionDate; //get current last completion date
111117
},

src/store/index.ts

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)