charasheet/src/character/views.py

77 lines
2.7 KiB
Python
Raw Normal View History

2022-10-30 10:12:49 +01:00
from django.contrib.auth.decorators import login_required
from django.core.handlers.wsgi import WSGIRequest
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render
from character.models import Character
@login_required
def character_view(request: WSGIRequest, pk: int) -> HttpResponse:
2022-10-30 17:56:36 +01:00
character = get_object_or_404(
Character.objects.select_related(
"player", "racial_capability", "profile", "race"
).prefetch_related("capabilities__path", "weapons"),
pk=pk,
)
2022-10-30 10:12:49 +01:00
context = {"character": character}
return render(request, "character/view.html", context)
2022-10-30 17:37:09 +01:00
@login_required
def character_health_change(request: WSGIRequest, pk: int) -> HttpResponse:
2022-10-30 17:56:36 +01:00
character = get_object_or_404(
Character.objects.only("health_max", "health_remaining"), pk=pk
)
2022-10-30 18:42:55 +01:00
value = get_updated_value(request, character.health_remaining, character.health_max)
2022-10-30 17:56:36 +01:00
character.health_remaining = value
2022-10-30 17:37:09 +01:00
character.save(update_fields=["health_remaining"])
return HttpResponse(character.health_remaining)
2022-10-30 17:47:42 +01:00
@login_required
def character_mana_change(request: WSGIRequest, pk: int) -> HttpResponse:
2022-10-30 17:56:36 +01:00
character = get_object_or_404(
Character.objects.only("mana_remaining", "level", "value_intelligence"), pk=pk
)
2022-10-30 18:42:55 +01:00
value = get_updated_value(request, character.mana_remaining, character.mana_max)
2022-10-30 17:56:36 +01:00
character.mana_remaining = value
character.save(update_fields=["mana_remaining"])
return HttpResponse(character.mana_remaining)
2022-10-30 18:42:55 +01:00
def get_updated_value(
request: WSGIRequest, remaining_value: int, max_value: int
) -> int:
form_value = request.GET.get("value")
if form_value == "ko":
remaining_value = 0
elif form_value == "max":
remaining_value = max_value
2022-10-30 17:47:42 +01:00
else:
2022-10-30 18:42:55 +01:00
form_value = int(form_value)
remaining_value += form_value
remaining_value = min([max_value, remaining_value])
remaining_value = max([0, remaining_value])
return remaining_value
2022-10-30 18:33:30 +01:00
@login_required
def character_notes_change(request: WSGIRequest, pk: int) -> HttpResponse:
2022-10-30 18:36:18 +01:00
return update_text_field(request, pk, "notes")
2022-10-30 18:33:30 +01:00
@login_required
def character_equipment_change(request: WSGIRequest, pk: int) -> HttpResponse:
2022-10-30 18:36:18 +01:00
return update_text_field(request, pk, "equipment")
def update_text_field(request, pk, field):
character = get_object_or_404(Character.objects.only(field), pk=pk)
2022-10-30 18:33:30 +01:00
context = {"character": character}
if request.method == "GET":
2022-10-30 18:36:18 +01:00
return render(request, f"character/{field}_update.html", context)
setattr(character, field, request.POST.get(field))
2022-10-30 18:33:30 +01:00
character.save()
2022-10-30 18:36:18 +01:00
return render(request, f"character/{field}_display.html", context)