mirror of
https://gitlab.crans.org/mediatek/med.git
synced 2025-07-06 16:14:00 +02:00
Add sporz app
This commit is contained in:
117
sporz/models.py
Normal file
117
sporz/models.py
Normal file
@ -0,0 +1,117 @@
|
||||
# -*- mode: python; coding: utf-8 -*-
|
||||
# Copyright (C) 2017-2019 by BDE ENS Paris-Saclay
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class GameSave(models.Model):
|
||||
created_at = models.DateTimeField(
|
||||
verbose_name=_('created at'),
|
||||
default=timezone.now,
|
||||
editable=False,
|
||||
)
|
||||
game_master = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
verbose_name=_('game master'),
|
||||
help_text=_('Game master can edit and delete this game save.'),
|
||||
)
|
||||
current_round = models.PositiveSmallIntegerField(
|
||||
verbose_name=_('current round'),
|
||||
default=1,
|
||||
)
|
||||
game_has_ended = models.BooleanField(
|
||||
verbose_name=_('game has ended'),
|
||||
help_text=_('If true, then everyone will be able to see the game.'),
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return "{} ({} {})".format(
|
||||
self.created_at.strftime("%b %d %Y %H:%M:%S"),
|
||||
len(self.player_set.all()),
|
||||
_("players"),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("game save")
|
||||
verbose_name_plural = _("game saves")
|
||||
ordering = ['-created_at']
|
||||
|
||||
|
||||
class Player(models.Model):
|
||||
# Player roles
|
||||
BASE_ASTRONAUT = 'BA'
|
||||
BASE_MUTANT = 'BM'
|
||||
HEALER = 'HE'
|
||||
PSYCHOLOGIST = 'PS'
|
||||
GENO_TECHNICIAN = 'GE'
|
||||
COMPUTER_SCIENTIST = 'CO'
|
||||
HACKER = 'HA'
|
||||
SPY = 'SP'
|
||||
DETECTIVE = 'DE'
|
||||
TRAITOR = 'TR'
|
||||
ROLES = [
|
||||
(BASE_ASTRONAUT, _('Base astronaut')),
|
||||
(BASE_MUTANT, _("Base mutant")),
|
||||
(HEALER, _("Healer")),
|
||||
(PSYCHOLOGIST, _("Psychologist")),
|
||||
(GENO_TECHNICIAN, _("Geno-technician")),
|
||||
(COMPUTER_SCIENTIST, _("Computer scientist")),
|
||||
(HACKER, _("Hacker")),
|
||||
(SPY, _("Spy")),
|
||||
(DETECTIVE, _("Detective")),
|
||||
(TRAITOR, _("Traitor")),
|
||||
]
|
||||
|
||||
# Genotypes
|
||||
NEUTRAL = None
|
||||
HOST = False
|
||||
IMMUNIZED = True
|
||||
GENOTYPES = [
|
||||
(NEUTRAL, _("Neutral")),
|
||||
(HOST, _("Host")),
|
||||
(IMMUNIZED, _("Immunized"))
|
||||
]
|
||||
|
||||
game = models.ForeignKey(
|
||||
GameSave,
|
||||
on_delete=models.CASCADE,
|
||||
verbose_name=_('game'),
|
||||
)
|
||||
name = models.CharField(
|
||||
max_length=150,
|
||||
verbose_name=_('name'),
|
||||
)
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
blank=True,
|
||||
null=True,
|
||||
verbose_name=_('user'),
|
||||
help_text=_('Optionnal mapping to an user.'),
|
||||
)
|
||||
role = models.CharField(
|
||||
max_length=2,
|
||||
choices=ROLES,
|
||||
default=BASE_ASTRONAUT,
|
||||
)
|
||||
genotype = models.NullBooleanField(
|
||||
verbose_name=_('genotype'),
|
||||
choices=GENOTYPES,
|
||||
)
|
||||
infected = models.BooleanField(
|
||||
verbose_name=_('infected'),
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.user)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("player")
|
||||
verbose_name_plural = _("players")
|
||||
ordering = ['user__username']
|
||||
unique_together = ['game', 'name']
|
Reference in New Issue
Block a user