expansion/src/game/building_factory.cr
Anton Vakhrushev 5a0cc4cb10 Add smelter
2019-10-18 14:58:02 +03:00

119 lines
3.2 KiB
Crystal

module Game
class BuildingFactory
def initialize
@items = [] of NamedTuple(t: Building::Type, b: Building)
add(
Building.new Building::Type::StartPoint, **{
shortcut: "sp",
storage: 100,
roles: [Building::Role::Storehouse],
}
)
add(
Building.new Building::Type::CrystalMiner, **{
shortcut: "miner",
construction: Construction.new(
ts: 30,
cost: ResourceBag.new,
requirements: [] of Game::Building::Type
),
mining: Mining.new(
ts: 20,
resource: Resource.new(Resource::Type::Crystals, 40),
input: ResourceBag.new
),
}
)
add(
Building.new Building::Type::CrystalRestorer, **{
shortcut: "rest",
construction: Construction.new(
ts: 45,
cost: ResourceBag.new({
Resource::Type::Crystals => 100,
}),
requirements: [] of Game::Building::Type
),
restoration: Mining.new(
ts: 30,
resource: Resource.new(Resource::Type::Crystals, 20),
input: ResourceBag.new
),
}
)
add(
Building.new Building::Type::OxygenCollector, **{
shortcut: "oxygen",
construction: Construction.new(
ts: 60,
cost: ResourceBag.new({Resource::Type::Crystals => 200}),
requirements: [] of Game::Building::Type
),
mining: Mining.new(
ts: 30,
resource: Resource.new(Resource::Type::Oxygen, 10),
input: ResourceBag.new({Resource::Type::Crystals => 5}),
deposit: false
),
}
)
add(
Building.new Building::Type::Smelter, **{
shortcut: "iron",
construction: Construction.new(
ts: 120,
cost: ResourceBag.new({Resource::Type::Crystals => 300}),
requirements: [] of Game::Building::Type
),
production: Production.new(
ts: 60,
input: ResourceBag.new({
Resource::Type::Crystals => 20,
Resource::Type::Oxygen => 10,
}),
output: ResourceBag.new({
Resource::Type::Iron => 10,
})
),
}
)
add(
Building.new Building::Type::Terraformer, **{
shortcut: "terr",
construction: Construction.new(
ts: 180,
cost: ResourceBag.new({
Resource::Type::Crystals => 300,
}),
requirements: [] of Game::Building::Type
),
production: Production.new(
ts: 60,
input: ResourceBag.new({
Resource::Type::Crystals => 50,
Resource::Type::Oxygen => 20,
Resource::Type::Iron => 5,
}),
output: ResourceBag.new({
Resource::Type::Terraformation => 5,
})
),
}
)
end
getter items
private def add(building : Building)
t = building.type
@items << {t: t, b: building}
end
end
end