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
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.cur.should eq 80
res.amount.should eq 20
res.should eq 20
end
it "should not be increased above capacity" do
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.cur.should eq 100
res.amount.should eq 80
res.should eq 80
end
it "should not be decreased below zero" do
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.cur.should eq 0
res.amount.should eq 100
res.should eq 100
end
end
end

View File

@ -51,9 +51,10 @@ 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)
resource = mining.resource
deposit_tile = nearest_deposit(world, resource.type)
if deposit_tile
@holded = deposit_tile.dep.dec(mining.resource)
@holded = Resource.new resource.type, deposit_tile.dep.dec(resource.amount)
end
mining.ts
end
@ -98,17 +99,18 @@ module Game
if !world.resources.has(restoration.input)
return restoration.ts
end
@deposit_tile = nearest_deposit(world, restoration.resource.type)
resource = restoration.resource
@deposit_tile = nearest_deposit(world, resource.type)
if @deposit_tile
world.resources.dec restoration.input
@holded = restoration.resource
@holded = resource
end
restoration.ts
end
def finish(world : World)
if @deposit_tile && @holded
@deposit_tile.as(DepositTile).dep.inc(@holded.as(Resource))
@deposit_tile.as(DepositTile).dep.inc(@holded.as(Resource).amount)
end
if !@once
world.push(RestoreCommand.new(@point))

View File

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