Rewrite mine command
This commit is contained in:
@ -43,29 +43,34 @@ module Game
|
||||
tile = world.map.get(@point).as(BuildingTile)
|
||||
building = tile.building
|
||||
mining = building.mining.as(Mining)
|
||||
# deposit_tile = nearest_deposit(world, mining.resource.type)
|
||||
# if deposit_tile
|
||||
# @holded = deposit_tile.dep.dec(mining.resource)
|
||||
# end
|
||||
deposit_tile = nearest_deposit(world, mining.resource.type)
|
||||
if deposit_tile
|
||||
@holded = deposit_tile.as(DepositTile).dep.dec(mining.resource)
|
||||
end
|
||||
mining.ts
|
||||
end
|
||||
|
||||
def finish(world : World)
|
||||
if @holded
|
||||
# world.resources.inc(@holded)
|
||||
holded = @holded.as(Resource)
|
||||
world.resources.inc(holded.type, holded.amount)
|
||||
end
|
||||
world.push(MineCommand.new(@point))
|
||||
end
|
||||
|
||||
def desc : String
|
||||
sprintf "Mine `smth` from %d,%d", @point.x, @point.y
|
||||
if @holded
|
||||
sprintf "Mine %s from %d,%d", @holded.as(Resource).type, @point.x, @point.y
|
||||
else
|
||||
sprintf "Wait for resources at %d,%d", @point.x, @point.y
|
||||
end
|
||||
end
|
||||
|
||||
# private def nearest_deposit(world : World, res_type : Resource::Type)
|
||||
# world.map.nearest_tile @point do |tile|
|
||||
# tile.is_a?(DepositTile) && tile.dep.type == res_type && tile.dep.cur > 0
|
||||
# end
|
||||
# end
|
||||
private def nearest_deposit(world : World, res_type : Resource::Type)
|
||||
world.map.nearest_tile @point do |tile|
|
||||
tile.is_a?(DepositTile) && tile.dep.type == res_type && tile.dep.cur > 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# class BuildCrystalHarvesterCommand < Command
|
||||
|
@ -12,14 +12,28 @@ class Game::Deposit
|
||||
getter cap
|
||||
getter cur
|
||||
|
||||
def inc(resource : Resource)
|
||||
def inc(resource : Resource) : Resource
|
||||
check_res resource.type
|
||||
@cur = Math.min(@cap, @cur + resource.amount)
|
||||
if @cur + resource.amount <= @cap
|
||||
@cur += resource.amount
|
||||
Resource.new(resource.type, resource.amount)
|
||||
else
|
||||
res = Resource.new(resource.type, @cap - @cur)
|
||||
@cur = @cap
|
||||
res
|
||||
end
|
||||
end
|
||||
|
||||
def dec(resource : Resource)
|
||||
def dec(resource : Resource) : Resource
|
||||
check_res resource.type
|
||||
@cur = Math.max(0, @cur - resource.amount)
|
||||
if @cur >= resource.amount
|
||||
@cur -= resource.amount
|
||||
resource
|
||||
else
|
||||
res = Resource.new(resource.type, @cur)
|
||||
@cur = 0
|
||||
res
|
||||
end
|
||||
end
|
||||
|
||||
private def check_res(other_res_type : Resource::Type)
|
||||
|
@ -11,6 +11,10 @@ struct Game::Resource
|
||||
|
||||
getter type
|
||||
getter amount
|
||||
|
||||
def with_amount(amount : Capacity) : self
|
||||
self.new @type, amount
|
||||
end
|
||||
end
|
||||
|
||||
class Game::ResourceBag
|
||||
|
Reference in New Issue
Block a user