bloonsworld/app/bloonsa_game/views.py
2025-02-24 21:56:04 +01:00

63 lines
2.3 KiB
Python

from django.db.models import F, BooleanField, IntegerField, ExpressionWrapper, Count, Sum, DecimalField, Q
from django.db.models.functions import Cast
from django.shortcuts import render
from django.views.generic import TemplateView
from bloonsa_game.models import Level
from settings.settings import DEBUG
from users.models import Player
from users.util import bloonsa_util, actions
class IndexView(TemplateView):
def get(self, request, *args, **kwargs):
return render(request, "bloonsa_game/index.html", context={})
class TermsView(TemplateView):
def get(self, request, *args, **kwargs):
return render(request, "bloonsa_game/terms.html", context={})
class GameView(TemplateView):
def get(self, request, *args, **kwargs):
# This init is for accounts made with 'createsuperuser' or originating from bloonsb
player = bloonsa_util.init_player(request=request)
total_levels = Level.objects.count()
if type(kwargs.get("pk")) is int:
level = Level.objects.get(level_id=kwargs["pk"])
if level:
bloonsa_util.log(player=player,
request=request,
action=actions.bloonsa_load_level_by_url,
note=level)
return render(request, "bloonsa_game/game.html", context={
"total_levels": total_levels,
"flashVars": level.get_flash_vars(seperator="&"),
})
r = render(request, "bloonsa_game/game.html",
context={"total_levels": total_levels,})
return r
class LeaderboardGlobalView(TemplateView):
def get(self, request, *args, **kwargs):
# Get top 100 best players
players = Player.objects.annotate(
clears=Count("bloonsa_level_scores", filter=Q(bloonsa_level_scores__clear=True)),
golds=Count("bloonsa_level_scores", filter=Q(bloonsa_level_scores__dart_glitch_ever=True))
).annotate(
volforce=F("clears") + (F("golds") * 0.5)
).order_by("-volforce")[:10]
r = render(request, "bloonsa_game/modules/leaderboard_global.html",
context={
"players": players
})
r["x-frame-options"] = "sameorigin"
return r