| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- import uuid
- from django.contrib.contenttypes.models import ContentType
- from django.core import serializers
- from django.db import models
- class BaseModel(models.Model):
- id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
- created = models.DateTimeField(auto_now_add=True)
- updated = models.DateTimeField(auto_now=True)
- objects = models.Manager()
- class Meta:
- abstract = True
- def get_content_type(self):
- return ContentType.objects.get_for_model(self)
- def model_name(self):
- try:
- return self._meta.verbose_name
- except AttributeError:
- return ""
- def to_json(self):
- return serializers.serialize('json', [self, ])
- class Account(BaseModel):
- class Meta:
- verbose_name = "account"
- verbose_name_plural = "accounts"
- username = models.CharField(max_length=100)
- password = models.CharField(max_length=100)
- email = models.CharField(max_length=100)
- last_login = models.DateTimeField()
- def __str__(self):
- return f"<Account {self.username} ({self.id})>"
- class Planet(BaseModel):
- class Meta:
- verbose_name = "planet"
- verbose_name_plural = "planets"
- name = models.CharField(max_length=100)
- def __str__(self):
- return f"<Planet {self.name} ({self.id})>"
- class Player(BaseModel):
- class Meta:
- verbose_name = "player"
- verbose_name_plural = "players"
- account = models.ForeignKey(Account, on_delete=models.PROTECT, verbose_name="Account")
- planet = models.ForeignKey(Planet, on_delete=models.PROTECT, verbose_name="Planet")
- def __str__(self):
- return f"<Player {self.account.username}@{self.planet.name} ({self.id})>"
- class Dome(BaseModel):
- class Meta:
- verbose_name = "dome"
- verbose_name_plural = "domes"
- name = models.CharField(max_length=100)
- player = models.ForeignKey(Player, on_delete=models.PROTECT, verbose_name="Player")
- population = models.IntegerField(default=0)
- def __str__(self):
- return f"<Dome {self.name} ({self.id})>"
- class DomeBuilding(BaseModel):
- class Meta:
- verbose_name = "dome_building"
- verbose_name_plural = "dome_buildings"
- name = models.CharField(max_length=255)
- def __str__(self):
- return f"<DomeBuilding {self.name} ({self.id})>"
- class DomeBuildingInstance(BaseModel):
- class Meta:
- verbose_name = "dome_building_instance"
- verbose_name_plural = "dome_building_instances"
- dome = models.ForeignKey(Dome, on_delete=models.PROTECT, verbose_name="Dome")
- dome_building = models.ForeignKey(DomeBuilding, on_delete=models.PROTECT, verbose_name="DomeBuilding")
- level = models.IntegerField(default=1)
- def __str__(self):
- return f"<DomeBuildingInstance {self.dome_building.name}@{self.dome.name} ({self.id})>"
- class LocalisedBaseModel(BaseModel):
- class Meta:
- abstract = True
- x = models.IntegerField()
- y = models.IntegerField()
- class Colony(LocalisedBaseModel):
- class Meta:
- verbose_name = "colony"
- verbose_name_plural = "colonies"
- player = models.ForeignKey(Player, on_delete=models.PROTECT, verbose_name="Player")
- name = models.CharField(max_length=100)
- def __str__(self):
- return f"<Colony {self.name} ({self.id})>"
- class ColonyBuilding(BaseModel):
- class Meta:
- verbose_name = "colony_building"
- verbose_name_plural = "colony_buildings"
- name = models.CharField(max_length=100)
- def __str__(self):
- return f"<ColonyBuilding {self.name} ({self.id})>"
- class ColonyBuildingInstance(LocalisedBaseModel):
- class Meta:
- verbose_name = "colony_building_instance"
- verbose_name_plural = "colony_building_instances"
- colony = models.ForeignKey(Colony, on_delete=models.PROTECT, verbose_name="Colony")
- colony_building = models.ForeignKey(ColonyBuilding, on_delete=models.PROTECT, verbose_name="ColonyBuilding")
- def __str__(self):
- return f"<ColonyBuilding {self.colony_building.name}@{self.colony.name} ({self.id})>"
- class Transport(BaseModel):
- class Meta:
- verbose_name = "transport"
- verbose_name_plural = "transports"
- name = models.CharField(max_length=100)
- max_distance = models.IntegerField()
- required_building = models.IntegerField(null=True)
- def __str__(self):
- return f"<Transport {self.name} ({self.id})>"
- class Route(BaseModel):
- class Meta:
- verbose_name = "route"
- verbose_name_plural = "routes"
- origin = models.ForeignKey(Colony, on_delete=models.PROTECT, verbose_name="OriginColony", related_name="origin_for")
- target = models.ForeignKey(Colony, on_delete=models.PROTECT, verbose_name="TargetColony", related_name="target_of")
- transport = models.ForeignKey(Transport, on_delete=models.PROTECT, verbose_name="Transport")
- def __str__(self):
- return f"<Route {self.origin.name}>{self.target.name} ({self.id})>"
|