From: Erik V. <ev...@us...> - 2010-05-07 20:03:56
|
Update of /cvsroot/rails/18xx/rails/game/specific/_1835 In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv20269/rails/game/specific/_1835 Modified Files: FoldIntoPrussian.java OperatingRound_1835.java PrussianFormationRound.java Log Message: 1835: Implemented denial of dividend for PR shares received in exchange for precursors that have operated before in the same OR. This required some refactoring of the dividend payout code. Index: PrussianFormationRound.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/specific/_1835/PrussianFormationRound.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** PrussianFormationRound.java 18 Apr 2010 20:52:32 -0000 1.11 --- PrussianFormationRound.java 7 May 2010 20:03:48 -0000 1.12 *************** *** 232,235 **** --- 232,236 ---- while (folding) { + // TODO Some validation needed break; } *************** *** 246,250 **** // Execute ! if (folding) executeExchange (action.getFoldedCompanies(), false, false); return folding; --- 247,251 ---- // Execute ! if (folding) executeExchange (folded, false, false); return folding; Index: OperatingRound_1835.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/specific/_1835/OperatingRound_1835.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** OperatingRound_1835.java 5 May 2010 21:44:51 -0000 1.5 --- OperatingRound_1835.java 7 May 2010 20:03:48 -0000 1.6 *************** *** 17,20 **** --- 17,21 ---- import rails.game.Portfolio; import rails.game.PrivateCompanyI; + import rails.game.PublicCertificateI; import rails.game.PublicCompanyI; import rails.game.ReportBuffer; *************** *** 71,82 **** int share = efs.getShare(); Player player = (Player) recipient; ! if (!deniedIncomeShare.containsKey(player)) { ! //deniedIncomeShare.put(player, share); ! new MapChange<Player, Integer> (deniedIncomeShare, player, share); ! } else { ! //deniedIncomeShare.put(player, share + deniedIncomeShare.get(player)); ! new MapChange<Player, Integer> (deniedIncomeShare, player, ! share + deniedIncomeShare.get(player)); ! } } --- 72,76 ---- int share = efs.getShare(); Player player = (Player) recipient; ! addIncomeDenialShare (player, share); } *************** *** 90,93 **** --- 84,137 ---- } + private void addIncomeDenialShare (Player player, int share) { + + if (!deniedIncomeShare.containsKey(player)) { + new MapChange<Player, Integer> (deniedIncomeShare, player, share); + } else { + new MapChange<Player, Integer> (deniedIncomeShare, player, + share + deniedIncomeShare.get(player)); + } + //log.debug("+++ Denied "+share+"% share of PR income to "+player.getName()); + } + + /** Count the number of shares per revenue recipient<p> + * A special rule applies to 1835 to prevent black privates and minors providing + * income twice during an OR. + */ + protected Map<CashHolder, Integer> countSharesPerRecipient () { + + Map<CashHolder, Integer> sharesPerRecipient = super.countSharesPerRecipient(); + + if (operatingCompany.getName().equalsIgnoreCase(GameManager_1835.PR_ID)) { + for (Player player : deniedIncomeShare.keySet()) { + int share = deniedIncomeShare.get(player); + int shares = share / operatingCompany.getShareUnit(); + sharesPerRecipient.put (player, sharesPerRecipient.get(player) - shares); + ReportBuffer.add(LocalText.getText("NoIncomeForPreviousOperation", + player.getName(), + share, + GameManager_1835.PR_ID)); + + } + } + + return sharesPerRecipient; + } + + /** + * Register black minors as having operated + * for the purpose of denying income after conversion to a PR share + */ + protected void initTurn() { + + super.initTurn(); + + List<SpecialPropertyI> sps = operatingCompany.getSpecialProperties(); + if (sps != null && !sps.isEmpty()) { + ExchangeForShare efs = (ExchangeForShare) sps.get(0); + addIncomeDenialShare (operatingCompany.getPresident(), efs.getShare()); + } + } + @Override public void resume() { Index: FoldIntoPrussian.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/specific/_1835/FoldIntoPrussian.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FoldIntoPrussian.java 28 Feb 2010 21:38:06 -0000 1.1 --- FoldIntoPrussian.java 7 May 2010 20:03:48 -0000 1.2 *************** *** 9,12 **** --- 9,13 ---- import rails.game.*; import rails.game.action.PossibleAction; + import rails.util.Util; public class FoldIntoPrussian extends PossibleAction { *************** *** 90,94 **** } } ! if (foldedCompanyNames != null) { foldedCompanies = new ArrayList<CompanyI>(); for (String name : foldedCompanyNames.split(",")) { --- 91,95 ---- } } ! if (Util.hasValue(foldedCompanyNames)) { foldedCompanies = new ArrayList<CompanyI>(); for (String name : foldedCompanyNames.split(",")) { |