Skip to content

Commit 4a5f081

Browse files
committed
Add score multiplier based on number of active tasks
1 parent 4d6a82a commit 4a5f081

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

src/store/index.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ export default createStore({
5555
let levelMultiplier: number; //calculate level score multiplier based on user level
5656
let dayTasksMultiplier: number; //calculate XP and score multiplier for tasks completed in a day (today)
5757
let tasksMultiplier: number; //calculate score multiplier for total number of tasks completed
58+
const activeTasks: number = state.todos.filter(
59+
(taskList) => !taskList.completed
60+
).length; //calculate number of active tasks (tasks that are not completed) using array.filter
61+
let activeTasksMultiplier: number; //calculate score multiplier for number of active tasks (tasks that are not completed)
5862
//calculate task repetition XP multiplier
5963
if (Number(task.repeatFrequency) === 1) {
6064
//if task repetition is daily
@@ -321,6 +325,36 @@ export default createStore({
321325
} else {
322326
tasksMultiplier = 55; //55x task score multiplier from 1,000,000 tasks
323327
}
328+
//calculate active task score multiplier
329+
if (activeTasks === (0 || 1)) {
330+
activeTasksMultiplier = 1; //1x active task score multiplier for 0 or 1 active task
331+
} else if (activeTasks < 3) {
332+
activeTasksMultiplier = 1 + 0.25 * (activeTasks - 1); //1x active task score multiplier from 1 active task plus 0.25x active task score multiplier for each active task
333+
} else if (activeTasks < 5) {
334+
activeTasksMultiplier = 1.5 + 0.2 * (activeTasks - 3); //1.5x active task score multiplier from 3 active tasks plus 0.2x active task score multiplier for each active task
335+
} else if (activeTasks < 10) {
336+
activeTasksMultiplier = 1.9 + 0.12 * (activeTasks - 5); //1.9x active task score multiplier from 5 active tasks plus 0.12x active task score multiplier for each active task
337+
} else if (activeTasks < 20) {
338+
activeTasksMultiplier = 2.5 + 0.05 * (activeTasks - 10); //2.5x active task score multiplier from 10 active tasks plus 0.05x active task score multiplier for each active task
339+
} else if (activeTasks < 50) {
340+
activeTasksMultiplier = 3 + 0.03 * (activeTasks - 20); //3x active task score multiplier from 20 active tasks plus 0.03x active task score multiplier for each active task
341+
} else if (activeTasks < 100) {
342+
activeTasksMultiplier = 3.9 + 0.022 * (activeTasks - 50); //3.9x active task score multiplier from 50 active tasks plus 0.022x active task score multiplier for each active task
343+
} else if (activeTasks < 200) {
344+
activeTasksMultiplier = 5 + 0.015 * (activeTasks - 100); //5x active task score multiplier from 100 active tasks plus 0.015x active task score multiplier for each active task
345+
} else if (activeTasks < 500) {
346+
activeTasksMultiplier = 6.5 + 0.01 * (activeTasks - 200); //6.5x active task score multiplier from 200 active tasks plus 0.01x active task score multiplier for each active task
347+
} else if (activeTasks < 1000) {
348+
activeTasksMultiplier = 9.5 + 0.005 * (activeTasks - 500); //9.5x active task score multiplier from 500 active tasks plus 0.005x active task score multiplier for each active task
349+
} else if (activeTasks < 2000) {
350+
activeTasksMultiplier = 12 + 0.004 * (activeTasks - 1000); //12x active task score multiplier from 1,000 active tasks plus 0.004x active task score multiplier for each active task
351+
} else if (activeTasks < 5000) {
352+
activeTasksMultiplier = 16 + 0.002 * (activeTasks - 2000); //16x active task score multiplier from 2,000 active tasks plus 0.002x active task score multiplier for each active task
353+
} else if (activeTasks < 10000) {
354+
activeTasksMultiplier = 22 + 0.001 * (activeTasks - 5000); //22x active task score multiplier from 5,000 active tasks plus 0.001x active task score multiplier for each active task
355+
} else {
356+
activeTasksMultiplier = 27; //27x active task score multiplier from 10,000 active tasks
357+
}
324358
//calculate amount of XP earned and points earned when task is completed
325359
const xp: number = Math.max(
326360
Math.floor(
@@ -345,7 +379,8 @@ export default createStore({
345379
dailyStreakMultiplier *
346380
dayTasksMultiplier *
347381
levelMultiplier *
348-
tasksMultiplier
382+
tasksMultiplier *
383+
activeTasksMultiplier
349384
),
350385
1
351386
); //get at least 1 point when the task is completed

0 commit comments

Comments
 (0)