Refactoring of Deposit

This commit is contained in:
Anton Vakhrushev 2019-10-13 17:01:13 +03:00
parent 45d0042a29
commit 8f1ac6c74f
3 changed files with 23 additions and 29 deletions

View File

@ -16,26 +16,26 @@ module Game::Test
it "should be decreased with span" do it "should be decreased with span" do
dep = Deposit.new(Resource::Type::Crystals, 100) dep = Deposit.new(Resource::Type::Crystals, 100)
res = dep.dec Resource.new(Resource::Type::Crystals, 20) res = dep.dec 20
dep.cap.should eq 100 dep.cap.should eq 100
dep.cur.should eq 80 dep.cur.should eq 80
res.amount.should eq 20 res.should eq 20
end end
it "should not be increased above capacity" do it "should not be increased above capacity" do
dep = Deposit.new(Resource::Type::Crystals, 100, 20) dep = Deposit.new(Resource::Type::Crystals, 100, 20)
res = dep.inc Resource.new(Resource::Type::Crystals, 100) res = dep.inc 100
dep.cap.should eq 100 dep.cap.should eq 100
dep.cur.should eq 100 dep.cur.should eq 100
res.amount.should eq 80 res.should eq 80
end end
it "should not be decreased below zero" do it "should not be decreased below zero" do
dep = Deposit.new(Resource::Type::Crystals, 100) dep = Deposit.new(Resource::Type::Crystals, 100)
res = dep.dec Resource.new(Resource::Type::Crystals, 120) res = dep.dec 120
dep.cap.should eq 100 dep.cap.should eq 100
dep.cur.should eq 0 dep.cur.should eq 0
res.amount.should eq 100 res.should eq 100
end end
end end
end end

View File

@ -51,9 +51,10 @@ module Game
tile = world.map.get(@point).as(BuildingTile) tile = world.map.get(@point).as(BuildingTile)
building = tile.building building = tile.building
mining = building.mining.as(Mining) mining = building.mining.as(Mining)
deposit_tile = nearest_deposit(world, mining.resource.type) resource = mining.resource
deposit_tile = nearest_deposit(world, resource.type)
if deposit_tile if deposit_tile
@holded = deposit_tile.dep.dec(mining.resource) @holded = Resource.new resource.type, deposit_tile.dep.dec(resource.amount)
end end
mining.ts mining.ts
end end
@ -98,17 +99,18 @@ module Game
if !world.resources.has(restoration.input) if !world.resources.has(restoration.input)
return restoration.ts return restoration.ts
end end
@deposit_tile = nearest_deposit(world, restoration.resource.type) resource = restoration.resource
@deposit_tile = nearest_deposit(world, resource.type)
if @deposit_tile if @deposit_tile
world.resources.dec restoration.input world.resources.dec restoration.input
@holded = restoration.resource @holded = resource
end end
restoration.ts restoration.ts
end end
def finish(world : World) def finish(world : World)
if @deposit_tile && @holded if @deposit_tile && @holded
@deposit_tile.as(DepositTile).dep.inc(@holded.as(Resource)) @deposit_tile.as(DepositTile).dep.inc(@holded.as(Resource).amount)
end end
if !@once if !@once
world.push(RestoreCommand.new(@point)) world.push(RestoreCommand.new(@point))

View File

@ -13,33 +13,25 @@ class Game::Deposit
getter cap getter cap
getter cur getter cur
def inc(resource : Resource) : Resource def inc(value : Capacity) : Capacity
check_res resource.type if @cur + value <= @cap
if @cur + resource.amount <= @cap @cur += value
@cur += resource.amount value
Resource.new(resource.type, resource.amount)
else else
res = Resource.new(resource.type, @cap - @cur) res = @cap - @cur
@cur = @cap @cur = @cap
res res
end end
end end
def dec(resource : Resource) : Resource def dec(value : Capacity) : Capacity
check_res resource.type if @cur >= value
if @cur >= resource.amount @cur -= value
@cur -= resource.amount value
resource
else else
res = Resource.new(resource.type, @cur) res = @cur
@cur = 0 @cur = 0
res res
end end
end end
private def check_res(other_res_type : Resource::Type)
if @type != other_res_type
raise ResourceMismatch.new
end
end
end end