From 251d7f708ee38363826aa407c33c166de1d8af9b Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Tue, 5 Dec 2023 10:33:30 -0800 Subject: [PATCH] (WIP) Update conflict view rendering Conflict blueprints should render multiple conflict weapons instead of just one. Also adds Draconic Weapon Providence series to various places that check series by number --- app/blueprints/api/v1/conflict_blueprint.rb | 4 ++-- app/blueprints/api/v1/grid_weapon_blueprint.rb | 2 +- app/controllers/api/v1/grid_weapons_controller.rb | 15 +++++++++------ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app/blueprints/api/v1/conflict_blueprint.rb b/app/blueprints/api/v1/conflict_blueprint.rb index fa036e5..eccfab1 100644 --- a/app/blueprints/api/v1/conflict_blueprint.rb +++ b/app/blueprints/api/v1/conflict_blueprint.rb @@ -18,8 +18,8 @@ module Api end view :weapons do - field :conflicts, if: ->(_fn, _obj, options) { options.key?(:conflict_weapon) } do |_, options| - GridWeaponBlueprint.render_as_hash(options[:conflict_weapon], view: :nested) + field :conflicts, if: ->(_fn, _obj, options) { options.key?(:conflict_weapons) } do |_, options| + GridWeaponBlueprint.render_as_hash(options[:conflict_weapons], view: :nested) end field :incoming, if: ->(_fn, _obj, options) { options.key?(:incoming_weapon) } do |_, options| diff --git a/app/blueprints/api/v1/grid_weapon_blueprint.rb b/app/blueprints/api/v1/grid_weapon_blueprint.rb index 7ab9355..ecbe643 100644 --- a/app/blueprints/api/v1/grid_weapon_blueprint.rb +++ b/app/blueprints/api/v1/grid_weapon_blueprint.rb @@ -15,7 +15,7 @@ module Api association :weapon_keys, blueprint: WeaponKeyBlueprint, if: lambda { |_field_name, w, _options| - [2, 3, 17, 24].include?(w.weapon.series) + [2, 3, 17, 24, 34].include?(w.weapon.series) } field :ax, if: ->(_field_name, w, _options) { w.weapon.ax } do |w| diff --git a/app/controllers/api/v1/grid_weapons_controller.rb b/app/controllers/api/v1/grid_weapons_controller.rb index f68e011..43955ba 100644 --- a/app/controllers/api/v1/grid_weapons_controller.rb +++ b/app/controllers/api/v1/grid_weapons_controller.rb @@ -93,7 +93,7 @@ module Api # Check if the incoming weapon is compatible with the specified position def compatible_with_position?(incoming_weapon, position) - false if [9, 10, 11].include?(position.to_i) && ![11, 16, 17, 28, 29].include?(incoming_weapon.series) + false if [9, 10, 11].include?(position.to_i) && ![11, 16, 17, 28, 29, 34].include?(incoming_weapon.series) true end @@ -126,9 +126,9 @@ module Api end # Render the conflict view as a string - def render_conflict_view(conflict_weapon, incoming_weapon, incoming_position) + def render_conflict_view(conflict_weapons, incoming_weapon, incoming_position) ConflictBlueprint.render(nil, view: :weapons, - conflict_weapon: conflict_weapon, + conflict_weapons: conflict_weapons, incoming_weapon: incoming_weapon, incoming_position: incoming_position) end @@ -166,12 +166,15 @@ module Api end def handle_conflict(weapon) - conflict_weapon = weapon.conflicts(party) - if conflict_weapon.weapon.id != incoming_weapon.id + conflict_weapons = weapon.conflicts(party) + + # Map conflict weapon IDs into an array + conflict_weapon_ids = conflict_weapons.map(&:id) + if conflict_weapon_ids.include?(incoming_weapon.id) # Render conflict view if the underlying canonical weapons # are not identical - output = render_conflict_view([conflict_weapon], incoming_weapon, weapon_params[:position]) + output = render_conflict_view(conflict_weapons, incoming_weapon, weapon_params[:position]) render json: output else # Move the original grid weapon to the new position