/* 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.client.gui.GameField;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
import org.ojim.client.gui.GUIClient;
import org.ojim.client.gui.RightBar.ChatWindow;
import org.ojim.language.Localizer;
import org.ojim.logic.state.Auction;
import org.ojim.logic.state.GameState;
import org.ojim.logic.state.Player;
import org.ojim.logic.state.fields.BuyableField;
import org.ojim.logic.state.fields.Field;
import org.ojim.logic.state.fields.Street;
import org.ojim.logic.state.fields.StreetFieldGroup;
/**
* Das Spielfeld
*
*/
public class GameField extends JPanel {
private static final long serialVersionUID = 5398588367941146349L;
private GameFieldPiece[] fields;
private boolean isInitialized = false;
private static Player me;
// Das Feld auf das zuletzt mit der Maus geklickt wurde
// Hält GameFieldPieceCollection
// Hält Referenz auf GameFieldPiece
private InteractionPopup interactionPopup;
private MouseListener mouseListener = new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
Field selected = null;
if (e.getComponent() instanceof GameFieldPiece) {
selected = ((GameFieldPiece) e.getComponent()).getField();
}
if (!interactionPopup.getOtherTrade()) {
interactionPopup.fieldClicked(selected, me);
}
if (selected instanceof Street
&& GameField.this.allOfGroupOwned((Street) selected)) {
interactionPopup.showUpgrade((Street) selected);
} else {
interactionPopup.deleteUpgrade();
}
}
};
public GameField(GUIClient guiClient) {
interactionPopup = new InteractionPopup(guiClient, me);
}
public void buildOnStreet(Field field) {
this.fields[field.getPosition()].redrawStreet();
// for (int i = 0; i < GameState.FIELDS_AMOUNT; i++) {
// if (this.fields[i].isField(field)) {
// this.fields[i].redrawStreet();
// }
// }
redraw();
}
public void playerBuysField(Player player, Field field) {
this.fields[field.getPosition()].draw();
redraw();
}
public void destroyOnStreet(Field field) {
this.fields[field.getPosition()].redrawStreet();
// for (int i = 0; i < GameState.FIELDS_AMOUNT; i++) {
// if (this.fields[i].isField(field)) {
// this.fields[i].redrawStreet();
// }
// }
redraw();
}
public void switchFieldStatus(Field field) {
this.fields[field.getPosition()].draw();
System.out.println(field.getName() + " wird mortaged");
redraw();
}
public void playerMoves(Field field, Player player) {
// this.remove(playerLabel[player.getId()]);
/*
* this.player[player.getId()] = player; this.field[player.getId()] =
* field;
*
* playerLabel[player.getId()].setBackground(PlayerColor
* .getBackGroundColor(player.getColor()));
* playerLabel[player.getId()].setName(field.getPosition() + "000");
* playerLabel[player.getId()].setBorder(new LineBorder(Color.black,
* 1)); this.add(playerLabel[player.getId()]); this.revalidate();
*/
for (GameFieldPiece piece : this.fields) {
piece.removePlayer(player);
}
this.fields[field.getPosition()].addPlayer(player);
redraw();
}
public void init(GameState gameState, GUIClient gui) {
// Mittelfeld
// interactionPopup.setBackground(Color.black);
interactionPopup.setName(-1 + "");
this.add(interactionPopup);
// System.out.println("GAMEFIELD UPDATE");
this.setLayout(new GameFieldLayout());
fields = new GameFieldPiece[gameState.getNumberOfFields()];
for (int i = 0; i < gameState.getNumberOfFields(); i++) {
fields[i] = new GameFieldPiece(gameState.getFieldAt(i), gui);
try {
fields[i].setField(gameState.getFieldAt(i));
fields[i].init(gameState);
} catch (NullPointerException e) {
// System.out.println("IDx "+i);
}
}
isInitialized = true;
for (int i = 0; i < gameState.getNumberOfFields(); i++) {
// ((GameFieldPiece) actualLabel).draw();
fields[i].setName(i + "");
fields[i].setBorder(new LineBorder(Color.black, 1));
fields[i].addMouseListener(mouseListener);
this.add(fields[i]);
}
redraw();
}
/*
* public void draw() { this.setLayout(new GameFieldLayout());
*
* JPanel actualLabel = new JPanel();
*
* actualLabel.setBackground(Color.black);
*
* actualLabel.setName(-1 + ""); this.add(actualLabel);
*
* for (int i = 0; i < GameState.MAXIMUM_PLAYER_COUNT; i++) { //
* this.remove(playerLabel[i]); // System.out.println("Er malt."); }
*
* for (int i = 0; i < GameState.FIELDS_AMOUNT; i++) { try {
* ((GameFieldPiece) actualLabel).removePlayer(); } catch
* (ClassCastException e) {
*
* } }
*
* for (int j = 0; j < GameState.MAXIMUM_PLAYER_COUNT; j++) { for (int i =
* 0; i < GameState.FIELDS_AMOUNT; i++) { actualLabel = fields[i]; try { if
* (i == field[j].getPosition()) { ((GameFieldPiece)
* actualLabel).addPlayer(player[j]); ((GameFieldPiece) actualLabel).draw();
* } actualLabel.setName(i + ""); actualLabel.setBorder(new
* LineBorder(Color.black, 1)); actualLabel.addMouseListener(mouseListener);
* this.add(actualLabel);
*
* } catch (NullPointerException e) {
*
* } } }
*
* }
*/
public void redraw() {
/*
* for (int i = 0; i < fieldsAmount; i++) { try {
* ((GameFieldPiece)actualLabel).removePlayer(); } catch
* (ClassCastException e) {
*
* } }
*/
this.repaint();
}
public boolean isInitialized() {
return isInitialized;
}
public void dices(int[] diceValues) {
interactionPopup.showDices(diceValues);
}
public void setFreeParkingMoney(int moneyInPot) {
interactionPopup.showFreeParkingCash(moneyInPot);
}
public void setLanguage(Localizer language) {
if (interactionPopup != null) {
interactionPopup.setLanguage(language);
}
}
public void playerIsBancrupt(Player bancruptPlayer) {
for (int i = 0; i < this.fields.length; i++) {
this.fields[i].draw();
this.fields[i].removePlayer(bancruptPlayer);
}
}
public static void addMe(Player me2) {
me = me2;
}
/**
* Funktion von Jeremias
*
* @param street
* eingegebene Straße
* @return gehören mir alle Teile der Straße?
*/
private boolean allOfGroupOwned(Street street) {
StreetFieldGroup group = street.getFieldGroup();
// System.out.println("3!");
if (group.getFields().length > 1) {
// System.out.println("4!");
int count = 0;
for (Field field : group.getFields()) {
// System.out.println("5!");
if (((BuyableField) field).getOwner() == me) {
count++;
}
}
return (count == group.getFields().length);
} else {
System.out.println(street.getFieldGroup().getName());
}
return false;
}
public void showTrade(Player me, Player partnerPlayer, int requiredCash,
BuyableField[] requiredBuyableFields, int requiredOutOfJailCards,
int offeredCash, BuyableField[] offeredBuyableFields,
int offeredOutOfJailCards, boolean otherTrade) {
interactionPopup.showTrade(me, partnerPlayer, requiredCash,
requiredBuyableFields, requiredOutOfJailCards, offeredCash,
offeredBuyableFields, offeredOutOfJailCards, otherTrade);
}
public void endTrade() {
interactionPopup.endTrade();
}
public void showAuction(Auction auction) {
interactionPopup.showAuction(auction.getState(), auction.objective,
auction.getHighestBidder(), auction.getHighestBid());
}
public void removeAuction() {
interactionPopup.removeAuction();
}
}