Add deposit concept
This commit is contained in:
parent
658d3b7288
commit
d3fe2ff23b
38
spec/deposit_spec.cr
Normal file
38
spec/deposit_spec.cr
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
require "./spec_helper"
|
||||||
|
|
||||||
|
module Game::Test
|
||||||
|
describe Deposit do
|
||||||
|
it "should be created fulfilled" do
|
||||||
|
dep = Deposit.new(Resources::Type::Crystals, 100)
|
||||||
|
dep.cap.should eq 100
|
||||||
|
dep.cur.should eq 100
|
||||||
|
end
|
||||||
|
|
||||||
|
it "can be created partially filled" do
|
||||||
|
dep = Deposit.new(Resources::Type::Crystals, 100, 20)
|
||||||
|
dep.cap.should eq 100
|
||||||
|
dep.cur.should eq 20
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should be decreased with span" do
|
||||||
|
dep = Deposit.new(Resources::Type::Crystals, 100)
|
||||||
|
dep.dec Deposit::Span.new(Resources::Type::Crystals, 20)
|
||||||
|
dep.cap.should eq 100
|
||||||
|
dep.cur.should eq 80
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should not be increased above capacity" do
|
||||||
|
dep = Deposit.new(Resources::Type::Crystals, 100, 20)
|
||||||
|
dep.inc Deposit::Span.new(Resources::Type::Crystals, 100)
|
||||||
|
dep.cap.should eq 100
|
||||||
|
dep.cur.should eq 100
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should not be decreased below zero" do
|
||||||
|
dep = Deposit.new(Resources::Type::Crystals, 100)
|
||||||
|
dep.dec Deposit::Span.new(Resources::Type::Crystals, 120)
|
||||||
|
dep.cap.should eq 100
|
||||||
|
dep.cur.should eq 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
40
src/game/deposit.cr
Normal file
40
src/game/deposit.cr
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
module Game
|
||||||
|
class Deposit
|
||||||
|
class Span
|
||||||
|
def initialize(@res : Resources::Type, @cap : Capacity)
|
||||||
|
end
|
||||||
|
|
||||||
|
getter res
|
||||||
|
getter cap
|
||||||
|
end
|
||||||
|
|
||||||
|
@cur : Capacity = 0
|
||||||
|
|
||||||
|
def initialize(@res : Resources::Type, @cap : Capacity)
|
||||||
|
@cur = @cap
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialize(@res : Resources::Type, @cap : Capacity, @cur : Capacity)
|
||||||
|
end
|
||||||
|
|
||||||
|
getter res
|
||||||
|
getter cap
|
||||||
|
getter cur
|
||||||
|
|
||||||
|
def inc(span : Span)
|
||||||
|
check_res span.res
|
||||||
|
@cur = Math.min(@cap, @cur + span.cap)
|
||||||
|
end
|
||||||
|
|
||||||
|
def dec(span : Span)
|
||||||
|
check_res span.res
|
||||||
|
@cur = Math.max(0, @cur - span.cap)
|
||||||
|
end
|
||||||
|
|
||||||
|
private def check_res(other_res : Resources::Type)
|
||||||
|
if @res != other_res
|
||||||
|
raise ResourceMismatch.new
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user