diff --git a/spec/deposit_spec.cr b/spec/deposit_spec.cr index 2b01da7..9f87eda 100644 --- a/spec/deposit_spec.cr +++ b/spec/deposit_spec.cr @@ -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 diff --git a/src/game/command.cr b/src/game/command.cr index 672aa5e..f8e9cf8 100644 --- a/src/game/command.cr +++ b/src/game/command.cr @@ -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)) diff --git a/src/game/deposit.cr b/src/game/deposit.cr index 03318a7..f6cfda5 100644 --- a/src/game/deposit.cr +++ b/src/game/deposit.cr @@ -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