From: Erik V. <ev...@us...> - 2010-02-28 21:38:14
|
Update of /cvsroot/rails/18xx/rails/game/specific/_1835 In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv7856/rails/game/specific/_1835 Modified Files: PrussianFormationRound.java Added Files: FoldIntoPrussian.java Log Message: 1835 Prussian start & side effects Index: PrussianFormationRound.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/specific/_1835/PrussianFormationRound.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** PrussianFormationRound.java 16 Feb 2010 20:25:38 -0000 1.1 --- PrussianFormationRound.java 28 Feb 2010 21:38:06 -0000 1.2 *************** *** 5,11 **** import rails.common.GuiDef; import rails.game.*; - import rails.game.action.MergeCompanies; import rails.game.action.NullAction; ! import rails.game.action.StartCompany; import rails.util.LocalText; --- 5,14 ---- import rails.common.GuiDef; import rails.game.*; import rails.game.action.NullAction; ! import rails.game.action.PossibleAction; ! import rails.game.move.MoveSet; ! import rails.game.special.ExchangeForShare; ! import rails.game.special.SpecialPropertyI; ! import rails.game.specific._1856.PublicCompany_CGR; import rails.util.LocalText; *************** *** 64,71 **** getCurrentPlayer().getName())); ! possibleActions.add(new MergeCompanies(m2, prussian)); ! if (!forcedStart) { ! possibleActions.add(new NullAction(NullAction.PASS)); } } --- 67,89 ---- getCurrentPlayer().getName())); ! possibleActions.add(new FoldIntoPrussian(m2)); ! } else if (step == Step.MERGE) { ! SpecialPropertyI sp; ! for (PrivateCompanyI company : currentPlayer.getPortfolio().getPrivateCompanies()) { ! sp = company.getSpecialProperties().get(0); ! if (sp instanceof ExchangeForShare) { ! possibleActions.add(new FoldIntoPrussian(company)); ! } ! } ! PublicCompanyI company; ! List<SpecialPropertyI> sps; ! for (PublicCertificateI cert : currentPlayer.getPortfolio().getCertificates()) { ! if (!cert.isPresidentShare()) continue; ! company = cert.getCompany(); ! sps = company.getSpecialProperties(); ! if (sps != null && !sps.isEmpty() && sps.get(0) instanceof ExchangeForShare) { ! possibleActions.add(new FoldIntoPrussian(company)); ! } } } *************** *** 75,78 **** --- 93,209 ---- } + protected boolean processGameSpecificAction(PossibleAction action) { + + if (action instanceof FoldIntoPrussian) { + + FoldIntoPrussian a = (FoldIntoPrussian) action; + List<CompanyI> folded = a.getFoldedCompanies(); + + if (step == Step.START) { + if (folded.isEmpty() || !startPrussian(a)) { + finishRound(); + } else { + step = Step.MERGE; + } + } else if (step == Step.MERGE) { + if (!folded.isEmpty()) mergeIntoPrussian (a); + } + + return true; + } else { + return false; + } + } + + private boolean startPrussian (FoldIntoPrussian action) { + + // Validate + String errMsg = null; + + while (true) { + if (!(M2_ID.equals(action.getFoldedCompanyNames()))) { + errMsg = LocalText.getText("WrongCompany", + action.getFoldedCompanyNames(), + M2_ID); + break; + } + break; + } + + if (errMsg != null) { + DisplayBuffer.add(LocalText.getText("CannotMerge", + action.getFoldedCompanyNames(), + PR_ID, + errMsg)); + return false; + } + + moveStack.start(false); + + // Execute + prussian.start(); + String message = LocalText.getText("START_MERGED_COMPANY", + PR_ID, + Bank.format(prussian.getIPOPrice()), + prussian.getStartSpace()); + ReportBuffer.add(message); + + executeExchange (action.getFoldedCompanies(), true); + + return true; + } + + private boolean mergeIntoPrussian (FoldIntoPrussian action) { + + // Validate + String errMsg = null; + + while (true) { + break; + } + + if (errMsg != null) { + DisplayBuffer.add(LocalText.getText("CannotMerge", + action.getFoldedCompanyNames(), + PR_ID, + errMsg)); + return false; + } + + moveStack.start(false); + + // Execute + executeExchange (action.getFoldedCompanies(), true); + + return true; + } + + private void executeExchange (List<CompanyI> companies, boolean president) { + + ExchangeForShare efs; + PublicCertificateI cert; + for (CompanyI company : companies) { + // Shortcut, sp should be checked + efs = (ExchangeForShare) company.getSpecialProperties().get(0); + cert = unavailable.findCertificate(prussian, efs.getShare(), president); + cert.moveTo(currentPlayer.getPortfolio()); + company.setClosed(); + ReportBuffer.add(LocalText.getText("MERGE_MINOR_LOG", + currentPlayer.getName(), + company.getName(), + PR_ID, + company instanceof PrivateCompanyI ? "no" + : Bank.format(((PublicCompanyI)company).getCash()), + company instanceof PrivateCompanyI ? "no" + : ((PublicCompanyI)company).getPortfolio().getTrainList().size())); + ReportBuffer.add(LocalText.getText("GetShareForMinor", + currentPlayer.getName(), + cert.getShare(), + PR_ID, + ipo.getName(), + company.getName() )); + } + } + public static boolean prussianIsComplete(GameManagerI gameManager) { List<PublicCertificateI> unissued --- NEW FILE: FoldIntoPrussian.java --- package rails.game.specific._1835; import java.io.IOException; import java.io.ObjectInputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import rails.game.*; import rails.game.action.PossibleAction; public class FoldIntoPrussian extends PossibleAction { // Server settings protected transient List<CompanyI> foldableCompanies = null; protected String foldableCompanyNames = null; // Client settings protected transient List<CompanyI> foldedCompanies = null; protected String foldedCompanyNames = null; public static final long serialVersionUID = 1L; public FoldIntoPrussian(List<CompanyI> companies) { this.foldableCompanies = companies; foldableCompanyNames = Company.joinNamesWithDelimiter (foldableCompanies, ","); } public FoldIntoPrussian(CompanyI company) { this (Arrays.asList(new CompanyI[] {company})); } public List<CompanyI> getFoldedCompanies() { return foldedCompanies; } public void setFoldedCompanies(List<CompanyI> foldedCompanies) { this.foldedCompanies = foldedCompanies; foldedCompanyNames = Company.joinNamesWithDelimiter (foldedCompanies, ","); } public List<CompanyI> getFoldableCompanies() { return foldableCompanies; } public String getFoldableCompanyNames() { return foldableCompanyNames; } public String getFoldedCompanyNames() { return foldedCompanyNames; } @Override public String toString() { StringBuilder text = new StringBuilder("Fold into Prussian:"); if (foldableCompanyNames != null) { text.append(" foldable=").append(foldableCompanyNames); } if (foldedCompanyNames != null) { text.append(" folded=").append(foldedCompanyNames); } return text.toString(); } @Override public boolean equals(PossibleAction action) { if (!(action instanceof FoldIntoPrussian)) return false; FoldIntoPrussian a = (FoldIntoPrussian) action; return a.foldableCompanyNames.equals(foldableCompanyNames); } /** Deserialize */ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); CompanyManagerI cmgr = getCompanyManager(); if (foldableCompanyNames != null) { foldableCompanies = new ArrayList<CompanyI>(); for (String name : foldableCompanyNames.split(",")) { foldableCompanies.add(cmgr.getPublicCompany(name)); } } if (foldedCompanyNames != null) { foldedCompanies = new ArrayList<CompanyI>(); for (String name : foldedCompanyNames.split(",")) { foldedCompanies.add(cmgr.getPublicCompany(name)); } } } } |