Change mine command with storehouse calc

This commit is contained in:
2019-10-13 17:29:20 +03:00
parent d15aeaedc4
commit e8f7453a8f
3 changed files with 22 additions and 6 deletions

View File

@ -63,7 +63,7 @@ module Game
storage : Capacity | Nil = nil
)
@name = name != "" ? name : @type.to_s
@roles = roles.nil? ? Array(Role).new : roles
@roles = roles.nil? ? Array(Role).new : roles.as(Array(Role))
@construction = construction.nil? ? Construction.immediatly : construction.as(Construction)
@production = production
@mining = mining
@ -79,5 +79,9 @@ module Game
getter mining
getter restoration
getter storage
def has_role(role : Role) : Bool
@roles.includes? role
end
end
end

View File

@ -59,11 +59,14 @@ module Game
end
resource = mining.resource
deposit_tile = nearest_deposit(world, resource.type)
if deposit_tile
stock_tile = nearest_stock(world)
if deposit_tile && stock_tile
mined_amount = deposit_tile.dep.dec(resource.amount)
@holded = resource.type.to_res mined_amount
mining.ts + 2 * tile.point.distance(stock_tile.point) + 2 * tile.point.distance(deposit_tile.point)
else
mining.ts
end
mining.ts
end
def finish(world : World)
@ -82,6 +85,13 @@ module Game
end
tile.as?(DepositTile)
end
private def nearest_stock(world : World) : BuildingTile?
tile = world.map.nearest_tile @point do |tile|
tile.is_a?(BuildingTile) && tile.building.has_role Building::Role::Storehouse
end
tile.as?(BuildingTile)
end
end
class RestoreCommand < Command