Skip to content

Commit f2d7761

Browse files
committed
Add combo multiplier
1 parent 703aa75 commit f2d7761

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

app.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ class User(db.Model):
4848
days_completed: int = db.Column(
4949
db.Integer, default=0, nullable=False
5050
) # user days completed with tasks
51+
combo_multiplier: int = db.Column(
52+
db.Integer, default=0, nullable=False
53+
) # user XP multiplier for combo
54+
last_task_completed: int = db.Column(
55+
db.Integer, default=-1, nullable=False
56+
) # user last task completion ID
5157

5258
def add_xp(self, amount: float) -> None: # add XP
5359
self.xp += amount # add XP by amount
@@ -315,6 +321,15 @@ def complete_task(task_id) -> Response: # complete task from task id
315321
user.last_completion_date = (
316322
datetime.now()
317323
) # set user last completion date to today
324+
if (
325+
task.id == user.last_completed_task
326+
): # if the task is the last completed task
327+
user.combo_multiplier += 1 # increase combo multipler by 1
328+
else:
329+
user.combo_multiplier = 0 # reset combo multiplier to 0
330+
user.last_completed_task = (
331+
task.id
332+
) # set user last completed task to task id
318333
user.add_xp(
319334
round(
320335
task.priority
@@ -329,7 +344,9 @@ def complete_task(task_id) -> Response: # complete task from task id
329344
* (1 + math.log(max(user.days_completed, 1)))
330345
* (1 + task.streak / 10)
331346
* due_multiplier
347+
* (1 + user.combo_multiplier / 10)
332348
)
349+
+ user.combo_multiplier
333350
) # add XP
334351
db.session.commit() # commit database changes
335352
return redirect(url_for("index")) # redirect to index page template
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
"""Add combo multipliers
2+
3+
Revision ID: 28e53a4e60fe
4+
Revises: fa5ff0ea7eab
5+
Create Date: 2025-01-14 22:48:14.773004
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
11+
12+
# revision identifiers, used by Alembic.
13+
revision = '28e53a4e60fe'
14+
down_revision = 'fa5ff0ea7eab'
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade():
20+
# ### commands auto generated by Alembic - please adjust! ###
21+
with op.batch_alter_table('task', schema=None) as batch_op:
22+
batch_op.alter_column('streak',
23+
existing_type=sa.INTEGER(),
24+
nullable=False,
25+
existing_server_default=sa.text('0'))
26+
batch_op.alter_column('completed',
27+
existing_type=sa.INTEGER(),
28+
type_=sa.Boolean(),
29+
existing_nullable=False,
30+
existing_server_default=sa.text('0'))
31+
32+
with op.batch_alter_table('user', schema=None) as batch_op:
33+
batch_op.add_column(sa.Column('combo_multiplier', sa.Integer(), nullable=False))
34+
batch_op.add_column(sa.Column('last_task_completed', sa.Integer(), nullable=False))
35+
batch_op.alter_column('tasks_completed',
36+
existing_type=sa.INTEGER(),
37+
nullable=False,
38+
existing_server_default=sa.text('0'))
39+
40+
# ### end Alembic commands ###
41+
42+
43+
def downgrade():
44+
# ### commands auto generated by Alembic - please adjust! ###
45+
with op.batch_alter_table('user', schema=None) as batch_op:
46+
batch_op.alter_column('tasks_completed',
47+
existing_type=sa.INTEGER(),
48+
nullable=True,
49+
existing_server_default=sa.text('0'))
50+
batch_op.drop_column('last_task_completed')
51+
batch_op.drop_column('combo_multiplier')
52+
53+
with op.batch_alter_table('task', schema=None) as batch_op:
54+
batch_op.alter_column('completed',
55+
existing_type=sa.Boolean(),
56+
type_=sa.INTEGER(),
57+
existing_nullable=False,
58+
existing_server_default=sa.text('0'))
59+
batch_op.alter_column('streak',
60+
existing_type=sa.INTEGER(),
61+
nullable=True,
62+
existing_server_default=sa.text('0'))
63+
64+
# ### end Alembic commands ###

0 commit comments

Comments
 (0)