diff options
author | David Gay <david@davidgay.org> | 2021-05-19 19:24:20 -0400 |
---|---|---|
committer | David Gay <david@davidgay.org> | 2021-05-19 19:24:20 -0400 |
commit | 38fff0e2d09f2954d747baf65ab555427ba653be (patch) | |
tree | d1e9c488a910015d907e539febe8cf683af3dc88 /app/models | |
parent | 045867220ea68b912f74b74a1476ac08bd19dbfd (diff) |
Hearth amenity building working!
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/activity.rb | 9 | ||||
-rw-r--r-- | app/models/character.rb | 16 |
2 files changed, 15 insertions, 10 deletions
diff --git a/app/models/activity.rb b/app/models/activity.rb index e70121e..b8eeed7 100644 --- a/app/models/activity.rb +++ b/app/models/activity.rb @@ -6,10 +6,11 @@ class Activity < ApplicationRecord def cost_string requirements = [] - data = self.whatnot[:cost] - return nil unless data - data[:items].each do |item_gid, quantity| - requirements.push "#{quantity} #{Item.find_by_gid(item_gid).name}" + self.whatnot[:cost].each do |cost| + case cost[:type] + when "item" + requirements.push "#{cost[:quantity]} #{Item.find_by_gid(cost[:gid]).name}" + end end requirements.join(", ") end diff --git a/app/models/character.rb b/app/models/character.rb index 1d24f93..55ea7ba 100644 --- a/app/models/character.rb +++ b/app/models/character.rb @@ -24,15 +24,17 @@ class Character < ApplicationRecord def pay_cost_for(activity) CharacterItem.transaction do - if activity.whatnot[:cost] - activity.whatnot[:cost][:items]&.each do |item_gid, quantity| - self.shift_item(item_gid, -quantity) + activity.whatnot[:cost]&.each do |cost| + case cost[:type] + when "item" + self.shift_item(cost[:gid], -cost[:quantity]) end end end end def has_item?(item, quantity = 1) + item = Item.find_by_gid(item) if item.is_a? String ci = self.character_items.find_by(item: item) ci && ci.quantity >= quantity end @@ -57,9 +59,10 @@ class Character < ApplicationRecord end def can_do_activity?(activity) - if activity.whatnot[:cost] - activity.whatnot[:cost][:items]&.each do |item_gid, quantity| - return false unless self.has_item?(item_gid, quantity) + activity.whatnot[:cost]&.each do |cost| + case cost[:type] + when "item" + return false unless self.has_item?(cost[:gid], cost[:quantity]) end end activity.whatnot[:requirements]&.each do |requirement| @@ -68,6 +71,7 @@ class Character < ApplicationRecord return false unless self.hearth.has_amenity?(requirement[:gid], requirement[:level]) end end + true end def start_activity(activity) |