Move dependencies code to separate class
This commit is contained in:
@@ -1,9 +1,77 @@
|
|||||||
from aoe.types import *
|
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):
|
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 = {
|
self.dependencies = {
|
||||||
Buildings.HOUSE: [Ages.DARK],
|
Buildings.HOUSE: [Ages.DARK],
|
||||||
Buildings.LUMBERCAMP: [Ages.DARK],
|
Buildings.LUMBERCAMP: [Ages.DARK],
|
||||||
@@ -39,50 +107,6 @@ class BuildingDependencies():
|
|||||||
#Buildings.FEITORIA: [Ages.IMPERIAL],
|
#Buildings.FEITORIA: [Ages.IMPERIAL],
|
||||||
Buildings.BOMBARDTOWER: [Ages.IMPERIAL, Research.BOMBARDTOWER],
|
Buildings.BOMBARDTOWER: [Ages.IMPERIAL, Research.BOMBARDTOWER],
|
||||||
Buildings.WONDER: [Ages.IMPERIAL],
|
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,
|
Research.TOWNWATCH: [Ages.FEUDAL,
|
||||||
Buildings.TOWNCENTER],
|
Buildings.TOWNCENTER],
|
||||||
Research.TOWNPATROL: [Ages.CASTLE,
|
Research.TOWNPATROL: [Ages.CASTLE,
|
||||||
@@ -237,13 +261,6 @@ class ResearchDependencies():
|
|||||||
Research.BOMBARDTOWER: [Ages.IMPERIAL,
|
Research.BOMBARDTOWER: [Ages.IMPERIAL,
|
||||||
Buildings.UNIVERSITY,
|
Buildings.UNIVERSITY,
|
||||||
Research.CHEMISTRY],
|
Research.CHEMISTRY],
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class UnitDependencies():
|
|
||||||
def __init__(self):
|
|
||||||
self.dependencies = {
|
|
||||||
Units.VILLAGER: [Buildings.TOWNCENTER],
|
Units.VILLAGER: [Buildings.TOWNCENTER],
|
||||||
Units.TRADECART: [Buildings.MARKET],
|
Units.TRADECART: [Buildings.MARKET],
|
||||||
Units.SPEARMAN: [Ages.FEUDAL, Buildings.BARRACKS],
|
Units.SPEARMAN: [Ages.FEUDAL, Buildings.BARRACKS],
|
||||||
|
|||||||
47
aoe/world.py
47
aoe/world.py
@@ -69,44 +69,6 @@ class World():
|
|||||||
self.resources[i] -= self.costs.costs[purchase][i]
|
self.resources[i] -= self.costs.costs[purchase][i]
|
||||||
|
|
||||||
|
|
||||||
def _check_dependencies(self, thing):
|
|
||||||
thing_type = type(thing)
|
|
||||||
|
|
||||||
if thing_type == Ages:
|
|
||||||
self._check_age_dependencies(thing)
|
|
||||||
else:
|
|
||||||
if thing_type == Buildings:
|
|
||||||
dependencies = self.building_deps.dependencies[thing]
|
|
||||||
elif thing_type == Units:
|
|
||||||
dependencies = self.unit_deps.dependencies[thing]
|
|
||||||
elif thing_type == Research:
|
|
||||||
dependencies = self.research_deps.dependencies[thing]
|
|
||||||
self._check_non_age_dependencies(dependencies)
|
|
||||||
|
|
||||||
|
|
||||||
def _check_non_age_dependencies(self, dependencies):
|
|
||||||
for dep in dependencies:
|
|
||||||
if dep not in self.buildings and \
|
|
||||||
dep not in self.research and \
|
|
||||||
not self._is_sufficient_age(dep):
|
|
||||||
raise MissingDependencyException
|
|
||||||
|
|
||||||
|
|
||||||
def _is_sufficient_age(self, age):
|
|
||||||
if type(age) == Ages and self.age >= age:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def _check_age_dependencies(self, age):
|
|
||||||
total_buildings = 0
|
|
||||||
for building in self.age_deps.dependencies[age].keys():
|
|
||||||
if self.has_building(building):
|
|
||||||
total_buildings += self.age_deps.dependencies[age][building]
|
|
||||||
if total_buildings < self.age_deps.dependencies_counts[age]:
|
|
||||||
raise MissingDependencyException
|
|
||||||
|
|
||||||
|
|
||||||
def _schedule_next_gather_rate_decrease(self, task):
|
def _schedule_next_gather_rate_decrease(self, task):
|
||||||
if task in [Tasks.IDLE, Tasks.BUILD]:
|
if task in [Tasks.IDLE, Tasks.BUILD]:
|
||||||
return
|
return
|
||||||
@@ -252,7 +214,7 @@ class World():
|
|||||||
|
|
||||||
self._check_villager_move(villagers_from_count)
|
self._check_villager_move(villagers_from_count)
|
||||||
|
|
||||||
self._check_dependencies(building)
|
self.dependencies.check_dependencies(self, building)
|
||||||
|
|
||||||
self._pay_cost(building)
|
self._pay_cost(building)
|
||||||
self._move_villagers_to_build(villagers_from_count)
|
self._move_villagers_to_build(villagers_from_count)
|
||||||
@@ -458,7 +420,7 @@ class World():
|
|||||||
|
|
||||||
|
|
||||||
def _queue_thing(self, thing, initial_task=None):
|
def _queue_thing(self, thing, initial_task=None):
|
||||||
self._check_dependencies(thing)
|
self.dependencies.check_dependencies(self, thing)
|
||||||
self._pay_cost(thing)
|
self._pay_cost(thing)
|
||||||
|
|
||||||
self._start_producing(thing, initial_task)
|
self._start_producing(thing, initial_task)
|
||||||
@@ -538,10 +500,7 @@ class World():
|
|||||||
|
|
||||||
self.build_times = Times()
|
self.build_times = Times()
|
||||||
self.costs = Costs()
|
self.costs = Costs()
|
||||||
self.building_deps = BuildingDependencies()
|
self.dependencies = Dependencies()
|
||||||
self.age_deps = AgeDependencies()
|
|
||||||
self.research_deps = ResearchDependencies()
|
|
||||||
self.unit_deps = UnitDependencies()
|
|
||||||
self.housing = Housing()
|
self.housing = Housing()
|
||||||
self.production = Production()
|
self.production = Production()
|
||||||
self.gather = Gather()
|
self.gather = Gather()
|
||||||
|
|||||||
Reference in New Issue
Block a user