From 2655d1f16f484623c7edcb107b5e1dc4bcd579b5 Mon Sep 17 00:00:00 2001 From: Patrik Olesen Date: Sun, 28 Jan 2024 18:49:55 +0100 Subject: [PATCH 1/4] [18Uruguay] Secondary capitalization The corporation get the rest of the capitalization when the reach there destination tile --- lib/engine/game/g_18_uruguay/game.rb | 8 +++ .../g_18_uruguay/step/destination_bonus.rb | 62 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 lib/engine/game/g_18_uruguay/step/destination_bonus.rb diff --git a/lib/engine/game/g_18_uruguay/game.rb b/lib/engine/game/g_18_uruguay/game.rb index 54b3f0c842..17ea257c12 100644 --- a/lib/engine/game/g_18_uruguay/game.rb +++ b/lib/engine/game/g_18_uruguay/game.rb @@ -282,6 +282,7 @@ def operating_round(round_num) G18Uruguay::Step::TakeLoanBuyCompany, Engine::Step::HomeToken, G18Uruguay::Step::Track, + G18Uruguay::Step::DestinationToken, G18Uruguay::Step::Token, G18Uruguay::Step::Route, G18Uruguay::Step::RouteRptla, @@ -460,6 +461,13 @@ def float_str(entity) def can_par?(corporation, _parrer) nationalized? || @nationalization_triggered || corporation != @fce end + + # Second capatilization + def second_capitalization!(corporation) + amount = corporation.par_price.price * 5 + @bank.spend(amount, corporation) + @log << "#{corporation.name} connected to destination receives #{format_currency(amount)}" + end end end end diff --git a/lib/engine/game/g_18_uruguay/step/destination_bonus.rb b/lib/engine/game/g_18_uruguay/step/destination_bonus.rb new file mode 100644 index 0000000000..4946220557 --- /dev/null +++ b/lib/engine/game/g_18_uruguay/step/destination_bonus.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true + +module Engine + module Game + module G18Uruguay + module Step + class DestinationToken < Engine::Step::Base + ACTIONS = %w[destination_connection pass].freeze + + def description + 'Place the Destination Bonus' + end + + def pass_description + 'Skip (Destination Bonus)' + end + + def actions(_entity) + self.class::ACTIONS + end + + def auto_actions(entity) + corporations = @round.entities.select { |c| destination_node_check?(c) } + return [Engine::Action::Pass.new(entity)] if corporations.empty? + + [Engine::Action::DestinationConnection.new(entity, corporations: corporations)] + end + + def destination_node_check?(corporation) + return if corporation.destination_coordinates.nil? + + ability = @game.abilities(corporation, :destination_bonus) + return if ability.nil? + + destination_hex = @game.hex_by_id(corporation.destination_coordinates) + home_node = corporation.tokens.first.city + destination_hex.tile.nodes.first&.walk(corporation: corporation) do |path, _, _| + return true if path.nodes.include?(home_node) + end + false + end + + def check_and_apply_destination_bonus(corporation) + apply_destination_bonus(corporation) if destination_node_check?(corporation) + end + + def apply_destination_bonus(corporation) + ability = @game.abilities(corporation, :destination_bonus) + @game.second_capitalization!(corporation) unless ability.nil? + ability&.use! + end + + def process_destination_connection(action) + action.corporations.each { |corporation| check_and_apply_destination_bonus(corporation) } + + pass! + end + end + end + end + end +end From d3da3f9d6b8ba5d466eb37527f37206918ffb566 Mon Sep 17 00:00:00 2001 From: Michael Brandt Date: Tue, 13 Feb 2024 16:31:58 -0700 Subject: [PATCH 2/4] rename DestinationToken -> DestinationBonus --- lib/engine/game/g_18_uruguay/game.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/engine/game/g_18_uruguay/game.rb b/lib/engine/game/g_18_uruguay/game.rb index 17ea257c12..985a836ddf 100644 --- a/lib/engine/game/g_18_uruguay/game.rb +++ b/lib/engine/game/g_18_uruguay/game.rb @@ -282,7 +282,7 @@ def operating_round(round_num) G18Uruguay::Step::TakeLoanBuyCompany, Engine::Step::HomeToken, G18Uruguay::Step::Track, - G18Uruguay::Step::DestinationToken, + G18Uruguay::Step::DestinationBonus, G18Uruguay::Step::Token, G18Uruguay::Step::Route, G18Uruguay::Step::RouteRptla, From e0ba7de8eec29d3010c2cf27aef0fee5c8007de8 Mon Sep 17 00:00:00 2001 From: Michael Brandt Date: Tue, 13 Feb 2024 16:32:04 -0700 Subject: [PATCH 3/4] rename DestinationToken -> DestinationBonus --- lib/engine/game/g_18_uruguay/step/destination_bonus.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/engine/game/g_18_uruguay/step/destination_bonus.rb b/lib/engine/game/g_18_uruguay/step/destination_bonus.rb index 4946220557..3d40c72b70 100644 --- a/lib/engine/game/g_18_uruguay/step/destination_bonus.rb +++ b/lib/engine/game/g_18_uruguay/step/destination_bonus.rb @@ -4,7 +4,7 @@ module Engine module Game module G18Uruguay module Step - class DestinationToken < Engine::Step::Base + class DestinationBonus< Engine::Step::Base ACTIONS = %w[destination_connection pass].freeze def description From a3cab0a2a2a489fc36def967c3913d623cf8ed9c Mon Sep 17 00:00:00 2001 From: Michael Brandt Date: Tue, 13 Feb 2024 16:38:02 -0700 Subject: [PATCH 4/4] rubocop fix --- lib/engine/game/g_18_uruguay/step/destination_bonus.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/engine/game/g_18_uruguay/step/destination_bonus.rb b/lib/engine/game/g_18_uruguay/step/destination_bonus.rb index 3d40c72b70..935899e191 100644 --- a/lib/engine/game/g_18_uruguay/step/destination_bonus.rb +++ b/lib/engine/game/g_18_uruguay/step/destination_bonus.rb @@ -4,7 +4,7 @@ module Engine module Game module G18Uruguay module Step - class DestinationBonus< Engine::Step::Base + class DestinationBonus < Engine::Step::Base ACTIONS = %w[destination_connection pass].freeze def description