added display of 'colorÃ' to playerName

This commit is contained in:
Cedric Beck
2024-11-28 17:29:59 +01:00
parent 7da388af37
commit 3dcdbdf489
6 changed files with 120 additions and 57 deletions

View File

@@ -26,10 +26,7 @@ public class GuiHandler {
private Map<UUID, BonusCard> uuidBonusCardMap;
private Map<BonusCard, CardControl> bonusCardControlMap;
private Map<BonusCard, Integer> bonusCardIntegerMap;
private BitmapFont playerFont;
private Node playerNameNode;
private List<Color> playerOrder;
Map<Color, String> colorNameMap;
private static final Vector3f START = new Vector3f(-1.8f,-3.5f,0);
private static final Vector3f MARGIN = new Vector3f(1.8f,0,0);
@@ -41,6 +38,7 @@ public class GuiHandler {
private Set<CardControl> selectableCards = new HashSet<>();
private BonusCard cardSelect = null;
private PlayerNameHandler playerNameHandler;
public GuiHandler(MdgaApp app, Texture2D backTexture) {
this.app = app;
@@ -55,12 +53,8 @@ public GuiHandler(MdgaApp app, Texture2D backTexture) {
public void init(){
cardLayer = new CardLayer(fpp, cardLayerCamera, backTexture);
app.getStateManager().attach(cardLayer);
playerFont = app.getAssetManager().loadFont("Fonts/Gunplay.fnt");
playerNameNode = new Node("player name node");
app.getGuiNode().attachChild(playerNameNode);
playerOrder = new ArrayList<>();
colorNameMap = new HashMap<>();
diceControl = createDice();
playerNameHandler = new PlayerNameHandler(app.getGuiNode(), app.getAssetManager(), app.getContext().getSettings());
}
@@ -145,58 +139,12 @@ private CardControl createCard(Asset card, Vector3f pos){
return control;
}
private void drawPlayers(){
playerNameNode.detachAllChildren();
float paddingTop = 10;
float paddingLeft = 15;
float margin = 35;
for(int i = 0; i < playerOrder.size(); i++) {
Color color = playerOrder.get(i);
if(!colorNameMap.containsKey(color)) throw new RuntimeException(color + " isn't mapped to a name");
String name = colorNameMap.get(color);
renderName(name, paddingTop + margin * i, paddingLeft, i == 0);
}
}
private void renderName(String name, float paddingTop, float paddingLeft, boolean first){
BitmapText hudText = new BitmapText(playerFont);
//renderedSize = 45
hudText.setSize(28);
hudText.setColor(first ? ColorRGBA.Blue : ColorRGBA.White);
hudText.setText(name);
int screenHeight = app.getContext().getSettings().getHeight();
hudText.setLocalTranslation(paddingLeft, screenHeight - paddingTop, 0);
playerNameNode.attachChild(hudText);
}
public void setPlayers(List<String> names, List<Color> colors){
if(names.size() != colors.size()) throw new RuntimeException("names and colors are not the same size");
for(int i = 0; i < names.size(); i++){
colorNameMap.put(colors.get(i), names.get(i));
}
this.playerOrder = new ArrayList<>(colors);
drawPlayers();
}
public void addPlayer(Color color, String name){
colorNameMap.put(color, name);
playerOrder.add(color);
drawPlayers();
playerNameHandler.addPlayer(color, name);
}
public void setActivePlayer(Color color){
Color lastFirst = playerOrder.remove(0);
playerOrder.remove(color);
playerOrder.add(0,color);
playerOrder.add(lastFirst);
drawPlayers();
playerNameHandler.setActivePlayer(color);
}
private Camera createOverlayCam(){

View File

@@ -0,0 +1,115 @@
package pp.mdga.client.gui;
import com.jme3.asset.AssetManager;
import com.jme3.font.BitmapFont;
import com.jme3.font.BitmapText;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.scene.shape.Sphere;
import com.jme3.system.AppSettings;
import com.jme3.ui.Picture;
import pp.mdga.client.Asset;
import pp.mdga.game.Color;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.jme3.material.Materials.UNSHADED;
public class PlayerNameHandler {
private final BitmapFont playerFont;
private final Node playerNameNode;
private final List<Color> playerOrder;
private final Map<Color, String> colorNameMap;
private final AppSettings appSettings;
private final AssetManager assetManager;
public PlayerNameHandler(Node guiNode, AssetManager assetManager, AppSettings appSettings){
playerFont = assetManager.loadFont("Fonts/Gunplay.fnt");
playerNameNode = new Node("player name node");
playerOrder = new ArrayList<>();
colorNameMap = new HashMap<>();
guiNode.attachChild(playerNameNode);
this.appSettings = appSettings;
this.assetManager = assetManager;
}
private void drawPlayers(){
playerNameNode.detachAllChildren();
float paddingTop = 50;
float paddingLeft = 30;
float margin = 60;
for(int i = 0; i < playerOrder.size(); i++) {
Color color = playerOrder.get(i);
if(!colorNameMap.containsKey(color)) throw new RuntimeException(color + " isn't mapped to a name");
Node nameParent = new Node("nameParent");
nameParent.attachChild(createName(colorNameMap.get(color), paddingLeft, i == 0));
nameParent.attachChild(createColor(color));
nameParent.setLocalTranslation(50,appSettings.getWindowHeight()-paddingTop-margin*i,0);
playerNameNode.attachChild(nameParent);
}
}
private String imagePath(Color color){
String root = "./Images/name_pictures/";
return switch(color){
case ARMY -> root+"HEER_IMAGE.png";
case NAVY -> root+"MARINE_IMAGE.png";
case CYBER -> root+"CIR_IMAGE.png";
case AIRFORCE -> root+"LW_IMAGE.png";
};
}
private Spatial createColor(Color color) {
Picture pic = new Picture("HUD Picture");
pic.setImage(assetManager, imagePath(color), true);
pic.setWidth(50);
pic.setHeight(50);
pic.setPosition(-pic.getWidth()/2,-pic.getHeight()/2);
return pic;
}
private ColorRGBA playerColorToColorRGBA(Color color){
return switch (color){
case ARMY -> ColorRGBA.Green;
case NAVY -> ColorRGBA.Blue;
case CYBER -> ColorRGBA.Orange;
case AIRFORCE -> ColorRGBA.Black;
};
}
private Spatial createName(String name, float paddingLeft, boolean first){
BitmapText hudText = new BitmapText(playerFont);
//renderedSize = 45
hudText.setSize(28);
hudText.setColor(first ? ColorRGBA.Blue : ColorRGBA.White);
hudText.setText(name);
hudText.setLocalTranslation(paddingLeft,hudText.getHeight()/2, 0);
return hudText;
}
public void addPlayer(Color color, String name){
colorNameMap.put(color, name);
playerOrder.add(color);
drawPlayers();
}
public void setActivePlayer(Color color) {
Color lastFirst = playerOrder.remove(0);
playerOrder.remove(color);
playerOrder.add(0, color);
playerOrder.add(lastFirst);
drawPlayers();
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 894 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 866 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 857 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 842 KiB