Move dependencies code to separate class
This commit is contained in:
@@ -1,9 +1,77 @@
|
||||
from aoe.types import *
|
||||
from aoe.exceptions import *
|
||||
|
||||
|
||||
|
||||
class BuildingDependencies():
|
||||
class Dependencies():
|
||||
|
||||
|
||||
def check_dependencies(self, world, thing):
|
||||
if type(thing) == Ages:
|
||||
self._check_age_dependencies(world, thing)
|
||||
else:
|
||||
self._check_non_age_dependencies(world, thing)
|
||||
|
||||
|
||||
def _check_non_age_dependencies(self, world, thing):
|
||||
for dep in self.dependencies[thing]:
|
||||
if dep not in world.buildings and \
|
||||
dep not in world.research and \
|
||||
not self._is_sufficient_age(world, dep):
|
||||
raise MissingDependencyException
|
||||
|
||||
|
||||
@staticmethod
|
||||
def _is_sufficient_age(world, age):
|
||||
if type(age) == Ages and world.age >= age:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def _check_age_dependencies(self, world, age):
|
||||
total_buildings = 0
|
||||
for building in self.age_dependencies[age].keys():
|
||||
if world.has_building(building):
|
||||
total_buildings += self.age_dependencies[age][building]
|
||||
if total_buildings < self.age_dependencies_counts[age]:
|
||||
raise MissingDependencyException
|
||||
|
||||
|
||||
def __init__(self):
|
||||
self.age_dependencies = {
|
||||
Ages.FEUDAL: {
|
||||
Buildings.BARRACKS: 1,
|
||||
Buildings.MILL: 1,
|
||||
Buildings.LUMBERCAMP: 1,
|
||||
Buildings.MININGCAMP: 1,
|
||||
Buildings.DOCK: 1,
|
||||
#Buildings.MULECART: 1,
|
||||
#Buildings.FOLWARK: 1,
|
||||
#Buildings.SETTLEMENT: 2,
|
||||
},
|
||||
Ages.CASTLE: {
|
||||
Buildings.ARCHERYRANGE: 1,
|
||||
Buildings.STABLE: 1,
|
||||
Buildings.MARKET: 1,
|
||||
Buildings.BLACKSMITH: 1,
|
||||
#Buildings.SIEGEWORKSHOP: 1,
|
||||
},
|
||||
Ages.IMPERIAL: {
|
||||
#Buildings.MONASTERY: 1,
|
||||
#Buildings.FORTIFIEDCHURCH: 1,
|
||||
#Buildings.UNIVERSITY: 1,
|
||||
#Buildings.SIEGEWORKSHOP: 1,
|
||||
#Buildings.CASTLE: 2,
|
||||
#Buildings.KREPOST: 2,
|
||||
},
|
||||
}
|
||||
|
||||
self.age_dependencies_counts = {
|
||||
Ages.FEUDAL: 2,
|
||||
Ages.CASTLE: 2,
|
||||
Ages.IMPERIAL: 2,
|
||||
}
|
||||
|
||||
self.dependencies = {
|
||||
Buildings.HOUSE: [Ages.DARK],
|
||||
Buildings.LUMBERCAMP: [Ages.DARK],
|
||||
@@ -39,50 +107,6 @@ class BuildingDependencies():
|
||||
#Buildings.FEITORIA: [Ages.IMPERIAL],
|
||||
Buildings.BOMBARDTOWER: [Ages.IMPERIAL, Research.BOMBARDTOWER],
|
||||
Buildings.WONDER: [Ages.IMPERIAL],
|
||||
}
|
||||
|
||||
|
||||
|
||||
class AgeDependencies():
|
||||
def __init__(self):
|
||||
self.dependencies = {
|
||||
Ages.FEUDAL: {
|
||||
Buildings.BARRACKS: 1,
|
||||
Buildings.MILL: 1,
|
||||
Buildings.LUMBERCAMP: 1,
|
||||
Buildings.MININGCAMP: 1,
|
||||
Buildings.DOCK: 1,
|
||||
#Buildings.MULECART: 1,
|
||||
#Buildings.FOLWARK: 1,
|
||||
#Buildings.SETTLEMENT: 2,
|
||||
},
|
||||
Ages.CASTLE: {
|
||||
Buildings.ARCHERYRANGE: 1,
|
||||
Buildings.STABLE: 1,
|
||||
Buildings.MARKET: 1,
|
||||
Buildings.BLACKSMITH: 1,
|
||||
#Buildings.SIEGEWORKSHOP: 1,
|
||||
},
|
||||
Ages.IMPERIAL: {
|
||||
#Buildings.MONASTERY: 1,
|
||||
#Buildings.FORTIFIEDCHURCH: 1,
|
||||
#Buildings.UNIVERSITY: 1,
|
||||
#Buildings.SIEGEWORKSHOP: 1,
|
||||
#Buildings.CASTLE: 2,
|
||||
#Buildings.KREPOST: 2,
|
||||
},
|
||||
}
|
||||
self.dependencies_counts = {
|
||||
Ages.FEUDAL: 2,
|
||||
Ages.CASTLE: 2,
|
||||
Ages.IMPERIAL: 2,
|
||||
}
|
||||
|
||||
|
||||
|
||||
class ResearchDependencies():
|
||||
def __init__(self):
|
||||
self.dependencies = {
|
||||
Research.TOWNWATCH: [Ages.FEUDAL,
|
||||
Buildings.TOWNCENTER],
|
||||
Research.TOWNPATROL: [Ages.CASTLE,
|
||||
@@ -237,13 +261,6 @@ class ResearchDependencies():
|
||||
Research.BOMBARDTOWER: [Ages.IMPERIAL,
|
||||
Buildings.UNIVERSITY,
|
||||
Research.CHEMISTRY],
|
||||
}
|
||||
|
||||
|
||||
|
||||
class UnitDependencies():
|
||||
def __init__(self):
|
||||
self.dependencies = {
|
||||
Units.VILLAGER: [Buildings.TOWNCENTER],
|
||||
Units.TRADECART: [Buildings.MARKET],
|
||||
Units.SPEARMAN: [Ages.FEUDAL, Buildings.BARRACKS],
|
||||
|
||||
Reference in New Issue
Block a user