mirror of
https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02.git
synced 2025-02-22 22:49:36 +01:00
send Trades
This commit is contained in:
parent
2c536f32cf
commit
b681b13468
@ -6,6 +6,7 @@ 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;
|
||||||
@ -150,6 +151,8 @@ 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,8 +1,5 @@
|
|||||||
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;
|
||||||
@ -15,13 +12,16 @@ 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.game.server.Player;
|
import pp.monopoly.message.client.TradeOffer;
|
||||||
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,15 +29,18 @@ 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);
|
||||||
|
|
||||||
@ -51,6 +54,8 @@ 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() {
|
||||||
@ -81,15 +86,17 @@ 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(() -> {
|
||||||
close();
|
|
||||||
app.getGameLogic().playSound(Sound.BUTTON);
|
app.getGameLogic().playSound(Sound.BUTTON);
|
||||||
|
setTrades();
|
||||||
|
app.getGameLogic().send(new TradeOffer(tradeHandler));
|
||||||
|
close();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
buttons.addChild(cancel);
|
buttons.addChild(cancel);
|
||||||
@ -98,6 +105,26 @@ 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));
|
||||||
@ -108,7 +135,6 @@ 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:"));
|
||||||
@ -116,8 +142,7 @@ 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();
|
Selector<String> specialCardSelector = createSpecialCardSelector(isLeft);
|
||||||
specialCardSelector.getPopupContainer().setBackground(new QuadBackgroundComponent(ColorRGBA.Orange));
|
|
||||||
styleSelector(specialCardSelector);
|
styleSelector(specialCardSelector);
|
||||||
column.addChild(specialCardSelector);
|
column.addChild(specialCardSelector);
|
||||||
|
|
||||||
@ -135,10 +160,10 @@ public class TradeMenu extends Dialog {
|
|||||||
return selector;
|
return selector;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Selector<String> createSpecialCardSelector() {
|
private Selector<String> createSpecialCardSelector(boolean isLeft) {
|
||||||
VersionedList<String> numbers = new VersionedList<>();
|
VersionedList<String> numbers = new VersionedList<>();
|
||||||
for (int i = 0; i <= app.getGameLogic().getPlayerHandler().getPlayerById(tradeHandler.getReceiver().getId()).getNumJailCard(); i++) {
|
for (int i = 0; i <= app.getGameLogic().getPlayerHandler().getPlayerById(isLeft ? tradeHandler.getReceiver().getId() : tradeHandler.getSender().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);
|
||||||
@ -147,72 +172,43 @@ public class TradeMenu extends Dialog {
|
|||||||
|
|
||||||
private Iterable<PropertyField> getPropertyFields(boolean isLeft) {
|
private Iterable<PropertyField> getPropertyFields(boolean isLeft) {
|
||||||
return app.getGameLogic()
|
return app.getGameLogic()
|
||||||
.getBoardManager()
|
.getBoardManager()
|
||||||
.getPropertyFields(app.getGameLogic()
|
.getPropertyFields(app.getGameLogic()
|
||||||
.getPlayerHandler()
|
.getPlayerHandler()
|
||||||
.getPlayerById(isLeft ? tradeHandler.getReceiver().getId() : tradeHandler.getSender().getId())
|
.getPlayerById(isLeft ? tradeHandler.getReceiver().getId() : tradeHandler.getSender().getId())
|
||||||
.getProperties());
|
.getProperties());
|
||||||
}
|
}
|
||||||
|
|
||||||
private TextField createCurrencyInput() {
|
private TextField createCurrencyInput() {
|
||||||
TextField currencyInput = new TextField("");
|
TextField currencyInput = new TextField("0");
|
||||||
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));
|
||||||
@ -246,7 +242,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());
|
||||||
Geometry background = new Geometry("Background", quad);
|
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);
|
||||||
@ -254,6 +250,56 @@ 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();
|
||||||
@ -262,44 +308,7 @@ 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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
@ -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,7 +316,8 @@ 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 = playerHandler.getPlayerById(msg.getReceiverId());
|
Player receiver = msg.getTradeHandler().getReceiver();
|
||||||
|
|
||||||
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(playerHandler.getPlayerById(msg.getReceiverId()), new TradeRequest(msg.getReceiverId(), msg.getTradeHandler()));
|
send(receiver, new TradeRequest(msg.getTradeHandler()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@ 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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -23,12 +22,10 @@ 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(int receiverId, TradeHandler tradehandler) {
|
public TradeOffer(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,7 +9,6 @@ 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;
|
||||||
|
|
||||||
|
|
||||||
@ -24,12 +23,10 @@ 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(int receiverId, TradeHandler tradehandler) {
|
public TradeRequest(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,23 +3,30 @@ 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.List;
|
import java.util.HashSet;
|
||||||
|
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 List<PropertyField> offeredProperties;
|
private Set<PropertyField> offeredProperties = new HashSet<>();
|
||||||
private int offeredJailCards;
|
private int offeredJailCards;
|
||||||
private int requestedAmount;
|
private int requestedAmount;
|
||||||
private List<PropertyField> requestedProperties;
|
private Set<PropertyField> requestedProperties = new HashSet<>();
|
||||||
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.
|
||||||
@ -33,8 +40,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, List<PropertyField> offeredProperties,
|
public TradeHandler(Player sender, Player receiver, int offeredAmount, Set<PropertyField> offeredProperties,
|
||||||
int offeredJailCards, int requestedAmount, List<PropertyField> requestedProperties, int requestedJailCards) {
|
int offeredJailCards, int requestedAmount, Set<PropertyField> requestedProperties, int requestedJailCards) {
|
||||||
this.sender = sender;
|
this.sender = sender;
|
||||||
this.receiver = receiver;
|
this.receiver = receiver;
|
||||||
this.offeredAmount = offeredAmount;
|
this.offeredAmount = offeredAmount;
|
||||||
@ -69,7 +76,7 @@ public class TradeHandler {
|
|||||||
return offeredJailCards;
|
return offeredJailCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<PropertyField> getOfferedProperties() {
|
public Set<PropertyField> getOfferedProperties() {
|
||||||
return offeredProperties;
|
return offeredProperties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +92,7 @@ public class TradeHandler {
|
|||||||
return requestedJailCards;
|
return requestedJailCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<PropertyField> getRequestedProperties() {
|
public Set<PropertyField> getRequestedProperties() {
|
||||||
return requestedProperties;
|
return requestedProperties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,10 +100,6 @@ 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.
|
||||||
*
|
*
|
||||||
@ -234,7 +237,7 @@ public class TradeHandler {
|
|||||||
this.offeredJailCards = offeredJailCards;
|
this.offeredJailCards = offeredJailCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOfferedProperties(List<PropertyField> offeredProperties) {
|
public void setOfferedProperties(Set<PropertyField> offeredProperties) {
|
||||||
this.offeredProperties = offeredProperties;
|
this.offeredProperties = offeredProperties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,7 +253,7 @@ public class TradeHandler {
|
|||||||
this.requestedJailCards = requestedJailCards;
|
this.requestedJailCards = requestedJailCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRequestedProperties(List<PropertyField> requestedProperties) {
|
public void setRequestedProperties(Set<PropertyField> requestedProperties) {
|
||||||
this.requestedProperties = requestedProperties;
|
this.requestedProperties = requestedProperties;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,6 +72,15 @@ 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,10 +44,13 @@ 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;
|
||||||
@ -164,6 +167,9 @@ 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