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