Refactoring of Deposit
This commit is contained in:
parent
45d0042a29
commit
8f1ac6c74f
@ -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
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user