refactor PlayerColor

fixed default playermodel selection
This commit is contained in:
Johannes Schmelz 2024-12-03 12:07:09 +01:00
parent 09ea8a046e
commit 1f37eb9962
4 changed files with 46 additions and 90 deletions

View File

@ -25,7 +25,7 @@ import com.simsilica.lemur.style.ElementId;
import pp.dialog.Dialog; import pp.dialog.Dialog;
import pp.monopoly.client.MonopolyApp; import pp.monopoly.client.MonopolyApp;
import pp.monopoly.game.server.PlayerColor; import pp.monopoly.game.server.Player;
import pp.monopoly.message.client.PlayerReady; import pp.monopoly.message.client.PlayerReady;
import pp.monopoly.notification.Sound; import pp.monopoly.notification.Sound;
@ -67,6 +67,9 @@ public class LobbyMenu extends Dialog {
/** Selected player figure. */ /** Selected player figure. */
private String figure; private String figure;
private VersionedReference<Set<Integer>> selectionRef;
private Selector<String> figureDropdown;
/** /**
* Constructs the lobby menu for player configuration. * Constructs the lobby menu for player configuration.
* *
@ -142,7 +145,7 @@ public class LobbyMenu extends Dialog {
figureDropdownContainer.setBackground(null); figureDropdownContainer.setBackground(null);
VersionedList<String> figures = new VersionedList<>(); VersionedList<String> figures = new VersionedList<>();
figures.add("Laptop"); figures.add("Computer");
figures.add("Flugzeug"); figures.add("Flugzeug");
figures.add("Jägermeister"); figures.add("Jägermeister");
figures.add("Katze"); figures.add("Katze");
@ -150,8 +153,7 @@ public class LobbyMenu extends Dialog {
figures.add("Handyholster"); figures.add("Handyholster");
figureDropdown = new Selector<>(figures, "glass");
Selector<String> figureDropdown = new Selector<>(figures, "glass");
figureDropdown.setBackground(new QuadBackgroundComponent(ColorRGBA.DarkGray)); figureDropdown.setBackground(new QuadBackgroundComponent(ColorRGBA.DarkGray));
figureDropdown.setPreferredSize(new Vector3f(100, 20, 0)); figureDropdown.setPreferredSize(new Vector3f(100, 20, 0));
figureDropdownContainer.addChild(figureDropdown); figureDropdownContainer.addChild(figureDropdown);
@ -159,10 +161,12 @@ public class LobbyMenu extends Dialog {
Vector3f dimens2 = figureDropdown.getPopupContainer().getPreferredSize(); Vector3f dimens2 = figureDropdown.getPopupContainer().getPreferredSize();
dimens2.setX( dimens.getX() ); dimens2.setX( dimens.getX() );
figureDropdown.getPopupContainer().setPreferredSize(new Vector3f(200,200,5)); figureDropdown.getPopupContainer().setPreferredSize(new Vector3f(200,200,5));
figureDropdown.getSelectionModel().setSelection(0);
figure = "Laptop";
addSelectionActionListener(figureDropdown, this::onDropdownSelectionChanged); // Create selection ref for updating
selectionRef = figureDropdown.getSelectionModel().createReference();
// Set default
figureDropdown.getSelectionModel().setSelection(0);
onDropdownSelectionChanged(figureDropdown);
Container buttonContainer = menuContainer.addChild(new Container(new SpringGridLayout(Axis.X, Axis.Y))); Container buttonContainer = menuContainer.addChild(new Container(new SpringGridLayout(Axis.X, Axis.Y)));
buttonContainer.setPreferredSize(new Vector3f(100, 40, 0)); buttonContainer.setPreferredSize(new Vector3f(100, 40, 0));
@ -216,6 +220,7 @@ public class LobbyMenu extends Dialog {
1 // Höhere Z-Ebene für den Vordergrund 1 // Höhere Z-Ebene für den Vordergrund
); );
app.getGuiNode().attachChild(menuContainer); app.getGuiNode().attachChild(menuContainer);
} }
@ -247,31 +252,12 @@ public class LobbyMenu extends Dialog {
// Create a material with a solid color // Create a material with a solid color
Material material = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md"); Material material = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
material.setColor("Color", idToColor()); // Set the desired color material.setColor("Color", Player.getColor(app.getId()).getColor()); // Set the desired color
circleGeometry.setMaterial(material); circleGeometry.setMaterial(material);
return circleGeometry; return circleGeometry;
} }
/**
* Maps the player's ID to a corresponding color.
*
* @return the color associated with the player's ID
*/
private ColorRGBA idToColor() {
switch (app.getId()+1) {
case 1: return PlayerColor.CYAN.getColor();
case 2: return PlayerColor.YELLOW.getColor();
case 3: return PlayerColor.RED.getColor();
case 4: return PlayerColor.PINK.getColor();
case 5: return PlayerColor.GREEN.getColor();
case 6: return PlayerColor.PURPLE.getColor();
default:
return null;
}
}
/** /**
* Toggles the player's ready state and sends the configuration to the server. * Toggles the player's ready state and sends the configuration to the server.
*/ */
@ -287,42 +273,11 @@ public class LobbyMenu extends Dialog {
new SettingsMenu(app).open(); new SettingsMenu(app).open();
} }
/** @Override
* Adds a custom action listener to a dropdown selector. public void update(float tpf) {
* if (selectionRef.update()) {
* @param selector the selector to add the listener to onDropdownSelectionChanged(figureDropdown);
* @param listener the action to perform when a selection changes }
*/
private void addSelectionActionListener(Selector<String> selector, SelectionActionListener<String> listener) {
VersionedReference<Set<Integer>> selectionRef = selector.getSelectionModel().createReference();
app.getStateManager().attach(new BaseAppState() {
@Override
public void update(float tpf) {
if (selectionRef.update()) {
String selected = selectionRef.get().toString();
listener.onSelectionChanged(selected);
}
}
@Override
protected void initialize(Application app) {
}
@Override
protected void cleanup(Application app) {
}
@Override
protected void onEnable() {
}
@Override
protected void onDisable() {
}
});
} }
/** /**
@ -330,30 +285,20 @@ public class LobbyMenu extends Dialog {
* *
* @param selected the selected figure * @param selected the selected figure
*/ */
private void onDropdownSelectionChanged(String selected) { private void onDropdownSelectionChanged(Selector<String> selector) {
app.getGameLogic().playSound(Sound.BUTTON); app.getGameLogic().playSound(Sound.BUTTON);
switch (selected) { switch (selector.getSelectedItem()) {
case "[0]": case "Jägermeister":
figure = "Computer";
break;
case "[1]":
figure = "Flugzeug";
break;
case "[2]":
figure = "Jaegermeister"; figure = "Jaegermeister";
break; break;
case "[3]": case "Handyholster":
figure = "Katze";
break;
case "[4]":
figure = "OOP";
break;
case "[5]":
figure = "Holster"; figure = "Holster";
break; break;
default: default:
break; figure = selector.getSelectedItem();
break;
} }
System.out.println("FIGUR:::::"+figure);
} }
/** /**

View File

@ -133,7 +133,7 @@ public class Toolbar extends Dialog implements GameEventListener {
// Spielerfarbe abrufen // Spielerfarbe abrufen
Player currentPlayer = playerHandler.getPlayerById(app.getId()); Player currentPlayer = playerHandler.getPlayerById(app.getId());
ColorRGBA playerColor = currentPlayer.getColor().getColor(); ColorRGBA playerColor = Player.getColor(currentPlayer.getId()).getColor();
// Oberer Balken // Oberer Balken
Container playerColorBar = new Container(); Container playerColorBar = new Container();
@ -381,7 +381,7 @@ public class Toolbar extends Dialog implements GameEventListener {
for (Player player : playerHandler.getPlayers()) { for (Player player : playerHandler.getPlayers()) {
if (player.getId() != app.getId()) { if (player.getId() != app.getId()) {
// Spielerfarbe abrufen // Spielerfarbe abrufen
ColorRGBA playerColor = (player.getColor().getColor()); ColorRGBA playerColor = (Player.getColor(player.getId()).getColor());
// Label für den Spieler erstellen // Label für den Spieler erstellen
Label playerLabel = new Label( Label playerLabel = new Label(

View File

@ -90,7 +90,7 @@ public class Player implements FieldVisitor<Void>{
return figure; return figure;
} }
public PlayerColor getColor() { public static PlayerColor getColor(int id) {
switch ((id%6)+1) { switch ((id%6)+1) {
case 1: return PlayerColor.CYAN; case 1: return PlayerColor.CYAN;
case 2: return PlayerColor.YELLOW; case 2: return PlayerColor.YELLOW;

View File

@ -6,22 +6,24 @@ import com.jme3.math.ColorRGBA;
* Enum representing six distinct colors for players in the game. * Enum representing six distinct colors for players in the game.
*/ */
public enum PlayerColor { public enum PlayerColor {
CYAN(new ColorRGBA(1 / 255f, 190 / 255f, 254 / 255f, 1)), CYAN(new ColorRGBA(1 / 255f, 190 / 255f, 254 / 255f, 1), "Cyan"),
YELLOW(new ColorRGBA(255 / 255f, 255 / 255f, 0 / 255f, 1)), YELLOW(new ColorRGBA(255 / 255f, 255 / 255f, 0 / 255f, 1), "Gelb"),
RED(new ColorRGBA(255 / 255f, 0 / 255f, 0 / 255f, 1)), RED(new ColorRGBA(255 / 255f, 0 / 255f, 0 / 255f, 1), "Rot"),
PINK(new ColorRGBA(255 / 255f, 77 / 255f, 166 / 255f, 1)), PINK(new ColorRGBA(255 / 255f, 77 / 255f, 166 / 255f, 1), "Pink"),
GREEN(new ColorRGBA(0 / 255f, 204 / 255f, 0 / 255f, 1)), GREEN(new ColorRGBA(0 / 255f, 204 / 255f, 0 / 255f, 1), "Grün"),
PURPLE(new ColorRGBA(143 / 255f, 0 / 255f, 255 / 255f, 1)); PURPLE(new ColorRGBA(143 / 255f, 0 / 255f, 255 / 255f, 1), "Lila");
private final ColorRGBA color; private final ColorRGBA color;
private final String colorName;
/** /**
* Constructs a PlayerColor with the specified ColorRGBA value. * Constructs a PlayerColor with the specified ColorRGBA value.
* *
* @param color the ColorRGBA value associated with the player color * @param color the ColorRGBA value associated with the player color
*/ */
PlayerColor(ColorRGBA color) { PlayerColor(ColorRGBA color, String colorName) {
this.color = color; this.color = color;
this.colorName = colorName;
} }
/** /**
@ -32,4 +34,13 @@ public enum PlayerColor {
public ColorRGBA getColor() { public ColorRGBA getColor() {
return color; return color;
} }
/**
* Gets the Name of the Color
*
* @return a String with re corresponing name
*/
public String getColorName() {
return colorName;
}
} }