from django.db.models import F, BooleanField, IntegerField, ExpressionWrapper, Count, Sum, DecimalField 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,}) if DEBUG: r["x-frame-options"] = "sameorigin" return r class LeaderboardGlobalView(TemplateView): def get(self, request, *args, **kwargs): # Get top 100 best players players = Player.objects.annotate( clears=Count(F("bloonsa_level_scores__clear")), golds=Count(F("bloonsa_level_scores__dart_glitch_ever")) ).annotate( volforce=F("clears") + F("golds") ).order_by("-volforce")[:10] r = render(request, "bloonsa_game/modules/leaderboard_global.html", context={ "players": players }) if DEBUG: r["x-frame-options"] = "sameorigin" return r