mirror of
https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02.git
synced 2025-04-17 12:40:59 +02:00
Compare commits
No commits in common. "a70295f1ffe3fb68b8c947112bd4121b4aa166fb" and "991fe5280fe4d9160847b22789db16beade4ff42" have entirely different histories.
a70295f1ff
...
991fe5280f
@ -6,7 +6,6 @@ import com.jme3.math.Vector3f;
|
|||||||
|
|
||||||
import pp.monopoly.client.MonopolyApp;
|
import pp.monopoly.client.MonopolyApp;
|
||||||
import pp.monopoly.client.gui.popups.BuyCard;
|
import pp.monopoly.client.gui.popups.BuyCard;
|
||||||
import pp.monopoly.client.gui.popups.ConfirmTrade;
|
|
||||||
import pp.monopoly.client.gui.popups.EventCardPopup;
|
import pp.monopoly.client.gui.popups.EventCardPopup;
|
||||||
import pp.monopoly.client.gui.popups.FoodFieldCard;
|
import pp.monopoly.client.gui.popups.FoodFieldCard;
|
||||||
import pp.monopoly.client.gui.popups.GateFieldCard;
|
import pp.monopoly.client.gui.popups.GateFieldCard;
|
||||||
@ -151,8 +150,6 @@ public class TestWorld implements GameEventListener{
|
|||||||
new LooserPopUp(app).open();
|
new LooserPopUp(app).open();
|
||||||
} else if(event.msg().equals("timeout")) {
|
} else if(event.msg().equals("timeout")) {
|
||||||
new TimeOut(app).open();
|
new TimeOut(app).open();
|
||||||
} else if (event.msg().equals("tradeRequest")) {
|
|
||||||
new ConfirmTrade(app).open();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package pp.monopoly.client.gui;
|
package pp.monopoly.client.gui;
|
||||||
|
|
||||||
|
import static java.lang.Math.min;
|
||||||
|
|
||||||
|
import com.jme3.app.Application;
|
||||||
import com.jme3.material.Material;
|
import com.jme3.material.Material;
|
||||||
import com.jme3.math.ColorRGBA;
|
import com.jme3.math.ColorRGBA;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
@ -12,16 +15,13 @@ import com.simsilica.lemur.component.SpringGridLayout;
|
|||||||
import com.simsilica.lemur.core.VersionedList;
|
import com.simsilica.lemur.core.VersionedList;
|
||||||
import com.simsilica.lemur.core.VersionedReference;
|
import com.simsilica.lemur.core.VersionedReference;
|
||||||
import com.simsilica.lemur.style.ElementId;
|
import com.simsilica.lemur.style.ElementId;
|
||||||
import com.simsilica.lemur.text.DocumentModel;
|
|
||||||
|
|
||||||
import pp.dialog.Dialog;
|
import pp.dialog.Dialog;
|
||||||
import pp.monopoly.client.MonopolyApp;
|
import pp.monopoly.client.MonopolyApp;
|
||||||
import pp.monopoly.message.client.TradeOffer;
|
import pp.monopoly.game.server.Player;
|
||||||
import pp.monopoly.model.TradeHandler;
|
import pp.monopoly.model.TradeHandler;
|
||||||
import pp.monopoly.model.fields.PropertyField;
|
import pp.monopoly.model.fields.PropertyField;
|
||||||
import pp.monopoly.notification.Sound;
|
import pp.monopoly.notification.Sound;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class TradeMenu extends Dialog {
|
public class TradeMenu extends Dialog {
|
||||||
@ -29,18 +29,15 @@ public class TradeMenu extends Dialog {
|
|||||||
private final TradeHandler tradeHandler;
|
private final TradeHandler tradeHandler;
|
||||||
|
|
||||||
private final Container mainContainer;
|
private final Container mainContainer;
|
||||||
private Geometry background;
|
|
||||||
private Selector<String> leftBuildingSelector, leftSpecialCardSelector;
|
private Selector<String> leftBuildingSelector, leftSpecialCardSelector;
|
||||||
private Selector<String> rightBuildingSelector, rightSpecialCardSelector;
|
private Selector<String> rightBuildingSelector, rightSpecialCardSelector;
|
||||||
private TextField leftSelectionsField, rightSelectionsField;
|
private TextField leftSelectionsField, rightSelectionsField;
|
||||||
private TextField leftCurrencyInput, rightCurrencyInput;
|
private TextField leftCurrencyInput, rightCurrencyInput;
|
||||||
|
private VersionedReference<Set<Integer>> selectionRef; // Reference to track selector changes
|
||||||
|
private String valueSelected = ""; // To keep track of the last selected value
|
||||||
|
private String buildingSelected = "";
|
||||||
|
private String specialCardSelected = "";
|
||||||
|
|
||||||
private VersionedReference<Set<Integer>> leftBuildingRef, rightBuildingRef;
|
|
||||||
private VersionedReference<DocumentModel> leftCurrencyRef, rightCurrencyRef;
|
|
||||||
private VersionedReference<Set<Integer>> leftCardRef, rightCardRef;
|
|
||||||
|
|
||||||
private Set<String> rightselBuildings = new HashSet<>();
|
|
||||||
private Set<String> leftselBuildings = new HashSet<>();
|
|
||||||
|
|
||||||
private static final ColorRGBA TRANSLUCENT_WHITE = new ColorRGBA(1, 1, 1, 0.5f);
|
private static final ColorRGBA TRANSLUCENT_WHITE = new ColorRGBA(1, 1, 1, 0.5f);
|
||||||
|
|
||||||
@ -54,8 +51,6 @@ public class TradeMenu extends Dialog {
|
|||||||
mainContainer = createMainContainer();
|
mainContainer = createMainContainer();
|
||||||
app.getGuiNode().attachChild(mainContainer);
|
app.getGuiNode().attachChild(mainContainer);
|
||||||
positionMainContainer();
|
positionMainContainer();
|
||||||
|
|
||||||
initializeReferences();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Container createMainContainer() {
|
private Container createMainContainer() {
|
||||||
@ -86,17 +81,15 @@ public class TradeMenu extends Dialog {
|
|||||||
|
|
||||||
Container buttons = mainContent.addChild(new Container(new SpringGridLayout()));
|
Container buttons = mainContent.addChild(new Container(new SpringGridLayout()));
|
||||||
Button cancel = new Button("Abbrechen");
|
Button cancel = new Button("Abbrechen");
|
||||||
cancel.addClickCommands(s -> ifTopDialog(() -> {
|
cancel.addClickCommands(s-> ifTopDialog( () -> {
|
||||||
close();
|
close();
|
||||||
app.getGameLogic().playSound(Sound.BUTTON);
|
app.getGameLogic().playSound(Sound.BUTTON);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
Button trade = new Button("Handeln");
|
Button trade = new Button("Handeln");
|
||||||
trade.addClickCommands(s -> ifTopDialog(() -> {
|
trade.addClickCommands(s-> ifTopDialog( () -> {
|
||||||
app.getGameLogic().playSound(Sound.BUTTON);
|
|
||||||
setTrades();
|
|
||||||
app.getGameLogic().send(new TradeOffer(tradeHandler));
|
|
||||||
close();
|
close();
|
||||||
|
app.getGameLogic().playSound(Sound.BUTTON);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
buttons.addChild(cancel);
|
buttons.addChild(cancel);
|
||||||
@ -105,26 +98,6 @@ public class TradeMenu extends Dialog {
|
|||||||
return mainContent;
|
return mainContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setTrades() {
|
|
||||||
tradeHandler.setOfferedAmount(Integer.parseInt(leftCurrencyInput.getText()));
|
|
||||||
tradeHandler.setRequestedAmount(Integer.parseInt(rightCurrencyInput.getText()));
|
|
||||||
tradeHandler.setOfferedJailCards(Integer.parseInt(leftSpecialCardSelector.getSelectedItem()));
|
|
||||||
tradeHandler.setRequestedJailCards(Integer.parseInt(rightSpecialCardSelector.getSelectedItem()));
|
|
||||||
|
|
||||||
Set<PropertyField> offeredProperties = new HashSet<>();
|
|
||||||
for (String propertyString : leftselBuildings) {
|
|
||||||
offeredProperties.add( (PropertyField) app.getGameLogic().getBoardManager().getFieldByName(propertyString));
|
|
||||||
}
|
|
||||||
|
|
||||||
Set<PropertyField> requestedProperties = new HashSet<>();
|
|
||||||
for (String propertyString : rightselBuildings) {
|
|
||||||
requestedProperties.add( (PropertyField) app.getGameLogic().getBoardManager().getFieldByName(propertyString));
|
|
||||||
}
|
|
||||||
|
|
||||||
tradeHandler.setOfferedProperties(offeredProperties);
|
|
||||||
tradeHandler.setRequestedProperties(requestedProperties);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Container createTradeColumn(String label, boolean isLeft) {
|
private Container createTradeColumn(String label, boolean isLeft) {
|
||||||
Container column = new Container(new SpringGridLayout(Axis.Y, Axis.X));
|
Container column = new Container(new SpringGridLayout(Axis.Y, Axis.X));
|
||||||
column.setBackground(new QuadBackgroundComponent(ColorRGBA.White));
|
column.setBackground(new QuadBackgroundComponent(ColorRGBA.White));
|
||||||
@ -135,6 +108,7 @@ public class TradeMenu extends Dialog {
|
|||||||
|
|
||||||
column.addChild(new Label("Gebäude:"));
|
column.addChild(new Label("Gebäude:"));
|
||||||
Selector<String> buildingSelector = createPropertySelector(isLeft);
|
Selector<String> buildingSelector = createPropertySelector(isLeft);
|
||||||
|
buildingSelector.getPopupContainer().setBackground(new QuadBackgroundComponent(ColorRGBA.Orange));
|
||||||
column.addChild(buildingSelector);
|
column.addChild(buildingSelector);
|
||||||
|
|
||||||
column.addChild(new Label("Währung:"));
|
column.addChild(new Label("Währung:"));
|
||||||
@ -142,7 +116,8 @@ public class TradeMenu extends Dialog {
|
|||||||
column.addChild(currencyInput);
|
column.addChild(currencyInput);
|
||||||
|
|
||||||
column.addChild(new Label("Sonderkarten:"));
|
column.addChild(new Label("Sonderkarten:"));
|
||||||
Selector<String> specialCardSelector = createSpecialCardSelector(isLeft);
|
Selector<String> specialCardSelector = createSpecialCardSelector();
|
||||||
|
specialCardSelector.getPopupContainer().setBackground(new QuadBackgroundComponent(ColorRGBA.Orange));
|
||||||
styleSelector(specialCardSelector);
|
styleSelector(specialCardSelector);
|
||||||
column.addChild(specialCardSelector);
|
column.addChild(specialCardSelector);
|
||||||
|
|
||||||
@ -160,10 +135,10 @@ public class TradeMenu extends Dialog {
|
|||||||
return selector;
|
return selector;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Selector<String> createSpecialCardSelector(boolean isLeft) {
|
private Selector<String> createSpecialCardSelector() {
|
||||||
VersionedList<String> numbers = new VersionedList<>();
|
VersionedList<String> numbers = new VersionedList<>();
|
||||||
for (int i = 0; i <= app.getGameLogic().getPlayerHandler().getPlayerById(isLeft ? tradeHandler.getReceiver().getId() : tradeHandler.getSender().getId()).getNumJailCard(); i++) {
|
for (int i = 0; i <= app.getGameLogic().getPlayerHandler().getPlayerById(tradeHandler.getReceiver().getId()).getNumJailCard(); i++) {
|
||||||
numbers.add(i + "");
|
numbers.add(i+"");
|
||||||
}
|
}
|
||||||
Selector<String> selector = new Selector<>(numbers, "glass");
|
Selector<String> selector = new Selector<>(numbers, "glass");
|
||||||
styleSelector(selector);
|
styleSelector(selector);
|
||||||
@ -180,35 +155,64 @@ public class TradeMenu extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private TextField createCurrencyInput() {
|
private TextField createCurrencyInput() {
|
||||||
TextField currencyInput = new TextField("0");
|
TextField currencyInput = new TextField("");
|
||||||
styleTextField(currencyInput);
|
styleTextField(currencyInput);
|
||||||
return currencyInput;
|
return currencyInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the middle section with selection fields and arrows.
|
||||||
|
*
|
||||||
|
* @return The middle section container.
|
||||||
|
*/
|
||||||
private Container createMiddleSection() {
|
private Container createMiddleSection() {
|
||||||
Container middleSection = new Container(new SpringGridLayout(Axis.Y, Axis.X));
|
Container middleSection = new Container(new SpringGridLayout(Axis.Y, Axis.X));
|
||||||
middleSection.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8f, 0.8f, 0.8f, 1.0f)));
|
middleSection.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8f, 0.8f, 0.8f, 1.0f)));
|
||||||
|
|
||||||
|
// Add combined label for the top
|
||||||
Label middleLabelTop = middleSection.addChild(new Label("Gebäude: Währung: Sonderkarten:"));
|
Label middleLabelTop = middleSection.addChild(new Label("Gebäude: Währung: Sonderkarten:"));
|
||||||
middleLabelTop.setFontSize(24);
|
middleLabelTop.setFontSize(24);
|
||||||
middleLabelTop.setInsets(new Insets3f(5, 5, 5, 5));
|
middleLabelTop.setInsets(new Insets3f(5, 5, 5, 5));
|
||||||
|
|
||||||
|
// Add the left selection field (Quellobjekte)
|
||||||
leftSelectionsField = middleSection.addChild(new TextField(""));
|
leftSelectionsField = middleSection.addChild(new TextField(""));
|
||||||
leftSelectionsField.setPreferredSize(new Vector3f(600, 50, 0));
|
leftSelectionsField.setPreferredSize(new Vector3f(600, 50, 0));
|
||||||
|
|
||||||
|
// Add arrows
|
||||||
Label arrows = middleSection.addChild(new Label("⇅"));
|
Label arrows = middleSection.addChild(new Label("⇅"));
|
||||||
arrows.setFontSize(40);
|
arrows.setFontSize(40);
|
||||||
|
|
||||||
|
// Add the right selection field (Zielobjekte)
|
||||||
rightSelectionsField = middleSection.addChild(new TextField(""));
|
rightSelectionsField = middleSection.addChild(new TextField(""));
|
||||||
rightSelectionsField.setPreferredSize(new Vector3f(600, 50, 0));
|
rightSelectionsField.setPreferredSize(new Vector3f(600, 50, 0));
|
||||||
|
|
||||||
|
// Add combined label for the bottom
|
||||||
Label middleLabelBottom = middleSection.addChild(new Label("Gebäude: Währung: Sonderkarten:"));
|
Label middleLabelBottom = middleSection.addChild(new Label("Gebäude: Währung: Sonderkarten:"));
|
||||||
middleLabelBottom.setFontSize(24);
|
middleLabelBottom.setFontSize(24);
|
||||||
middleLabelBottom.setInsets(new Insets3f(5, 5, 5, 5));
|
middleLabelBottom.setInsets(new Insets3f(5, 5, 5, 5));
|
||||||
|
|
||||||
|
// Spacer
|
||||||
|
Label spacer = middleSection.addChild(new Label(""));
|
||||||
|
spacer.setPreferredSize(new Vector3f(1, 50, 0));
|
||||||
|
|
||||||
return middleSection;
|
return middleSection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private TextField createSelectionsField(Container parent, boolean isLeft) {
|
||||||
|
TextField field = new TextField("");
|
||||||
|
field.setPreferredSize(new Vector3f(600, 50, 0));
|
||||||
|
parent.addChild(field);
|
||||||
|
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Label createArrowLabel() {
|
||||||
|
Label arrowLabel = new Label("⇅");
|
||||||
|
arrowLabel.setFontSize(40);
|
||||||
|
return arrowLabel;
|
||||||
|
}
|
||||||
|
|
||||||
private void styleSelector(Selector<String> selector) {
|
private void styleSelector(Selector<String> selector) {
|
||||||
selector.setInsets(new Insets3f(5, 10, 5, 10));
|
selector.setInsets(new Insets3f(5, 10, 5, 10));
|
||||||
selector.setBackground(new QuadBackgroundComponent(ColorRGBA.Black));
|
selector.setBackground(new QuadBackgroundComponent(ColorRGBA.Black));
|
||||||
@ -242,7 +246,7 @@ public class TradeMenu extends Dialog {
|
|||||||
private void addBackgroundImage() {
|
private void addBackgroundImage() {
|
||||||
Texture backgroundImage = app.getAssetManager().loadTexture("Pictures/unibw-Bib2.png");
|
Texture backgroundImage = app.getAssetManager().loadTexture("Pictures/unibw-Bib2.png");
|
||||||
Quad quad = new Quad(app.getCamera().getWidth(), app.getCamera().getHeight());
|
Quad quad = new Quad(app.getCamera().getWidth(), app.getCamera().getHeight());
|
||||||
background = new Geometry("Background", quad);
|
Geometry background = new Geometry("Background", quad);
|
||||||
Material backgroundMaterial = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
|
Material backgroundMaterial = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
|
||||||
backgroundMaterial.setTexture("ColorMap", backgroundImage);
|
backgroundMaterial.setTexture("ColorMap", backgroundImage);
|
||||||
background.setMaterial(backgroundMaterial);
|
background.setMaterial(backgroundMaterial);
|
||||||
@ -250,56 +254,6 @@ public class TradeMenu extends Dialog {
|
|||||||
app.getGuiNode().attachChild(background);
|
app.getGuiNode().attachChild(background);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeReferences() {
|
|
||||||
leftBuildingRef = leftBuildingSelector.getSelectionModel().createReference();
|
|
||||||
leftCardRef = leftSpecialCardSelector.getSelectionModel().createReference();
|
|
||||||
leftCurrencyRef = leftCurrencyInput.getDocumentModel().createReference();
|
|
||||||
|
|
||||||
rightBuildingRef = rightBuildingSelector.getSelectionModel().createReference();
|
|
||||||
rightCardRef = rightSpecialCardSelector.getSelectionModel().createReference();
|
|
||||||
rightCurrencyRef = rightCurrencyInput.getDocumentModel().createReference();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update(float delta) {
|
|
||||||
if (leftBuildingRef.update() || leftCardRef.update() || leftCurrencyRef.update()) {
|
|
||||||
updateSelections(leftSelectionsField, leftBuildingSelector, leftCurrencyInput, leftSpecialCardSelector, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rightBuildingRef.update() || rightCardRef.update() || rightCurrencyRef.update()) {
|
|
||||||
updateSelections(rightSelectionsField, rightBuildingSelector, rightCurrencyInput, rightSpecialCardSelector, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateSelections(TextField target, Selector<String> building, TextField currency, Selector<String> card, boolean isLeft) {
|
|
||||||
StringBuilder buildingText = new StringBuilder();
|
|
||||||
if (isLeft) {
|
|
||||||
if (leftselBuildings.contains(building.getSelectedItem())) {
|
|
||||||
leftselBuildings.remove(building.getSelectedItem()); // Remove if already selected
|
|
||||||
} else {
|
|
||||||
leftselBuildings.add(building.getSelectedItem()); // Add if not already selected
|
|
||||||
}
|
|
||||||
for (String property : leftselBuildings) {
|
|
||||||
buildingText.append(property);
|
|
||||||
buildingText.append(", ");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (rightselBuildings.contains(building.getSelectedItem())) {
|
|
||||||
rightselBuildings.remove(building.getSelectedItem()); // Remove if already selected
|
|
||||||
} else {
|
|
||||||
rightselBuildings.add(building.getSelectedItem()); // Add if not already selected
|
|
||||||
}
|
|
||||||
for (String property : rightselBuildings) {
|
|
||||||
buildingText.append(property);
|
|
||||||
buildingText.append(", ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String currencyText = currency.getText() != null ? currency.getText().trim() : "";
|
|
||||||
String cardText = card.getSelectedItem() != null ? card.getSelectedItem() : "";
|
|
||||||
target.setText(String.join(" | ", buildingText, currencyText, cardText));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void escape() {
|
public void escape() {
|
||||||
new SettingsMenu(app).open();
|
new SettingsMenu(app).open();
|
||||||
@ -308,7 +262,44 @@ public class TradeMenu extends Dialog {
|
|||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
app.getGuiNode().detachChild(mainContainer);
|
app.getGuiNode().detachChild(mainContainer);
|
||||||
app.getGuiNode().detachChild(background);
|
|
||||||
super.close();
|
super.close();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* Updates the dialog periodically, called by the dialog manager.
|
||||||
|
*
|
||||||
|
* @param delta The time elapsed since the last update.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update(float delta) {
|
||||||
|
// Check if the selection has changed
|
||||||
|
// if (selectionRef.update()) {
|
||||||
|
// String selected = playerSelector.getSelectedItem();
|
||||||
|
// if (!selected.equals(lastSelected)) {
|
||||||
|
// lastSelected = selected;
|
||||||
|
// onDropdownSelectionChanged(selected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles dropdown selection changes and updates the trade handler.
|
||||||
|
*
|
||||||
|
* @param selected The selected item from the dropdown.
|
||||||
|
*/
|
||||||
|
/* private void onDropdownSelectionChanged(String selected) {
|
||||||
|
app.getGameLogic().playSound(Sound.BUTTON);
|
||||||
|
int idStart = selected.indexOf("(ID: ") + 5; // Find start of the ID
|
||||||
|
int idEnd = selected.indexOf(")", idStart); // Find end of the ID
|
||||||
|
String idStr = selected.substring(idStart, idEnd); // Extract the ID as a string
|
||||||
|
int playerId = Integer.parseInt(idStr); // Convert the ID to an integer
|
||||||
|
|
||||||
|
// Find the player by ID
|
||||||
|
Player selectedPlayer = app.getGameLogic().getPlayerHandler().getPlayerById(playerId);
|
||||||
|
|
||||||
|
if (selectedPlayer != null) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
@ -85,7 +85,6 @@ public class FoodFieldCard extends Dialog {
|
|||||||
buyButton.addClickCommands(s -> ifTopDialog( () -> {
|
buyButton.addClickCommands(s -> ifTopDialog( () -> {
|
||||||
app.getGameLogic().playSound(Sound.BUTTON);
|
app.getGameLogic().playSound(Sound.BUTTON);
|
||||||
app.getGameLogic().send(new BuyPropertyResponse());
|
app.getGameLogic().send(new BuyPropertyResponse());
|
||||||
close();
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Zentriere das Popup
|
// Zentriere das Popup
|
||||||
|
@ -300,13 +300,13 @@ public class ClientGameLogic implements ServerInterpreter, GameEventBroker {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void received(TradeReply msg) {
|
public void received(TradeReply msg) {
|
||||||
// if (msg.getTradeHandler().getStatus()) {
|
if (msg.getTradeHandler().getStatus()) {
|
||||||
|
|
||||||
// playSound(Sound.TRADE_ACCEPTED);
|
playSound(Sound.TRADE_ACCEPTED);
|
||||||
// } else {
|
} else {
|
||||||
|
|
||||||
// playSound(Sound.TRADE_REJECTED);
|
playSound(Sound.TRADE_REJECTED);
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -316,8 +316,7 @@ public class ClientGameLogic implements ServerInterpreter, GameEventBroker {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void received(TradeRequest msg) {
|
public void received(TradeRequest msg) {
|
||||||
System.out.println("Angebot angekommen");
|
|
||||||
notifyListeners(new PopUpEvent("tradeRequest"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -232,11 +232,11 @@ public class ServerGameLogic implements ClientInterpreter {
|
|||||||
@Override
|
@Override
|
||||||
public void received(TradeOffer msg, int from) {
|
public void received(TradeOffer msg, int from) {
|
||||||
Player sender = playerHandler.getPlayerById(from);
|
Player sender = playerHandler.getPlayerById(from);
|
||||||
Player receiver = msg.getTradeHandler().getReceiver();
|
Player receiver = playerHandler.getPlayerById(msg.getReceiverId());
|
||||||
|
|
||||||
if (sender != null && receiver != null) {
|
if (sender != null && receiver != null) {
|
||||||
LOGGER.log(Level.INFO, "Player {0} offers a trade to player {1}", sender.getName(), receiver.getName());
|
LOGGER.log(Level.INFO, "Player {0} offers a trade to player {1}", sender.getName(), receiver.getName());
|
||||||
send(receiver, new TradeRequest(msg.getTradeHandler()));
|
send(playerHandler.getPlayerById(msg.getReceiverId()), new TradeRequest(msg.getReceiverId(), msg.getTradeHandler()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import pp.monopoly.model.TradeHandler;
|
|||||||
*/
|
*/
|
||||||
@Serializable
|
@Serializable
|
||||||
public class TradeOffer extends ClientMessage{
|
public class TradeOffer extends ClientMessage{
|
||||||
|
private int receiverId;
|
||||||
private TradeHandler tradehandler;
|
private TradeHandler tradehandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -22,10 +23,12 @@ public class TradeOffer extends ClientMessage{
|
|||||||
* @param receiverId the ID of the player receiving the Request
|
* @param receiverId the ID of the player receiving the Request
|
||||||
* @param tradehandler the tradehandler
|
* @param tradehandler the tradehandler
|
||||||
*/
|
*/
|
||||||
public TradeOffer(TradeHandler tradehandler) {
|
public TradeOffer(int receiverId, TradeHandler tradehandler) {
|
||||||
|
this.receiverId = receiverId;
|
||||||
this.tradehandler = tradehandler;
|
this.tradehandler = tradehandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getReceiverId() { return receiverId; }
|
||||||
public TradeHandler getTradeHandler() { return tradehandler; }
|
public TradeHandler getTradeHandler() { return tradehandler; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -9,6 +9,7 @@ import pp.monopoly.model.TradeHandler;
|
|||||||
*/
|
*/
|
||||||
@Serializable
|
@Serializable
|
||||||
public class TradeRequest extends ServerMessage{
|
public class TradeRequest extends ServerMessage{
|
||||||
|
private int receiverId;
|
||||||
private TradeHandler tradehandler;
|
private TradeHandler tradehandler;
|
||||||
|
|
||||||
|
|
||||||
@ -23,10 +24,12 @@ public class TradeRequest extends ServerMessage{
|
|||||||
* @param receiverId the ID of the player receiving the Request
|
* @param receiverId the ID of the player receiving the Request
|
||||||
* @param tradehandler the tradehandler
|
* @param tradehandler the tradehandler
|
||||||
*/
|
*/
|
||||||
public TradeRequest(TradeHandler tradehandler) {
|
public TradeRequest(int receiverId, TradeHandler tradehandler) {
|
||||||
|
this.receiverId = receiverId;
|
||||||
this.tradehandler = tradehandler;
|
this.tradehandler = tradehandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getReceiverId() { return receiverId; }
|
||||||
public TradeHandler getTradeHandler() { return tradehandler; }
|
public TradeHandler getTradeHandler() { return tradehandler; }
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,30 +3,23 @@ package pp.monopoly.model;
|
|||||||
import pp.monopoly.game.server.Player;
|
import pp.monopoly.game.server.Player;
|
||||||
import pp.monopoly.model.fields.PropertyField;
|
import pp.monopoly.model.fields.PropertyField;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import com.jme3.network.serializing.Serializable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles a single trade between two players.
|
* Handles a single trade between two players.
|
||||||
* Encapsulates trade details, validation, acceptance, and rejection.
|
* Encapsulates trade details, validation, acceptance, and rejection.
|
||||||
*/
|
*/
|
||||||
@Serializable
|
|
||||||
public class TradeHandler {
|
public class TradeHandler {
|
||||||
|
|
||||||
private final Player sender;
|
private final Player sender;
|
||||||
private Player receiver;
|
private Player receiver;
|
||||||
private int offeredAmount;
|
private int offeredAmount;
|
||||||
private Set<PropertyField> offeredProperties = new HashSet<>();
|
private List<PropertyField> offeredProperties;
|
||||||
private int offeredJailCards;
|
private int offeredJailCards;
|
||||||
private int requestedAmount;
|
private int requestedAmount;
|
||||||
private Set<PropertyField> requestedProperties = new HashSet<>();
|
private List<PropertyField> requestedProperties;
|
||||||
private int requestedJailCards;
|
private int requestedJailCards;
|
||||||
|
private Boolean status = null;
|
||||||
private TradeHandler() {
|
|
||||||
sender = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a TradeHandler for a single trade instance.
|
* Constructs a TradeHandler for a single trade instance.
|
||||||
@ -40,8 +33,8 @@ public class TradeHandler {
|
|||||||
* @param requestedProperties the properties requested from the receiver
|
* @param requestedProperties the properties requested from the receiver
|
||||||
* @param requestedJailCards the jail cards requested from the receiver
|
* @param requestedJailCards the jail cards requested from the receiver
|
||||||
*/
|
*/
|
||||||
public TradeHandler(Player sender, Player receiver, int offeredAmount, Set<PropertyField> offeredProperties,
|
public TradeHandler(Player sender, Player receiver, int offeredAmount, List<PropertyField> offeredProperties,
|
||||||
int offeredJailCards, int requestedAmount, Set<PropertyField> requestedProperties, int requestedJailCards) {
|
int offeredJailCards, int requestedAmount, List<PropertyField> requestedProperties, int requestedJailCards) {
|
||||||
this.sender = sender;
|
this.sender = sender;
|
||||||
this.receiver = receiver;
|
this.receiver = receiver;
|
||||||
this.offeredAmount = offeredAmount;
|
this.offeredAmount = offeredAmount;
|
||||||
@ -76,7 +69,7 @@ public class TradeHandler {
|
|||||||
return offeredJailCards;
|
return offeredJailCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<PropertyField> getOfferedProperties() {
|
public List<PropertyField> getOfferedProperties() {
|
||||||
return offeredProperties;
|
return offeredProperties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +85,7 @@ public class TradeHandler {
|
|||||||
return requestedJailCards;
|
return requestedJailCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<PropertyField> getRequestedProperties() {
|
public List<PropertyField> getRequestedProperties() {
|
||||||
return requestedProperties;
|
return requestedProperties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,6 +93,10 @@ public class TradeHandler {
|
|||||||
return sender;
|
return sender;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Boolean getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initiates the trade and validates its terms.
|
* Initiates the trade and validates its terms.
|
||||||
*
|
*
|
||||||
@ -237,7 +234,7 @@ public class TradeHandler {
|
|||||||
this.offeredJailCards = offeredJailCards;
|
this.offeredJailCards = offeredJailCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOfferedProperties(Set<PropertyField> offeredProperties) {
|
public void setOfferedProperties(List<PropertyField> offeredProperties) {
|
||||||
this.offeredProperties = offeredProperties;
|
this.offeredProperties = offeredProperties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,7 +250,7 @@ public class TradeHandler {
|
|||||||
this.requestedJailCards = requestedJailCards;
|
this.requestedJailCards = requestedJailCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRequestedProperties(Set<PropertyField> requestedProperties) {
|
public void setRequestedProperties(List<PropertyField> requestedProperties) {
|
||||||
this.requestedProperties = requestedProperties;
|
this.requestedProperties = requestedProperties;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,15 +72,6 @@ public class BoardManager {
|
|||||||
return fields;
|
return fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Field getFieldByName(String name) {
|
|
||||||
for (Field field : board) {
|
|
||||||
if (field.getName().equals(name)) {
|
|
||||||
return field;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new NoSuchElementException();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method to find the Field at specific index
|
* Method to find the Field at specific index
|
||||||
|
@ -44,13 +44,10 @@ import pp.monopoly.message.server.GameStart;
|
|||||||
import pp.monopoly.message.server.NextPlayerTurn;
|
import pp.monopoly.message.server.NextPlayerTurn;
|
||||||
import pp.monopoly.message.server.PlayerStatusUpdate;
|
import pp.monopoly.message.server.PlayerStatusUpdate;
|
||||||
import pp.monopoly.message.server.ServerMessage;
|
import pp.monopoly.message.server.ServerMessage;
|
||||||
import pp.monopoly.message.server.TradeReply;
|
|
||||||
import pp.monopoly.message.server.TradeRequest;
|
|
||||||
import pp.monopoly.message.server.ViewAssetsResponse;
|
import pp.monopoly.message.server.ViewAssetsResponse;
|
||||||
import pp.monopoly.model.Figure;
|
import pp.monopoly.model.Figure;
|
||||||
import pp.monopoly.model.IntPoint;
|
import pp.monopoly.model.IntPoint;
|
||||||
import pp.monopoly.model.LimitedLinkedList;
|
import pp.monopoly.model.LimitedLinkedList;
|
||||||
import pp.monopoly.model.TradeHandler;
|
|
||||||
import pp.monopoly.model.fields.BoardManager;
|
import pp.monopoly.model.fields.BoardManager;
|
||||||
import pp.monopoly.model.fields.BuildingProperty;
|
import pp.monopoly.model.fields.BuildingProperty;
|
||||||
import pp.monopoly.model.fields.EventField;
|
import pp.monopoly.model.fields.EventField;
|
||||||
@ -167,9 +164,6 @@ public class MonopolyServer implements MessageListener<HostedConnection>, Connec
|
|||||||
Serializer.registerClass(EventField.class);
|
Serializer.registerClass(EventField.class);
|
||||||
Serializer.registerClass(GulagField.class);
|
Serializer.registerClass(GulagField.class);
|
||||||
Serializer.registerClass(FineField.class);
|
Serializer.registerClass(FineField.class);
|
||||||
Serializer.registerClass(TradeRequest.class);
|
|
||||||
Serializer.registerClass(TradeReply.class);
|
|
||||||
Serializer.registerClass(TradeHandler.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerListeners() {
|
private void registerListeners() {
|
||||||
|
Loading…
Reference in New Issue
Block a user