Skip to content

Commit

Permalink
Revert "setting for new level progression bars (#246)"
Browse files Browse the repository at this point in the history
This reverts commit 79776e9.
  • Loading branch information
vEnhance committed Aug 9, 2023
1 parent 79776e9 commit a784a8f
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 43 deletions.
1 change: 0 additions & 1 deletion core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ class UserProfileAdmin(admin.ModelAdmin):
"show_bars",
"show_completed_by_default",
"show_locked_by_default",
"dynamic_progress",
)
search_fields = (
"user__first_name",
Expand Down
8 changes: 0 additions & 8 deletions core/migrations/0029_userprofile.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,6 @@ class Migration(migrations.Migration):
verbose_name="Show locked",
),
),
(
"dynamic_progress",
models.BooleanField(
default=False,
help_text="Level meters show progression towards the next value to level up rather than a fixed max value",
verbose_name="Dynamic level meters progression",
),
),
(
"user",
models.OneToOneField(
Expand Down
5 changes: 0 additions & 5 deletions core/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -281,11 +281,6 @@ class UserProfile(models.Model):
help_text="Show the artwork on the curriculum table",
default=True,
)
dynamic_progress = models.BooleanField(
verbose_name="Dynamic level meters progression",
help_text="Level meters show progression towards the next value to level up rather than a fixed max value",
default=False,
)

last_seen = models.DateTimeField(
help_text="Last time user was seen at all",
Expand Down
1 change: 0 additions & 1 deletion core/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,6 @@ class UserProfileUpdateView(
"show_completed_by_default",
"show_locked_by_default",
"show_artwork_on_curriculum",
"dynamic_progress",
)
success_url = reverse_lazy("profile")
object: UserProfile
Expand Down
38 changes: 10 additions & 28 deletions rpg/levelsys.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,31 +48,22 @@ def __init__(
unit: str,
color: str,
max_value: int,
dynamic_progress: bool = False,
):
self.name = name
self.emoji = emoji
self.value = value
self.unit = unit
self.color = color
self.max_value = max_value
self.dynamic_progress = dynamic_progress

@property
def level(self) -> int:
return int(max(0, self.value) ** 0.5)

@property
def percent(self) -> int:
eps = 0.4 # Make sure text fits in the bar
if self.dynamic_progress:
lvl = self.level
prev_value = lvl**2
current_gap = self.value - prev_value
total_gap = 2 * lvl + 1
k = (current_gap + eps * total_gap) / ((1 + eps) * total_gap)
else:
k = (self.value + eps * self.max_value) / ((1 + eps) * self.max_value)
eps = 0.40 # Make sure text fits in the bar
k = (self.value + eps * self.max_value) / ((1 + eps) * self.max_value)
return min(100, int(100 * k))

@property
Expand All @@ -88,51 +79,47 @@ def total(self):
return self.value

@staticmethod
def ClubMeter(value: int, dynamic_progress: bool):
def ClubMeter(value: int):
return Meter(
name="Dexterity",
emoji="♣️",
value=value,
unit="♣",
color="#007bff;",
max_value=2500,
dynamic_progress=dynamic_progress,
)

@staticmethod
def HeartMeter(value: float, dynamic_progress: bool):
def HeartMeter(value: float):
return Meter(
name="Wisdom",
emoji="🕰️",
value=value,
unit="♥",
color="#198754",
max_value=2500,
dynamic_progress=dynamic_progress,
)

@staticmethod
def SpadeMeter(value: float, dynamic_progress: bool):
def SpadeMeter(value: float):
return Meter(
name="Strength",
emoji="🏆",
value=value,
unit="♠",
color="#ae610f",
max_value=169,
dynamic_progress=dynamic_progress,
)

@staticmethod
def DiamondMeter(value: int, dynamic_progress: bool):
def DiamondMeter(value: int):
return Meter(
name="Charisma",
emoji="㊙️",
value=value,
unit="◆",
color="#9c1421",
max_value=144,
dynamic_progress=dynamic_progress,
)


Expand Down Expand Up @@ -243,16 +230,11 @@ def get_level_info(student: Student) -> LevelInfoDict:
# TODO total_spades += hint_spades
total_spades += hanabi_replays.aggregate(total=Sum("spades_score"))["total"] or 0

try:
dynamic_progress = (UserProfile.objects.get(user=student.user)).dynamic_progress
except UserProfile.DoesNotExist:
dynamic_progress = False

meters: FourMetersDict = {
"clubs": Meter.ClubMeter(int(total_clubs), dynamic_progress),
"hearts": Meter.HeartMeter(round(total_hearts, 2), dynamic_progress),
"diamonds": Meter.DiamondMeter(int(total_diamonds), dynamic_progress),
"spades": Meter.SpadeMeter(round(total_spades, 1), dynamic_progress),
"clubs": Meter.ClubMeter(int(total_clubs)),
"hearts": Meter.HeartMeter(round(total_hearts, 2)),
"diamonds": Meter.DiamondMeter(int(total_diamonds)),
"spades": Meter.SpadeMeter(round(total_spades, 1)),
}
level_number = sum(meter.level for meter in meters.values()) # type: ignore
level = (
Expand Down

0 comments on commit a784a8f

Please sign in to comment.