Add research and finish most buildings
This commit is contained in:
107
aoe/costs.py
107
aoe/costs.py
@@ -13,23 +13,119 @@ class Costs():
|
||||
Ages.IMPERIAL: (1000, 0, 800, 0),
|
||||
Buildings.HOUSE: (0, 25, 0, 0),
|
||||
Buildings.LUMBERCAMP: (0, 100, 0, 0),
|
||||
#Buildings.MULECART = (20, 80, 0, 0),
|
||||
#Buildings.SETTLEMENT = (0, 125, 0, 0),
|
||||
Buildings.MILL: (0, 100, 0, 0),
|
||||
Buildings.FARM: (0, 60, 0, 0),
|
||||
#Buildings.PASTURE = (0, 110, 0, 0),
|
||||
Buildings.MININGCAMP: (0, 100, 0, 0),
|
||||
Buildings.DOCK: (0, 150, 0, 0),
|
||||
Buildings.BARRACKS: (0, 175, 0, 0),
|
||||
Buildings.STABLE: (0, 175, 0, 0),
|
||||
Buildings.ARCHERYRANGE: (0, 175, 0, 0),
|
||||
Buildings.PALISADEWALL: (0, 3, 0, 0),
|
||||
Buildings.PALISADEGATE: (0, 30, 0, 0),
|
||||
Buildings.OUTPOST: (0, 25, 0, 5),
|
||||
Buildings.TOWNCENTER: (0, 275, 0, 100),
|
||||
Buildings.BLACKSMITH: (0, 200, 0, 0),
|
||||
Buildings.WATCHTOWER: (0, 35, 0, 125),
|
||||
Buildings.STONEWALL: (0, 0, 0, 5),
|
||||
Buildings.GATE: (0, 25, 0, 0),
|
||||
Buildings.DONJON: (0, 50, 0, 175),
|
||||
Buildings.FISHTRAP: (0, 100, 0, 0),
|
||||
Buildings.MARKET: (0, 175, 0, 0),
|
||||
Buildings.ARCHERYRANGE: (0, 175, 0, 0),
|
||||
Buildings.STABLE: (0, 175, 0, 0),
|
||||
Buildings.UNIVERSITY: (0, 200, 0, 0),
|
||||
#Buildings.CARAVANSERAI: (0, 175, 0, 50),
|
||||
Buildings.SIEGEWORKSHOP: (0, 200, 0, 0),
|
||||
Buildings.MONASTERY: (0, 175, 0, 0),
|
||||
#Buildings.FORTIFIEDCHURCH: (0, 200, 0, 0),
|
||||
Buildings.CASTLE: (0, 0, 0, 650),
|
||||
#Buildings.KREPOST: (0, 0, 0, 350),
|
||||
#Buildings.DONJON: (0, 50, 0, 175),
|
||||
#Buildings.HARBOR: (0, 150, 0, 0),
|
||||
#Buildings.FEITORIA: (0, 0, 350, 300),
|
||||
Buildings.BOMBARDTOWER: (0, 0, 100, 125),
|
||||
Buildings.WONDER: (0, 1000, 1000, 1000),
|
||||
Research.TOWNWATCH: (75, 0, 0, 0),
|
||||
Research.TOWNPATROL: (300, 0, 100, 0),
|
||||
Research.TREADMILLCRANE: (0, 200, 0, 50),
|
||||
Research.MASONRY: (150, 175, 0, 0),
|
||||
Research.ARCHITECTURE: (300, 200, 0, 0),
|
||||
Research.HOARDINGS: (400, 400, 0, 0),
|
||||
Research.CONSCRIPTION: (150, 0, 150, 0),
|
||||
Research.WHEELBARROW: (175, 50, 0, 0),
|
||||
Research.HANDCART: (300, 200, 0, 0),
|
||||
Research.DOUBLEBITAXE: (100, 50, 0, 0),
|
||||
Research.BOWSAW: (150, 100, 0, 0),
|
||||
Research.TWOMANSAW: (300, 200, 0, 0),
|
||||
Research.HORSECOLLAR: (75, 75, 0, 0),
|
||||
Research.HEAVYPLOW: (125, 125, 0, 0),
|
||||
Research.CROPROTATION: (250, 250, 0, 0),
|
||||
Research.GOLDMINING: (100, 75, 0, 0),
|
||||
Research.GOLDSHAFTMINING: (175, 75, 0, 0),
|
||||
Research.STONEMINING: (100, 75, 0, 0),
|
||||
Research.STONESHAFTMINING: (175, 75, 0, 0),
|
||||
Research.CARAVAN: (200, 0, 200, 0),
|
||||
Research.COINAGE: (200, 0, 100, 0),
|
||||
Research.BANKING: (300, 0, 200, 0),
|
||||
Research.GUILDS: (300, 0, 200, 0),
|
||||
Research.FISHINGLINES: (50, 100, 0, 0),
|
||||
Research.GILLNETS: (150, 200, 0, 0),
|
||||
Research.DOMESTICATION: (50, 100, 0, 0),
|
||||
Research.PASTORALISM: (100, 150, 0, 0),
|
||||
Research.TRANSHUMANCE: (175, 325, 0, 0),
|
||||
Research.REDEMPTION: (0, 0, 475, 0),
|
||||
Research.ATONEMENT: (0, 0, 325, 0),
|
||||
Research.HERBALMEDICINE: (0, 0, 200, 0),
|
||||
Research.HERESY: (0, 0, 1000, 0),
|
||||
Research.SANCTITY: (0, 0, 175, 0),
|
||||
Research.FERVOR: (0, 0, 140, 0),
|
||||
Research.DEVOTION: (100, 0, 200, 0),
|
||||
Research.FAITH: (550, 0, 750, 0),
|
||||
Research.ILLUMINATION: (0, 0, 120, 0),
|
||||
Research.BLOCKPRINTING: (0, 0, 200, 0),
|
||||
Research.THEOCRACY: (0, 0, 200, 0),
|
||||
Research.ARSON: (75, 0, 25, 0),
|
||||
Research.GAMBESONS: (100, 0, 100, 0),
|
||||
Research.SQUIRES: (100, 0, 0, 0),
|
||||
Research.FORGING: (150, 0, 0, 0),
|
||||
Research.IRONCASTING: (220, 0, 120, 0),
|
||||
Research.BLASTFURNACE: (275, 0, 225, 0),
|
||||
Research.SCALEMAILARMOR: (100, 0, 0, 0),
|
||||
Research.CHAINMAILARMOR: (200, 0, 100, 0),
|
||||
Research.PLATEMAILARMOR: (300, 0, 150, 0),
|
||||
Research.THUMBRING: (300, 250, 0, 0),
|
||||
Research.PARTHIANTACTICS: (200, 0, 250, 0),
|
||||
Research.FLETCHING: (100, 0, 50, 0),
|
||||
Research.BODKINARROW: (200, 0, 100, 0),
|
||||
Research.BRACER: (300, 0, 200, 0),
|
||||
Research.PADDEDARCHERARMOR: (100, 0, 0, 0),
|
||||
Research.LEATHERARCHERARMOR: (150, 0, 150, 0),
|
||||
Research.RINGARCHERARMOR: (250, 0, 250, 0),
|
||||
Research.BALLISTICS: (0, 300, 175, 0),
|
||||
Research.HEATEDSHOT: (350, 0, 100, 0),
|
||||
Research.MURDERHOLES: (200, 0, 0, 100),
|
||||
Research.ARROWSLITS: (250, 250, 0, 0),
|
||||
Research.CHEMISTRY: (300, 0, 200, 0),
|
||||
Research.SIEGEENGINEERS: (500, 600, 0, 0),
|
||||
Research.BLOODLINES: (150, 0, 100, 0),
|
||||
Research.HUSBANDRY: (150, 0, 0, 0),
|
||||
Research.FORGING: (150, 0, 0, 0),
|
||||
Research.IRONCASTING: (220, 0, 120, 0),
|
||||
Research.BLASTFURNACE: (275, 0, 225, 0),
|
||||
Research.SCALEBARDINGARMOR: (150, 0, 0, 0),
|
||||
Research.CHAINBARDINGARMOR: (250, 0, 150, 0),
|
||||
Research.PLATEBARDINGARMOR: (350, 0, 200, 0),
|
||||
Research.CAREENING: (100, 0, 200, 0),
|
||||
Research.DRYDOCK: (200, 0, 400, 0),
|
||||
Research.SHIPWRIGHT: (1000, 0, 300, 0),
|
||||
Research.CLINKERCONSTRUCTION: (150, 100, 0, 0),
|
||||
Research.CARVELHULL: (350, 0, 200, 0),
|
||||
Research.SIPHONS: (100, 175, 0, 0),
|
||||
Research.INCENDIARIES: (200, 0, 325, 0),
|
||||
Research.LOOM: (0, 0, 50, 0),
|
||||
Research.SAPPERS: (400, 200, 0, 0),
|
||||
#Research.SPIES: (0, 0, 0, 0),
|
||||
Research.BOMBARDTOWER: (800, 400, 0, 0),
|
||||
Units.VILLAGER: (50, 0, 0, 0),
|
||||
Units.TRADECART: (0, 100, 50, 0),
|
||||
Units.SPEARMAN: (35, 25, 0, 0),
|
||||
@@ -39,8 +135,3 @@ class Costs():
|
||||
Units.SKIRMISHER: (25, 35, 0, 0),
|
||||
Units.ARCHER: (0, 25, 45, 0),
|
||||
}
|
||||
|
||||
|
||||
#def update_research(self, research):
|
||||
#case research:
|
||||
#match Bowsaw:
|
||||
|
||||
@@ -7,23 +7,38 @@ class BuildingDependencies():
|
||||
self.dependencies = {
|
||||
Buildings.HOUSE: [Ages.DARK],
|
||||
Buildings.LUMBERCAMP: [Ages.DARK],
|
||||
#Buildings.MULECART: [Ages.DARK],
|
||||
#Buildings.SETTLEMENT: [Ages.DARK],
|
||||
Buildings.MILL: [Ages.DARK],
|
||||
Buildings.FARM: [Ages.DARK, Buildings.MILL],
|
||||
#Buildings.PASTURE: [Ages.DARK],
|
||||
Buildings.MININGCAMP: [Ages.DARK],
|
||||
Buildings.DOCK: [Ages.DARK],
|
||||
Buildings.BARRACKS: [Ages.DARK],
|
||||
Buildings.ARCHERYRANGE: [Ages.FEUDAL, Buildings.BARRACKS],
|
||||
Buildings.STABLE: [Ages.FEUDAL, Buildings.BARRACKS],
|
||||
Buildings.PALISADEWALL: [Ages.DARK],
|
||||
Buildings.PALISADEGATE: [Ages.DARK],
|
||||
Buildings.OUTPOST: [Ages.DARK],
|
||||
Buildings.TOWNCENTER: [Ages.DARK],
|
||||
Buildings.BLACKSMITH: [Ages.FEUDAL],
|
||||
Buildings.WATCHTOWER: [Ages.FEUDAL],
|
||||
Buildings.STONEWALL: [Ages.FEUDAL],
|
||||
Buildings.GATE: [Ages.FEUDAL],
|
||||
Buildings.DONJON: [Ages.FEUDAL],
|
||||
Buildings.FISHTRAP: [Ages.FEUDAL],
|
||||
Buildings.MARKET: [Ages.FEUDAL, Buildings.MILL],
|
||||
Buildings.ARCHERYRANGE: [Ages.FEUDAL, Buildings.BARRACKS],
|
||||
Buildings.STABLE: [Ages.FEUDAL, Buildings.BARRACKS],
|
||||
Buildings.UNIVERSITY: [Ages.CASTLE],
|
||||
#Buildings.CARAVANSERAI: [Ages.IMPERIAL],
|
||||
Buildings.SIEGEWORKSHOP: [Ages.CASTLE, Buildings.BLACKSMITH],
|
||||
Buildings.MONASTERY: [Ages.CASTLE],
|
||||
#Buildings.FORTIFIEDCHURCH: [Ages.CASTLE],
|
||||
Buildings.CASTLE: [Ages.CASTLE],
|
||||
#Buildings.KREPOST: [Ages.CASTLE],
|
||||
#Buildings.DONJON: [Ages.DARK],
|
||||
#Buildings.HARBOR: [Ages.CASTLE, Research.THALASSOCRACY],
|
||||
#Buildings.FEITORIA: [Ages.IMPERIAL],
|
||||
Buildings.BOMBARDTOWER: [Ages.IMPERIAL, Research.BOMBARDTOWER],
|
||||
Buildings.WONDER: [Ages.IMPERIAL],
|
||||
}
|
||||
|
||||
|
||||
@@ -68,16 +83,160 @@ class AgeDependencies():
|
||||
class ResearchDependencies():
|
||||
def __init__(self):
|
||||
self.dependencies = {
|
||||
Research.DOUBLEBITAXE: [Ages.FEUDAL, Buildings.LUMBERCAMP],
|
||||
Research.BOWSAW: [Ages.CASTLE, Buildings.LUMBERCAMP, Research.DOUBLEBITAXE],
|
||||
Research.TWOMANSAW: [Ages.IMPERIAL, Buildings.LUMBERCAMP, Research.BOWSAW],
|
||||
Research.HORSECOLLAR: [Ages.FEUDAL, Buildings.MILL],
|
||||
Research.HEAVYPLOW: [Ages.CASTLE, Buildings.MILL, Research.HORSECOLLAR],
|
||||
Research.CROPCYCLE: [Ages.IMPERIAL, Buildings.MILL, Research.HEAVYPLOW],
|
||||
Research.GOLDMINING: [Ages.FEUDAL, Buildings.MININGCAMP],
|
||||
Research.GOLDSHAFTMINING: [Ages.CASTLE, Buildings.MININGCAMP, Research.GOLDMINING],
|
||||
Research.STONEMINING: [Ages.FEUDAL, Buildings.MININGCAMP],
|
||||
Research.STONESHAFTMINING: [Ages.CASTLE, Buildings.MININGCAMP, Research.STONEMINING],
|
||||
Research.TOWNWATCH: [Ages.FEUDAL,
|
||||
Buildings.TOWNCENTER],
|
||||
Research.TOWNPATROL: [Ages.CASTLE,
|
||||
Buildings.TOWNCENTER],
|
||||
Research.TREADMILLCRANE: [Ages.CASTLE,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.MASONRY: [Ages.CASTLE,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.ARCHITECTURE: [Ages.IMPERIAL,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.HOARDINGS: [Ages.IMPERIAL,
|
||||
Buildings.CASTLE],
|
||||
Research.CONSCRIPTION: [Ages.IMPERIAL,
|
||||
Buildings.CASTLE],
|
||||
Research.WHEELBARROW: [Ages.FEUDAL,
|
||||
Buildings.TOWNCENTER],
|
||||
Research.HANDCART: [Ages.CASTLE,
|
||||
Buildings.TOWNCENTER],
|
||||
Research.DOUBLEBITAXE: [Ages.FEUDAL,
|
||||
Buildings.LUMBERCAMP],
|
||||
Research.BOWSAW: [Ages.CASTLE,
|
||||
Buildings.LUMBERCAMP],
|
||||
Research.TWOMANSAW: [Ages.IMPERIAL,
|
||||
Buildings.LUMBERCAMP],
|
||||
Research.HORSECOLLAR: [Ages.FEUDAL,
|
||||
Buildings.MILL],
|
||||
Research.HEAVYPLOW: [Ages.CASTLE,
|
||||
Buildings.MILL],
|
||||
Research.CROPROTATION: [Ages.IMPERIAL,
|
||||
Buildings.MILL],
|
||||
Research.GOLDMINING: [Ages.FEUDAL,
|
||||
Buildings.MININGCAMP],
|
||||
Research.GOLDSHAFTMINING: [Ages.CASTLE,
|
||||
Buildings.MININGCAMP],
|
||||
Research.STONEMINING: [Ages.FEUDAL,
|
||||
Buildings.MININGCAMP],
|
||||
Research.STONESHAFTMINING: [Ages.CASTLE,
|
||||
Buildings.MININGCAMP],
|
||||
Research.CARAVAN: [Ages.CASTLE,
|
||||
Buildings.MARKET],
|
||||
Research.COINAGE: [Ages.CASTLE,
|
||||
Buildings.MARKET],
|
||||
Research.BANKING: [Ages.IMPERIAL,
|
||||
Buildings.MARKET],
|
||||
Research.GUILDS: [Ages.IMPERIAL,
|
||||
Buildings.MARKET],
|
||||
Research.FISHINGLINES: [Ages.FEUDAL,
|
||||
Buildings.DOCK],
|
||||
Research.GILLNETS: [Ages.CASTLE,
|
||||
Buildings.DOCK],
|
||||
Research.DOMESTICATION: [Ages.FEUDAL,
|
||||
Buildings.MILL],
|
||||
Research.PASTORALISM: [Ages.CASTLE,
|
||||
Buildings.MILL],
|
||||
Research.TRANSHUMANCE: [Ages.IMPERIAL,
|
||||
Buildings.MILL],
|
||||
Research.REDEMPTION: [Ages.CASTLE,
|
||||
Buildings.MONASTERY],
|
||||
Research.ATONEMENT: [Ages.CASTLE,
|
||||
Buildings.MONASTERY],
|
||||
Research.HERBALMEDICINE: [Ages.CASTLE,
|
||||
Buildings.MONASTERY],
|
||||
Research.HERESY: [Ages.CASTLE,
|
||||
Buildings.MONASTERY],
|
||||
Research.SANCTITY: [Ages.CASTLE,
|
||||
Buildings.MONASTERY],
|
||||
Research.FERVOR: [Ages.CASTLE,
|
||||
Buildings.MONASTERY],
|
||||
Research.DEVOTION: [Ages.CASTLE,
|
||||
Buildings.MONASTERY],
|
||||
Research.FAITH: [Ages.IMPERIAL,
|
||||
Buildings.MONASTERY],
|
||||
Research.ILLUMINATION: [Ages.IMPERIAL,
|
||||
Buildings.MONASTERY],
|
||||
Research.BLOCKPRINTING: [Ages.IMPERIAL,
|
||||
Buildings.MONASTERY],
|
||||
Research.THEOCRACY: [Ages.IMPERIAL,
|
||||
Buildings.MONASTERY],
|
||||
Research.ARSON: [Ages.FEUDAL,
|
||||
Buildings.BARRACKS],
|
||||
Research.GAMBESONS: [Ages.CASTLE,
|
||||
Buildings.BARRACKS],
|
||||
Research.SQUIRES: [Ages.CASTLE,
|
||||
Buildings.BARRACKS],
|
||||
Research.FORGING: [Ages.FEUDAL,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.IRONCASTING: [Ages.CASTLE,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.BLASTFURNACE: [Ages.IMPERIAL,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.SCALEMAILARMOR: [Ages.FEUDAL,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.CHAINMAILARMOR: [Ages.CASTLE,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.PLATEMAILARMOR: [Ages.IMPERIAL,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.THUMBRING: [Ages.CASTLE,
|
||||
Buildings.ARCHERYRANGE],
|
||||
Research.PARTHIANTACTICS: [Ages.IMPERIAL,
|
||||
Buildings.ARCHERYRANGE],
|
||||
Research.FLETCHING: [Ages.FEUDAL,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.BODKINARROW: [Ages.CASTLE,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.BRACER: [Ages.IMPERIAL,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.PADDEDARCHERARMOR: [Ages.FEUDAL,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.LEATHERARCHERARMOR: [Ages.CASTLE,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.RINGARCHERARMOR: [Ages.IMPERIAL,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.BALLISTICS: [Ages.CASTLE,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.HEATEDSHOT: [Ages.CASTLE,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.MURDERHOLES: [Ages.CASTLE,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.ARROWSLITS: [Ages.IMPERIAL,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.CHEMISTRY: [Ages.IMPERIAL,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.SIEGEENGINEERS: [Ages.IMPERIAL,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.BLOODLINES: [Ages.FEUDAL,
|
||||
Buildings.STABLE],
|
||||
Research.HUSBANDRY: [Ages.CASTLE,
|
||||
Buildings.STABLE],
|
||||
Research.SCALEBARDINGARMOR: [Ages.FEUDAL,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.CHAINBARDINGARMOR: [Ages.CASTLE,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.PLATEBARDINGARMOR: [Ages.IMPERIAL,
|
||||
Buildings.BLACKSMITH],
|
||||
Research.CAREENING: [Ages.CASTLE,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.DRYDOCK: [Ages.IMPERIAL,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.SHIPWRIGHT: [Ages.IMPERIAL,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.CLINKERCONSTRUCTION: [Ages.CASTLE,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.CARVELHULL: [Ages.IMPERIAL,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.SIPHONS: [Ages.CASTLE,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.INCENDIARIES: [Ages.IMPERIAL,
|
||||
Buildings.UNIVERSITY],
|
||||
Research.LOOM: [Buildings.TOWNCENTER],
|
||||
Research.SAPPERS: [Ages.IMPERIAL,
|
||||
Buildings.CASTLE],
|
||||
Research.BOMBARDTOWER: [Ages.IMPERIAL,
|
||||
Buildings.UNIVERSITY,
|
||||
Research.CHEMISTRY],
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -37,6 +37,12 @@ class Gameplay():
|
||||
villagers_to,)))
|
||||
|
||||
|
||||
def queue_research(self, action_time, research):
|
||||
self._check_time(action_time)
|
||||
self.actions[action_time].append((self.world.queue_research,
|
||||
(research,)))
|
||||
|
||||
|
||||
def queue_villager(self, action_time, initial_task):
|
||||
self._check_time(action_time)
|
||||
self.actions[action_time].append((self.world.queue_villager,
|
||||
|
||||
@@ -16,4 +16,81 @@ class Production():
|
||||
Units.KNIGHT: Buildings.STABLE,
|
||||
Units.SKIRMISHER: Buildings.ARCHERYRANGE,
|
||||
Units.ARCHER: Buildings.ARCHERYRANGE,
|
||||
Research.TOWNWATCH: Buildings.TOWNCENTER,
|
||||
Research.TOWNPATROL: Buildings.TOWNCENTER,
|
||||
Research.TREADMILLCRANE: Buildings.UNIVERSITY,
|
||||
Research.MASONRY: Buildings.UNIVERSITY,
|
||||
Research.ARCHITECTURE: Buildings.UNIVERSITY,
|
||||
Research.HOARDINGS: Buildings.CASTLE,
|
||||
Research.CONSCRIPTION: Buildings.CASTLE,
|
||||
Research.WHEELBARROW: Buildings.TOWNCENTER,
|
||||
Research.HANDCART: Buildings.TOWNCENTER,
|
||||
Research.DOUBLEBITAXE: Buildings.LUMBERCAMP,
|
||||
Research.BOWSAW: Buildings.LUMBERCAMP,
|
||||
Research.TWOMANSAW: Buildings.LUMBERCAMP,
|
||||
Research.HORSECOLLAR: Buildings.MILL,
|
||||
Research.HEAVYPLOW: Buildings.MILL,
|
||||
Research.CROPROTATION: Buildings.MILL,
|
||||
Research.GOLDMINING: Buildings.MININGCAMP,
|
||||
Research.GOLDSHAFTMINING: Buildings.MININGCAMP,
|
||||
Research.STONEMINING: Buildings.MININGCAMP,
|
||||
Research.STONESHAFTMINING: Buildings.MININGCAMP,
|
||||
Research.CARAVAN: Buildings.MARKET,
|
||||
Research.COINAGE: Buildings.MARKET,
|
||||
Research.BANKING: Buildings.MARKET,
|
||||
Research.GUILDS: Buildings.MARKET,
|
||||
Research.FISHINGLINES: Buildings.DOCK,
|
||||
Research.GILLNETS: Buildings.DOCK,
|
||||
Research.DOMESTICATION: Buildings.MILL,
|
||||
Research.PASTORALISM: Buildings.MILL,
|
||||
Research.TRANSHUMANCE: Buildings.MILL,
|
||||
Research.REDEMPTION: Buildings.MONASTERY,
|
||||
Research.ATONEMENT: Buildings.MONASTERY,
|
||||
Research.HERBALMEDICINE: Buildings.MONASTERY,
|
||||
Research.HERESY: Buildings.MONASTERY,
|
||||
Research.SANCTITY: Buildings.MONASTERY,
|
||||
Research.FERVOR: Buildings.MONASTERY,
|
||||
Research.DEVOTION: Buildings.MONASTERY,
|
||||
Research.FAITH: Buildings.MONASTERY,
|
||||
Research.ILLUMINATION: Buildings.MONASTERY,
|
||||
Research.BLOCKPRINTING: Buildings.MONASTERY,
|
||||
Research.THEOCRACY: Buildings.MONASTERY,
|
||||
Research.ARSON: Buildings.BARRACKS,
|
||||
Research.GAMBESONS: Buildings.BARRACKS,
|
||||
Research.SQUIRES: Buildings.BARRACKS,
|
||||
Research.FORGING: Buildings.BLACKSMITH,
|
||||
Research.IRONCASTING: Buildings.BLACKSMITH,
|
||||
Research.BLASTFURNACE: Buildings.BLACKSMITH,
|
||||
Research.SCALEMAILARMOR: Buildings.BLACKSMITH,
|
||||
Research.CHAINMAILARMOR: Buildings.BLACKSMITH,
|
||||
Research.PLATEMAILARMOR: Buildings.BLACKSMITH,
|
||||
Research.THUMBRING: Buildings.ARCHERYRANGE,
|
||||
Research.PARTHIANTACTICS: Buildings.ARCHERYRANGE,
|
||||
Research.FLETCHING: Buildings.BLACKSMITH,
|
||||
Research.BODKINARROW: Buildings.BLACKSMITH,
|
||||
Research.BRACER: Buildings.BLACKSMITH,
|
||||
Research.PADDEDARCHERARMOR: Buildings.BLACKSMITH,
|
||||
Research.LEATHERARCHERARMOR: Buildings.BLACKSMITH,
|
||||
Research.RINGARCHERARMOR: Buildings.BLACKSMITH,
|
||||
Research.BALLISTICS: Buildings.UNIVERSITY,
|
||||
Research.HEATEDSHOT: Buildings.UNIVERSITY,
|
||||
Research.MURDERHOLES: Buildings.UNIVERSITY,
|
||||
Research.ARROWSLITS: Buildings.UNIVERSITY,
|
||||
Research.CHEMISTRY: Buildings.UNIVERSITY,
|
||||
Research.SIEGEENGINEERS: Buildings.UNIVERSITY,
|
||||
Research.BLOODLINES: Buildings.STABLE,
|
||||
Research.HUSBANDRY: Buildings.STABLE,
|
||||
Research.SCALEBARDINGARMOR: Buildings.BLACKSMITH,
|
||||
Research.CHAINBARDINGARMOR: Buildings.BLACKSMITH,
|
||||
Research.PLATEBARDINGARMOR: Buildings.BLACKSMITH,
|
||||
Research.CAREENING: Buildings.UNIVERSITY,
|
||||
Research.DRYDOCK: Buildings.UNIVERSITY,
|
||||
Research.SHIPWRIGHT: Buildings.UNIVERSITY,
|
||||
Research.CLINKERCONSTRUCTION: Buildings.UNIVERSITY,
|
||||
Research.CARVELHULL: Buildings.UNIVERSITY,
|
||||
Research.SIPHONS: Buildings.UNIVERSITY,
|
||||
Research.INCENDIARIES: Buildings.UNIVERSITY,
|
||||
Research.LOOM: Buildings.TOWNCENTER,
|
||||
Research.SAPPERS: Buildings.CASTLE,
|
||||
Research.BOMBARDTOWER: Buildings.UNIVERSITY,
|
||||
}
|
||||
|
||||
95
aoe/research.py
Normal file
95
aoe/research.py
Normal file
@@ -0,0 +1,95 @@
|
||||
from aoe.types import *
|
||||
|
||||
|
||||
|
||||
class ResearchEffects():
|
||||
|
||||
|
||||
# This assumes that the research effects will be the same for every civ.
|
||||
# If not, we could make a separate function for each research that has an
|
||||
# effect (e.g., def doublebitaxe(self, world)) and call the correct
|
||||
# function from complete_research. That, along with instantiating the
|
||||
# class, would allow modification of the relevant functions as necessary.
|
||||
|
||||
@classmethod
|
||||
def complete_research(cls, world, research):
|
||||
match research:
|
||||
case Research.TREADMILLCRANE:
|
||||
# TODO adjust times for all in-progress buildings
|
||||
# Wouldn't be particularly hard, but I don't actually know
|
||||
# how the effect is applied to in-progress buildings.
|
||||
for item, time in enumerate(world.times.build_times):
|
||||
new_time = 0.8*world.times.build_times[item]
|
||||
world.times.build_times[item] = new_time
|
||||
case Research.CONSCRIPTION:
|
||||
# TODO adjust times for all in-progress units
|
||||
# Wouldn't be particularly hard, but I don't actually know
|
||||
# how the effect is applied to in-progress units.
|
||||
|
||||
# Note that this research also affects speed of research in
|
||||
# those buildings (not just speed of unit production)
|
||||
affected = [Buildings.ARCHERYRANGE,
|
||||
Buildings.BARRACKS,
|
||||
Buildings.STABLE,
|
||||
Buildings.CASTLE,
|
||||
#Buildings.DONJON,
|
||||
]
|
||||
for item, building in enumerate(world.production.building):
|
||||
if building in affected:
|
||||
new_time = 0.67*world.times.build_times[item]
|
||||
world.times.build_times[item] = new_time
|
||||
case Research.WHEELBARROW:
|
||||
cls._modify_rates_with_wheelbarrow_line(world, 1.1, 1.11)
|
||||
case Research.HANDCART:
|
||||
cls._modify_rates_with_wheelbarrow_line(world, 1.1, 1.11)
|
||||
case Research.DOUBLEBITAXE:
|
||||
world._permanently_modify_gather_rate(Tasks.WOOD, 1.2)
|
||||
case Research.BOWSAW:
|
||||
world._permanently_modify_gather_rate(Tasks.WOOD, 1.2)
|
||||
case Research.TWOMANSAW:
|
||||
world._permanently_modify_gather_rate(Tasks.WOOD, 1.1)
|
||||
case Research.HORSECOLLAR:
|
||||
world._permanently_modify_farm_capacity(75)
|
||||
case Research.HEAVYPLOW:
|
||||
world._permanently_modify_farm_capacity(125)
|
||||
case Research.CROPROTATION:
|
||||
world._permanently_modify_farm_capacity(175)
|
||||
case Research.GOLDMINING:
|
||||
world._permanently_modify_gather_rate(Tasks.GOLD, 1.15)
|
||||
case Research.GOLDSHAFTMINING:
|
||||
world._permanently_modify_gather_rate(Tasks.GOLD, 1.15)
|
||||
case Research.STONEMINING:
|
||||
world._permanently_modify_gather_rate(Tasks.STONE, 1.15)
|
||||
case Research.STONESHAFTMINING:
|
||||
world._permanently_modify_gather_rate(Tasks.STONE, 1.15)
|
||||
case Research.CARAVAN:
|
||||
world._permanently_modify_gather_rate(Tasks.TRADECART, 1.20)
|
||||
world._permanently_modify_gather_rate(Tasks.TRADECOG, 1.20)
|
||||
#case Research.FISHINGLINES:
|
||||
# probably looks like wheelbarrow
|
||||
#case Research.GILLNETS:
|
||||
# probably looks like wheelbarrow
|
||||
#case Research.DOMESTICATION:
|
||||
#case Research.PASTORALISM:
|
||||
#case Research.TRANSHUMANCE:
|
||||
#case Research.SHIPWRIGHT:
|
||||
# do this one when you add ships
|
||||
# just modify costs and times data structures
|
||||
case _:
|
||||
pass
|
||||
|
||||
|
||||
@staticmethod
|
||||
def _modify_rates_with_wheelbarrow_line(world, nonfarm_rate, farm_rate):
|
||||
affected = [Tasks.BERRIES,
|
||||
Tasks.SHEEP,
|
||||
Tasks.BOAR,
|
||||
Tasks.HUNT,
|
||||
Tasks.FISH_VILLAGER,
|
||||
Tasks.WOOD,
|
||||
Tasks.GOLD,
|
||||
Tasks.STONE]
|
||||
for task in affected:
|
||||
world._permanently_modify_gather_rate(task, non_farm_rate)
|
||||
|
||||
world._permanently_modify_gather_rate(Tasks.FARM, farm_rate)
|
||||
98
aoe/times.py
98
aoe/times.py
@@ -12,23 +12,115 @@ class Times():
|
||||
Ages.IMPERIAL: 190,
|
||||
Buildings.HOUSE: 25,
|
||||
Buildings.LUMBERCAMP: 35,
|
||||
#Buildings.MULECART = auto()
|
||||
#Buildings.SETTLEMENT = auto()
|
||||
Buildings.MILL: 35,
|
||||
Buildings.FARM: 15,
|
||||
#Buildings.PASTURE = auto()
|
||||
Buildings.MININGCAMP: 35,
|
||||
Buildings.DOCK: 35,
|
||||
Buildings.BARRACKS: 50,
|
||||
Buildings.STABLE: 50,
|
||||
Buildings.ARCHERYRANGE: 50,
|
||||
Buildings.PALISADEWALL: 7,
|
||||
Buildings.PALISADEGATE: 30,
|
||||
Buildings.OUTPOST: 15,
|
||||
Buildings.TOWNCENTER: 150,
|
||||
Buildings.BLACKSMITH: 40,
|
||||
Buildings.WATCHTOWER: 80,
|
||||
Buildings.STONEWALL: 10,
|
||||
Buildings.GATE: 70,
|
||||
Buildings.DONJON: 83,
|
||||
Buildings.FISHTRAP: 40,
|
||||
Buildings.MARKET: 60,
|
||||
Buildings.ARCHERYRANGE: 50,
|
||||
Buildings.STABLE: 50,
|
||||
Buildings.UNIVERSITY: 60,
|
||||
#Buildings.CARAVANSERAI: 60,
|
||||
Buildings.SIEGEWORKSHOP: 40,
|
||||
Buildings.MONASTERY: 40,
|
||||
#Buildings.FORTIFIEDCHURCH: 40,
|
||||
Buildings.CASTLE: 200,
|
||||
Buildings.KREPOST: 150,
|
||||
#Buildings.DONJON: 83,
|
||||
#Buildings.HARBOR: 35,
|
||||
#Buildings.FEITORIA: 120,
|
||||
Buildings.BOMBARDTOWER: 80,
|
||||
Buildings.WONDER: 3500,
|
||||
Research.TOWNWATCH: 25,
|
||||
Research.TOWNPATROL: 40,
|
||||
Research.TREADMILLCRANE: 20,
|
||||
Research.MASONRY: 50,
|
||||
Research.ARCHITECTURE: 70,
|
||||
Research.HOARDINGS: 75,
|
||||
Research.CONSCRIPTION: 60,
|
||||
Research.WHEELBARROW: 75,
|
||||
Research.HANDCART: 55,
|
||||
Research.DOUBLEBITAXE: 25,
|
||||
Research.BOWSAW: 50,
|
||||
Research.TWOMANSAW: 100,
|
||||
Research.HORSECOLLAR: 20,
|
||||
Research.HEAVYPLOW: 40,
|
||||
Research.CROPROTATION: 70,
|
||||
Research.GOLDMINING: 30,
|
||||
Research.GOLDSHAFTMINING: 75,
|
||||
Research.STONEMINING: 30,
|
||||
Research.STONESHAFTMINING: 75,
|
||||
Research.CARAVAN: 40,
|
||||
Research.COINAGE: 70,
|
||||
Research.BANKING: 70,
|
||||
Research.GUILDS: 50,
|
||||
Research.FISHINGLINES: 20,
|
||||
Research.GILLNETS: 45,
|
||||
Research.DOMESTICATION: 20,
|
||||
Research.PASTORALISM: 40,
|
||||
Research.TRANSHUMANCE: 70,
|
||||
Research.REDEMPTION: 50,
|
||||
Research.ATONEMENT: 40,
|
||||
Research.HERBALMEDICINE: 35,
|
||||
Research.HERESY: 60,
|
||||
Research.SANCTITY: 60,
|
||||
Research.FERVOR: 50,
|
||||
Research.DEVOTION: 40,
|
||||
Research.FAITH: 60,
|
||||
Research.ILLUMINATION: 65,
|
||||
Research.BLOCKPRINTING: 55,
|
||||
Research.THEOCRACY: 75,
|
||||
Research.ARSON: 25,
|
||||
Research.GAMBESONS: 25,
|
||||
Research.SQUIRES: 40,
|
||||
Research.FORGING: 50,
|
||||
Research.IRONCASTING: 75,
|
||||
Research.BLASTFURNACE: 100,
|
||||
Research.SCALEMAILARMOR: 40,
|
||||
Research.CHAINMAILARMOR: 55,
|
||||
Research.PLATEMAILARMOR: 70,
|
||||
Research.THUMBRING: 45,
|
||||
Research.PARTHIANTACTICS: 65,
|
||||
Research.FLETCHING: 30,
|
||||
Research.BODKINARROW: 35,
|
||||
Research.BRACER: 40,
|
||||
Research.PADDEDARCHERARMOR: 40,
|
||||
Research.LEATHERARCHERARMOR: 55,
|
||||
Research.RINGARCHERARMOR: 70,
|
||||
Research.BALLISTICS: 60,
|
||||
Research.HEATEDSHOT: 30,
|
||||
Research.MURDERHOLES: 35,
|
||||
Research.ARROWSLITS: 25,
|
||||
Research.CHEMISTRY: 100,
|
||||
Research.SIEGEENGINEERS: 45,
|
||||
Research.BLOODLINES: 50,
|
||||
Research.HUSBANDRY: 40,
|
||||
Research.SCALEBARDINGARMOR: 45,
|
||||
Research.CHAINBARDINGARMOR: 60,
|
||||
Research.PLATEBARDINGARMOR: 75,
|
||||
Research.CAREENING: 50,
|
||||
Research.DRYDOCK: 60,
|
||||
Research.SHIPWRIGHT: 60,
|
||||
Research.CLINKERCONSTRUCTION: 50,
|
||||
Research.CARVELHULL: 60,
|
||||
Research.SIPHONS: 45,
|
||||
Research.INCENDIARIES: 50,
|
||||
Research.LOOM: 50,
|
||||
Research.SAPPERS: 10,
|
||||
Research.BOMBARDTOWER: 60,
|
||||
Units.VILLAGER: 25,
|
||||
Units.TRADECART: 50,
|
||||
Units.SPEARMAN: 22,
|
||||
|
||||
96
aoe/types.py
96
aoe/types.py
@@ -13,8 +13,11 @@ class Ages(IntEnum):
|
||||
class Buildings(Enum):
|
||||
HOUSE = auto()
|
||||
LUMBERCAMP = auto()
|
||||
#MULECART = auto()
|
||||
#SETTLEMENT = auto()
|
||||
MILL = auto()
|
||||
FARM = auto()
|
||||
#PASTURE = auto()
|
||||
MININGCAMP = auto()
|
||||
DOCK = auto()
|
||||
BARRACKS = auto()
|
||||
@@ -22,14 +25,26 @@ class Buildings(Enum):
|
||||
ARCHERYRANGE = auto()
|
||||
PALISADEWALL = auto()
|
||||
PALISADEGATE = auto()
|
||||
OUTPOST = auto()
|
||||
TOWNCENTER = auto()
|
||||
BLACKSMITH = auto()
|
||||
WATCHTOWER = auto()
|
||||
STONEWALL = auto()
|
||||
GATE = auto()
|
||||
DONJON = auto()
|
||||
FISHTRAP = auto()
|
||||
MARKET = auto()
|
||||
UNIVERSITY = auto()
|
||||
#CARAVANSERAI = auto()
|
||||
SIEGEWORKSHOP = auto()
|
||||
MONASTERY = auto()
|
||||
#FORTIFIEDCHURCH = auto()
|
||||
CASTLE = auto()
|
||||
KREPOST = auto()
|
||||
#DONJON = auto()
|
||||
#HARBOR = auto()
|
||||
#FEITORIA = auto()
|
||||
BOMBARDTOWER = auto()
|
||||
WONDER = auto()
|
||||
|
||||
|
||||
|
||||
@@ -55,25 +70,84 @@ class Tasks(Enum):
|
||||
|
||||
|
||||
class Research(Enum):
|
||||
TOWNWATCH = auto()
|
||||
TOWNPATROL = auto()
|
||||
TREADMILLCRANE = auto()
|
||||
MASONRY = auto()
|
||||
ARCHITECTURE = auto()
|
||||
HOARDINGS = auto()
|
||||
CONSCRIPTION = auto()
|
||||
WHEELBARROW = auto()
|
||||
HANDCART = auto()
|
||||
DOUBLEBITAXE = auto()
|
||||
BOWSAW = auto()
|
||||
TWOMANSAW = auto()
|
||||
HORSECOLLAR = auto()
|
||||
HEAVYPLOW = auto()
|
||||
CROPCYCLE = auto()
|
||||
CROPROTATION = auto()
|
||||
GOLDMINING = auto()
|
||||
GOLDSHAFTMINING = auto()
|
||||
STONEMINING = auto()
|
||||
STONESHAFTMINING = auto()
|
||||
'''
|
||||
BLACKSMITH = 11
|
||||
WATCHTOWER = 12
|
||||
STONEWALL = 13
|
||||
GATE = 14
|
||||
DONJON = 15
|
||||
FISHTRAP = 16
|
||||
'''
|
||||
|
||||
CARAVAN = auto()
|
||||
COINAGE = auto()
|
||||
BANKING = auto()
|
||||
GUILDS = auto()
|
||||
FISHINGLINES = auto()
|
||||
GILLNETS = auto()
|
||||
DOMESTICATION = auto()
|
||||
PASTORALISM = auto()
|
||||
TRANSHUMANCE = auto()
|
||||
REDEMPTION = auto()
|
||||
ATONEMENT = auto()
|
||||
HERBALMEDICINE = auto()
|
||||
HERESY = auto()
|
||||
SANCTITY = auto()
|
||||
FERVOR = auto()
|
||||
DEVOTION = auto()
|
||||
FAITH = auto()
|
||||
ILLUMINATION = auto()
|
||||
BLOCKPRINTING = auto()
|
||||
THEOCRACY = auto()
|
||||
ARSON = auto()
|
||||
GAMBESONS = auto()
|
||||
SQUIRES = auto()
|
||||
FORGING = auto()
|
||||
IRONCASTING = auto()
|
||||
BLASTFURNACE = auto()
|
||||
SCALEMAILARMOR = auto()
|
||||
CHAINMAILARMOR = auto()
|
||||
PLATEMAILARMOR = auto()
|
||||
THUMBRING = auto()
|
||||
PARTHIANTACTICS = auto()
|
||||
FLETCHING = auto()
|
||||
BODKINARROW = auto()
|
||||
BRACER = auto()
|
||||
PADDEDARCHERARMOR = auto()
|
||||
LEATHERARCHERARMOR = auto()
|
||||
RINGARCHERARMOR = auto()
|
||||
BALLISTICS = auto()
|
||||
HEATEDSHOT = auto()
|
||||
MURDERHOLES = auto()
|
||||
ARROWSLITS = auto()
|
||||
CHEMISTRY = auto()
|
||||
SIEGEENGINEERS = auto()
|
||||
BLOODLINES = auto()
|
||||
HUSBANDRY = auto()
|
||||
SCALEBARDINGARMOR = auto()
|
||||
CHAINBARDINGARMOR = auto()
|
||||
PLATEBARDINGARMOR = auto()
|
||||
CAREENING = auto()
|
||||
DRYDOCK = auto()
|
||||
SHIPWRIGHT = auto()
|
||||
CLINKERCONSTRUCTION = auto()
|
||||
CARVELHULL = auto()
|
||||
SIPHONS = auto()
|
||||
INCENDIARIES = auto()
|
||||
LOOM = auto()
|
||||
SAPPERS = auto()
|
||||
#SPIES = auto()
|
||||
BOMBARDTOWER = auto()
|
||||
|
||||
|
||||
class Resources(IntEnum):
|
||||
|
||||
67
aoe/world.py
67
aoe/world.py
@@ -8,6 +8,7 @@ from aoe.dependencies import *
|
||||
from aoe.gather import *
|
||||
from aoe.housing import *
|
||||
from aoe.production import *
|
||||
from aoe.research import *
|
||||
from aoe.times import *
|
||||
from aoe.types import *
|
||||
|
||||
@@ -44,14 +45,16 @@ class World():
|
||||
# to farms with the highest capacity.
|
||||
# We keep track of only the closest upcoming farm deletion.
|
||||
|
||||
# TODO research
|
||||
# TODO fishing ships
|
||||
# TODO relics
|
||||
# TODO trade carts
|
||||
# TODO allow automation:
|
||||
# reseeding of farms
|
||||
# queuing of villagers
|
||||
# possibly other things
|
||||
# TODO gathering boars and hunting
|
||||
# spend villager time in exchange for adding gatherable resource
|
||||
# TODO relics
|
||||
# TODO use market for buy/sell
|
||||
|
||||
|
||||
MAX_WORLD_TIME = 3*60*60 # 3 hours
|
||||
@@ -100,14 +103,11 @@ class World():
|
||||
raise MissingDependencyException
|
||||
|
||||
|
||||
def buy_research(self, research):
|
||||
def queue_research(self, research):
|
||||
self._check_research_dependencies(research)
|
||||
self._pay_cost(research)
|
||||
self._update_costs(research)
|
||||
|
||||
|
||||
def _update_costs(self, research):
|
||||
pass
|
||||
self._start_research(research)
|
||||
|
||||
|
||||
def _schedule_next_gather_rate_decrease(self, task):
|
||||
@@ -180,6 +180,24 @@ class World():
|
||||
self._schedule_next_gather_rate_decrease(task)
|
||||
|
||||
|
||||
def _permanently_modify_farm_capacity(self, increase):
|
||||
current_initial_farm = self.gather.buildings_gather_increase[Buildings.FARM]
|
||||
for i in range(len(farms)):
|
||||
farms[i] += (farms[i]/current_initial_farm)*increase
|
||||
for i in range(len(unused_farms)):
|
||||
unused_farms[i] += (unused_farms[i]/current_initial_farm)*increase
|
||||
|
||||
self.gather.buildings_gather_increase[Buildings.FARM] += increase
|
||||
|
||||
self._schedule_next_gather_rate_decrease(Task.FARM)
|
||||
|
||||
|
||||
def _permanently_modify_gather_rate(self, task, rate_multiplier):
|
||||
self.gather.gather_rates[tasks] *= rate_multiplier
|
||||
self.gather.original_gather_rates[tasks] *= rate_multiplier
|
||||
self._schedule_next_gather_rate_decrease(task)
|
||||
|
||||
|
||||
def assign_villager(self, previous_task, new_task, count=1):
|
||||
# new_task of None means kill the villager
|
||||
|
||||
@@ -333,12 +351,15 @@ class World():
|
||||
|
||||
unit = self.production_queue[i]
|
||||
if self._check_production(unit):
|
||||
self._build_unit(unit)
|
||||
if unit in Units:
|
||||
self._build_unit(unit)
|
||||
elif unit in Research:
|
||||
self._start_research(unit)
|
||||
new_builds.append(i)
|
||||
|
||||
i += 1
|
||||
|
||||
self.production_queue = [self.production_queue[i]
|
||||
self.production_queue = [self.production_queue[i]
|
||||
for i in range(original_queue_len)
|
||||
if i not in new_builds]
|
||||
|
||||
@@ -363,7 +384,10 @@ class World():
|
||||
|
||||
if ready_index:
|
||||
self.production_queue.remove(i)
|
||||
self._build_unit(unit)
|
||||
if unit in Units:
|
||||
self._build_unit(unit)
|
||||
elif unit in Research:
|
||||
self._start_research(unit)
|
||||
|
||||
|
||||
def _check_housing(self, unit):
|
||||
@@ -396,6 +420,29 @@ class World():
|
||||
raise ProductionBuildingNotAvailableException
|
||||
|
||||
|
||||
def _use_production_for_research(self, research):
|
||||
self._check_production(research)
|
||||
|
||||
building = self.production.building[research]
|
||||
self.production_available[building] -= 1
|
||||
|
||||
|
||||
def _add_research(self, research):
|
||||
self.research.append(research)
|
||||
ResearchEffects.complete_research(self, research)
|
||||
self._free_production_building_of_unit(research)
|
||||
|
||||
|
||||
def _start_research(self, research):
|
||||
try:
|
||||
self._use_production_for_research(research)
|
||||
except ProductionBuildingNotAvailableException:
|
||||
self.production_queue.append(research)
|
||||
else:
|
||||
update_time = self.current_time + self.build_times.build_times[research]
|
||||
self.events[update_time].append((self._add_research, (research,)))
|
||||
|
||||
|
||||
def _use_housing_and_production(self, unit):
|
||||
self._check_housing(unit)
|
||||
self._check_production(unit)
|
||||
|
||||
Reference in New Issue
Block a user