Calc paths when restore
This commit is contained in:
parent
ea5e7950de
commit
189f6dd96b
@ -94,8 +94,10 @@ module Game::TestCommand
|
||||
world = World.new create_map_with_resource
|
||||
world.resources.inc(Resource::Type::Crystals, 20)
|
||||
command = RestoreCommand.new Point.new(0, 1), once: true
|
||||
world.push command
|
||||
world.run 20
|
||||
time_point = (20 + 2 * 2 + 1 * 2).to_i64
|
||||
done_at = world.push command
|
||||
done_at.should eq time_point
|
||||
world.run time_point
|
||||
# Check world resources
|
||||
world.resources[Resource::Type::Crystals].should eq 15
|
||||
# Check tile deposit
|
||||
|
@ -118,11 +118,16 @@ module Game
|
||||
end
|
||||
resource = restoration.resource
|
||||
@deposit_tile = nearest_deposit(world, resource.type)
|
||||
if @deposit_tile
|
||||
stock_tile = nearest_stock(world)
|
||||
if @deposit_tile && stock_tile
|
||||
world.resources.dec restoration.input
|
||||
@holded = resource
|
||||
restoration.ts +
|
||||
2 * tile.point.distance(stock_tile.point) +
|
||||
2 * tile.point.distance(@deposit_tile.as(DepositTile).point)
|
||||
else
|
||||
restoration.ts
|
||||
end
|
||||
restoration.ts
|
||||
end
|
||||
|
||||
def finish(world : World)
|
||||
@ -140,6 +145,13 @@ module Game
|
||||
end
|
||||
tile.as?(DepositTile)
|
||||
end
|
||||
|
||||
private def nearest_stock(world : World) : BuildingTile?
|
||||
tile = world.map.nearest_tile @point do |t|
|
||||
t.is_a?(BuildingTile) && t.building.has_role Building::Role::Storehouse
|
||||
end
|
||||
tile.as?(BuildingTile)
|
||||
end
|
||||
end
|
||||
|
||||
# class BuildCrystalHarvesterCommand < Command
|
||||
|
Loading…
Reference in New Issue
Block a user