|
|
|
@ -2,6 +2,7 @@ from collections import OrderedDict
|
|
|
|
|
from io import BytesIO
|
|
|
|
|
import qrcode
|
|
|
|
|
|
|
|
|
|
from django.db import transaction
|
|
|
|
|
from django.http import HttpResponse
|
|
|
|
|
from django.shortcuts import get_object_or_404, redirect, render
|
|
|
|
|
from django.views.decorators.http import require_safe, require_http_methods
|
|
|
|
@ -88,6 +89,7 @@ def qr_code(request, access_code):
|
|
|
|
|
return HttpResponse(output.getvalue(), content_type='image/png')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@transaction.atomic
|
|
|
|
|
@lookup_access_code
|
|
|
|
|
@require_http_methods(["HEAD", "GET", "POST"])
|
|
|
|
|
def game(request, game):
|
|
|
|
@ -106,9 +108,16 @@ def game(request, game):
|
|
|
|
|
}
|
|
|
|
|
current_phase = game.get_current_phase()
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
correct_phase =\
|
|
|
|
|
current_phase.game_turn == int(request.POST['game_turn'])\
|
|
|
|
|
and current_phase.game_phase == int(request.POST['game_phase'])
|
|
|
|
|
advance_phase = 'advance' in request.POST
|
|
|
|
|
for key, value in request.POST.items():
|
|
|
|
|
sections = key.split('-')
|
|
|
|
|
if key == 'csrfmiddlewaretoken' or sections[-1] == 'orig':
|
|
|
|
|
if key in ['csrfmiddlewaretoken',
|
|
|
|
|
'update', 'advance',
|
|
|
|
|
'game_turn', 'game_phase', 'phase_name']\
|
|
|
|
|
or sections[-1] == 'orig':
|
|
|
|
|
pass
|
|
|
|
|
elif sections[0] == 'player':
|
|
|
|
|
orig_value = request.POST.get(key + '-orig', None)
|
|
|
|
@ -117,7 +126,7 @@ def game(request, game):
|
|
|
|
|
if sections[2] == 'visible':
|
|
|
|
|
player.visible = True
|
|
|
|
|
elif sections[2] == 'ready':
|
|
|
|
|
if value != orig_value:
|
|
|
|
|
if correct_phase and value != orig_value:
|
|
|
|
|
if value == 'true':
|
|
|
|
|
player.ready = True
|
|
|
|
|
player.changed_to_ready = True
|
|
|
|
@ -140,6 +149,15 @@ def game(request, game):
|
|
|
|
|
f"#{effect_num} {effect_kind} " +
|
|
|
|
|
f"from {orig} to {amount} " +
|
|
|
|
|
"was not processed.")
|
|
|
|
|
elif not correct_phase or advance_phase:
|
|
|
|
|
old_phase = request.POST['phase_name']
|
|
|
|
|
errors.append(
|
|
|
|
|
f"{player.name} " +
|
|
|
|
|
f"({player.get_spirit_name()})'s " +
|
|
|
|
|
f"#{effect_num} {effect_kind} " +
|
|
|
|
|
"could not be change from " +
|
|
|
|
|
f"{orig} to {amount} " +
|
|
|
|
|
f"because {old_phase} has already ended.")
|
|
|
|
|
else:
|
|
|
|
|
fear_row, created = Fear.objects.get_or_create(
|
|
|
|
|
phase=current_phase,
|
|
|
|
@ -165,6 +183,15 @@ def game(request, game):
|
|
|
|
|
raise Exception(key + ": " + value)
|
|
|
|
|
else:
|
|
|
|
|
raise Exception(key + ": " + value)
|
|
|
|
|
if advance_phase:
|
|
|
|
|
players_ready = all(player.ready for player in players.values())
|
|
|
|
|
if not players_ready:
|
|
|
|
|
errors.append("Cannot advance to next phase until " +
|
|
|
|
|
"all players are done with the current phase.")
|
|
|
|
|
else:
|
|
|
|
|
current_phase = game.advance_phase()
|
|
|
|
|
for player in players.values():
|
|
|
|
|
player.ready = False
|
|
|
|
|
|
|
|
|
|
for fear in current_phase.fear_set.order_by('effect').all():
|
|
|
|
|
players[fear.player.order].fear[fear.effect] = {
|
|
|
|
@ -189,6 +216,7 @@ def game(request, game):
|
|
|
|
|
'access_code': game.access_code,
|
|
|
|
|
'turn': game.game_turn,
|
|
|
|
|
'phase': game.get_current_phase_name(),
|
|
|
|
|
'phase_id': game.game_phase,
|
|
|
|
|
'available_fear_cards': game.num_available_fear_cards(),
|
|
|
|
|
'fear_to_next_card': game.get_fear_to_next_card(),
|
|
|
|
|
'fear_this_phase': current_phase.fear_this_phase(),
|
|
|
|
|