|
@@ -0,0 +1,168 @@
|
|
|
|
|
+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(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):
|
|
|
|
|
+ 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")
|
|
|
|
|
+ target = models.ForeignKey(Colony, on_delete=models.PROTECT, verbose_name="TargetColony")
|
|
|
|
|
+ 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})>"
|
|
|
|
|
+
|