50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
from tungston.core.world import World
|
|
from tungston.core.ecology.biometrait import BiomeTrait
|
|
from tungston.generator.markdown.report import Report
|
|
|
|
|
|
# Class ############################################################################################
|
|
|
|
class MobReport(Report):
|
|
|
|
def __init__(self, world:World):
|
|
super().__init__("mobs.md", world)
|
|
|
|
def build(self):
|
|
for placement in self.world.mobs.all():
|
|
self.line(f"# Mob: {placement.mob.name} <{placement.mob.gameId}>")
|
|
self.line()
|
|
|
|
self.indent()
|
|
for index, habitat in enumerate(placement.habitats, start=1):
|
|
self.text("* habitat ").line(index)
|
|
self.indent()
|
|
self.text("* altitude: ").line(habitat.altitude)
|
|
self.line("* biomeFilter:")
|
|
|
|
self.indent()
|
|
for trait in habitat.biomeFilter.required:
|
|
if isinstance(trait, BiomeTrait):
|
|
self.text("* ").line(trait)
|
|
else:
|
|
category = type(trait[0]).__name__
|
|
self.text("* ").\
|
|
text(category).\
|
|
text(": any of: ").\
|
|
line(", ".join([t.name for t in trait]))
|
|
|
|
for trait in habitat.biomeFilter.prohibited:
|
|
category = type(trait[0]).__name__
|
|
self.text("* ").text(category).text(": not: ").line(trait.name)
|
|
|
|
self.outdent()
|
|
|
|
self.text("* seasons: ").line(", ".join([s.name for s in habitat.seasons]))
|
|
self.text("* group: ").line(habitat.group.name)
|
|
self.text("* location: ").line(habitat.location.name)
|
|
self.text("* scarcity: ").line(habitat.scarcity.name)
|
|
self.outdent()
|
|
|
|
self.outdent()
|
|
self.line()
|