/* Copyright (C) 2010 - 2011 Fabian Neundorf, Philip Caroli,
* Maximilian Madlung, Usman Ghani Ahmed, Jeremias Mechler
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.ojim.iface;
import edu.kit.iti.pse.iface.IServer;
/**
* Minimale Schnittstelle um als Gegenpart für das Interface IServer zu dienen.
*
* @see {@link IServer}
* @author Fabian Neundorf
*/
public interface IClient {
/**
* Gibt den Namen des Spielers zurück.
*
* @return Der Name des Spielers.
*/
String getName();
/**
* Gibt die Sprache des Clients zurück.
*
* @return Die Clientsprache nach ISO 639-3.
*/
String getLanguage();
/**
* Informiert den Spieler, dass das Spiel beginnt.
*
* @param ids
* Die Anzahl der Spieler.
*/
void informStartGame(int[] ids);
/**
* Informiert den Spieler, dass der Spieler mit der id "player" an der Reihe
* ist und nun Würfeln darf.
*
* @param player
* Der Spieler der an die Reihe gekommen ist.
*/
void informTurn(int player);
/**
* Informiert den Spieler, dass der Spieler mit der ID das folgende
* Würfelergebnis hatte.
*
* @param diceValues
* Augenwerte der einzelnen Würfel.
*/
void informDiceValues(int[] diceValues);
/**
* Informiert den Spieler dass sich das Geld eines Spielers geändert hat.
*
* @param player
* Der Spieler mit dem geänderten Bargeld.
* @param cashChange
* Die Bargeldänderung.
*/
void informCashChange(int player, int cashChange);
/**
* Informiert den Spieler, dass ein Spieler ein Objekt gekauft hat.
*
* @param player
* der neue Besitzer der Straße.
* @param position
* Die Position des Objekts, welches gekauft wurde.
* @since SVN revision 13 (davor <code>informStreetBuy(int)</code>).
*/
void informBuy(int player, int position);
/**
* Informiert den Spieler, dass ein Spieler ein Objekt kaufen kann.
*
* @param player
* Der Spieler der das Objekt kaufen kann.
* @param position
* Die Position dessen Objekt gekauft werden kann.
* @since SVN revision 19.
*/
void informBuyEvent(int player, int position);
/**
* Informiert die Spieler, das ein Spieler den Zug beenden kann.
*
* @param player
* Die ID des Spielers der den Zug beendet.
* @since SVN revision 19.
*/
void informCanEndTurn(int player);
/**
* Informiert den Spieler, dass ein Spieler <i>ein</i> Gebäude gebaut hat.
*
* @param street
* Die Straße auf der das Gebäude gebaut wurde.
* @param playerId
* Der Spieler der das Gebäude gebaut hat.
*/
void informConstruct(int street);
/**
* Informiert den Spieler, dass ein Spieler <i>ein</i> Gebäude aufgelöst
* hat.
*
* @param street
* Die Straße auf der das Gebäude gestanden hat.
* @param playerId
* Der Spieler der das Gebäude aufgelöst hat.
*/
void informDestruct(int street);
/**
* Informiert den Spieler, dass ein Spieler eine Hypothek auf die Straße
* aufgenommen/zurückgezahlt hat.
*
* @param street
* Die Straße auf der die Hypothek aufgenommen wurde bzw. dessen
* Hypothek zurückgezahlt wurde.
* @param playerId
* Der handelnde Spieler.
*/
void informMortgageToogle(int street);
/**
* Informiert den Spieler, dass sich der Wert eines Frei Parken Felds geändert hat.
*
* @param freeParkingField
* Das Feld dessen Pot geändert wurde.
* @param newPot
* Der Wert des neuen Pots.
* @since SVN Revision 18.
*/
void informFreeParkingChange(int freeParkingField, int newPot);
/**
* Informiert den Spieler, dass der aktive Spieler eine Karte gezogen hat.
*
* @param text
* Inhalt der Karte.
* @param communityCard
* Wenn der Wert wahr ist, handelt es sich um eine
* Gemeinschaftskarte, sonst um eine Ereigniskarte.
*/
void informCardPull(String text, boolean communityCard);
/**
* Informiert den Spieler darüber, dass der aktive Spieler bankrott ist.
*/
void informBankruptcy();
/**
* Informiert den Spieler, dass eine Chat Nachricht eingegangen ist.
*
* @param text
* Der Text der Chat Nachricht.
* @param sender
* Der Sender der Nachricht. Ist -1, wenn der Server der Sender
* ist.
* @param privateMessage
* Ist wahr, wenn es sich um eine private Nachricht handelt.
*/
void informMessage(String text, int sender, boolean privateMessage);
/**
* Informiert den Spieler, dass ein Handelsangebot vorliegt, bzw. dass eine
* Antwort vorliegt.
*/
void informTrade();
/**
* Informiert den Spieler, dass eine Auktion begonnen hat.
*
* @param auctionState
* Gibt den aktuellen Status der Auktion an:
* <ul>
* <li><0 → Auktion hat begonnen.</li>
* <li>0 → Jemand hat geboten und der Zähler wird zurückgesetzt</li>
* <li>1 → „Zum ersten“</li>
* <li>2 → „Zum zweiten“</li>
* <li>3 → „Zum dritten“ (verkauft :P)</li>
* </ul>
* @since SVN revision 13.
*/
void informAuction(int auctionState);
/**
* Informiert den Client dass das Spiel vorbei ist und der übergebene Spieler gewonnen hat
*
* @param playeID
* Der Gewinner
*/
public void informGameOver(int playeID);
/**
* Informiert den Spieler, dass ein Spieler sich bewegt hat.
*
* @param playerId
* Die Id des Spielers der bewegt wurde.
* @param position
* Die neue Position des Spielers. Siehe
* {@link IServer#getPlayerPiecePosition(int)}.
* @since SVN revision 13.
*/
void informMove(int playerId, int position);
/**
* Informiert den Spieler, dass ein neuer Spieler sich verbunden hat.
*
* @param playerId
* Der neue Spieler.
* @since SVN revision 16.
*/
void informNewPlayer(int playerId);
/**
* Informiert den Spieler, dass sich ein Spieler getrennt hat.
*
* @param playerId
* Der ehemalige Spieler.
* @since SVN revision 16.
*/
void informPlayerLeft(int playerId);
}