added activePlayer+diceNum text display

This commit is contained in:
Cedric Beck
2024-11-29 17:26:04 +01:00
parent 2099e02567
commit 220d8ff47e
6 changed files with 162 additions and 25 deletions

View File

@@ -96,8 +96,9 @@ else if(boardSelect != null) {
} }
if(name.equals("Test") &&isPressed){ if(name.equals("Test") &&isPressed){
if(app.getView() instanceof GameView gameView){ if(app.getView() instanceof GameView gameView){
gameView.getGuiHandler().test2();
gameView.getGuiHandler().showDice(); // gameView.getGuiHandler().showDice();
// gameView.getBoardHandler().showDice(Color.AIRFORCE); // gameView.getBoardHandler().showDice(Color.AIRFORCE);
} }
} }

View File

@@ -24,7 +24,7 @@ public class MdgaApp extends SimpleApplication {
MdgaView view = null; MdgaView view = null;
private MdgaState state = MdgaState.GAME; private MdgaState state = MdgaState.GAME;
private static float resolutionFactor = 1.8f; private static float resolutionFactor = 1.2f;
public static void main(String[] args) { public static void main(String[] args) {
AppSettings settings = new AppSettings(true); AppSettings settings = new AppSettings(true);

View File

@@ -8,46 +8,110 @@
import com.jme3.scene.Node; import com.jme3.scene.Node;
import com.jme3.system.AppSettings; import com.jme3.system.AppSettings;
import pp.mdga.client.Asset; import pp.mdga.client.Asset;
import pp.mdga.game.Color;
public class ActionTextHandler { public class ActionTextHandler {
private Node root; private Node root;
private BitmapFont font;
private AppSettings appSettings;
public ActionTextHandler(AppSettings appSettings, AssetManager assetManager, Node guiNode){ public ActionTextHandler(AppSettings appSettings, AssetManager assetManager, Node guiNode){
root = new Node("actionTextRoot"); root = new Node("actionTextRoot");
guiNode.attachChild(root); guiNode.attachChild(root);
root.setLocalTranslation(center(appSettings.getWidth(), appSettings.getHeight(), Vector3f.ZERO)); root.setLocalTranslation(center(appSettings.getWidth(), appSettings.getHeight(), Vector3f.ZERO));
BitmapFont playerFont = assetManager.loadFont("Fonts/Gunplay.fnt"); font = assetManager.loadFont("Fonts/Gunplay.fnt");
this.appSettings = appSettings;
root.attachChild(createTextWithSpacing(playerFont, "TEST", 20f, 250));
} }
public static Node createTextWithSpacing(BitmapFont font, String text, float spacing, float size) { private Node createTextWithSpacing(String[] textArr, float spacing, float size, ColorRGBA[] colorArr) {
if(textArr.length != colorArr.length) throw new RuntimeException("text and color are not the same length");
Node textNode = new Node("TextWithSpacing"); Node textNode = new Node("TextWithSpacing");
Node center = new Node(); Node center = new Node();
float xOffset = 0; float xOffset = 0;
for(int i = 0; i < textArr.length; i++){
String text = textArr[i];
ColorRGBA color = colorArr[i];
for (char c : text.toCharArray()) {
BitmapText letter = new BitmapText(font);
letter.setColor(color);
letter.setSize(size);
letter.setText(Character.toString(c));
letter.setLocalTranslation(xOffset, letter.getHeight()/2, 0);
center.attachChild(letter);
for (char c : text.toCharArray()) { xOffset += letter.getLineWidth() + spacing;
BitmapText letter = new BitmapText(font); }
letter.setSize(size);
letter.setText(Character.toString(c));
letter.setLocalTranslation(xOffset, letter.getHeight()/2, 0);
center.attachChild(letter);
xOffset += letter.getLineWidth() + spacing;
} }
center.setLocalTranslation(new Vector3f(-xOffset/2,0,0)); center.setLocalTranslation(new Vector3f(-xOffset/2,0,0));
textNode.attachChild(center); textNode.attachChild(center);
return textNode; return textNode;
} }
private Node createTextWithSpacing(String text, float spacing, float size, ColorRGBA color) {
return createTextWithSpacing(new String[]{text}, spacing, size, new ColorRGBA[]{color});
}
private Vector3f center(float width, float height, Vector3f pos){ private Vector3f center(float width, float height, Vector3f pos){
return new Vector3f(pos.x+width/2, pos.y+height/2,0); return new Vector3f(pos.x+width/2, pos.y+height/2,0);
} }
private Node createTopText(String name, float spacing, float size, ColorRGBA color, float top){
return createTopText(new String[]{name}, spacing, size, new ColorRGBA[]{color}, top);
}
private Node createTopText(String[] name, float spacing, float size, ColorRGBA color[], float top){
Node text = createTextWithSpacing(name, spacing, size, color);
text.setLocalTranslation(0, (appSettings.getHeight()/2f)*0.8f-top,0);
root.attachChild(text);
return text;
}
private Vector3f centerText(float width, float height, Vector3f pos){ private Vector3f centerText(float width, float height, Vector3f pos){
return center(-width, height, pos); return center(-width, height, pos);
} }
public void activePlayer(String name, Color color){
createTopText(new String[]{name," ist dran!"}, 10,90,new ColorRGBA[]{playerColorToColorRGBA(color),ColorRGBA.White}, 0).addControl(new ZoomControl());
}
public void ownActive(Color color){
createTopText(new String[]{"Du"," bist dran!"}, 10,90,new ColorRGBA[]{playerColorToColorRGBA(color),ColorRGBA.White}, 0).addControl(new ZoomControl());
}
public void diceNum(int diceNum, String name, Color color){
createTopText(new String[]{name," würfelt:"}, 10,90,new ColorRGBA[]{playerColorToColorRGBA(color),ColorRGBA.White}, 0);
createTopText(String.valueOf(diceNum), 10, 100, ColorRGBA.White, 100);
}
public void diceNumMult(int diceNum,int mult, String name, Color color){
createTopText(new String[]{name," würfelt:"}, 10,90,new ColorRGBA[]{playerColorToColorRGBA(color),ColorRGBA.White}, 0);
createTopText(new String[]{String.valueOf(diceNum), " x" + mult + " = " + (diceNum*mult)}, 20, 100, new ColorRGBA[]{ColorRGBA.White,ColorRGBA.Red}, 100);
}
public void ownDice(int diceNum){
createTopText(String.valueOf(diceNum), 10, 100, ColorRGBA.White, 0);
}
public void ownDiceMult(int diceNum, int mult){
createTopText(new String[]{String.valueOf(diceNum), " x" + mult + " = " + (diceNum*mult)}, 20, 100, new ColorRGBA[]{ColorRGBA.White,ColorRGBA.Red}, 0);
}
private ColorRGBA playerColorToColorRGBA(Color color){
return switch (color){
case ARMY -> ColorRGBA.Green;
case NAVY -> ColorRGBA.Blue;
case CYBER -> ColorRGBA.Orange;
case AIRFORCE -> ColorRGBA.Black;
};
}
} }

View File

@@ -41,6 +41,7 @@ public class GuiHandler {
private Set<CardControl> selectableCards = new HashSet<>(); private Set<CardControl> selectableCards = new HashSet<>();
private BonusCard cardSelect = null; private BonusCard cardSelect = null;
private PlayerNameHandler playerNameHandler; private PlayerNameHandler playerNameHandler;
private ActionTextHandler actionTextHandler;
public GuiHandler(MdgaApp app, Texture2D backTexture) { public GuiHandler(MdgaApp app, Texture2D backTexture) {
this.app = app; this.app = app;
@@ -59,7 +60,7 @@ public void init(){
diceControl.create(new Vector3f(0,0,0), 1f, false); diceControl.create(new Vector3f(0,0,0), 1f, false);
playerNameHandler = new PlayerNameHandler(app.getGuiNode(), app.getAssetManager(), app.getContext().getSettings()); playerNameHandler = new PlayerNameHandler(app.getGuiNode(), app.getAssetManager(), app.getContext().getSettings());
new ActionTextHandler(app.getContext().getSettings(), app.getAssetManager(), app.getGuiNode()); actionTextHandler = new ActionTextHandler(app.getContext().getSettings(), app.getAssetManager(), app.getGuiNode());
} }
@@ -261,8 +262,9 @@ public void turbo(){
SymbolControl control = createSymbol(Asset.turboSymbol); SymbolControl control = createSymbol(Asset.turboSymbol);
cardLayer.addSpatial(control.getSpatial()); cardLayer.addSpatial(control.getSpatial());
control.turbo(); control.turbo();
} }
public void test2(){
actionTextHandler.ownDiceMult(5,2);
}
} }

View File

@@ -80,14 +80,7 @@ private Spatial createColor(Color color) {
return pic; 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, boolean first, boolean own){ private Spatial createName(String name, boolean first, boolean own){
BitmapText hudText = new BitmapText(playerFont); BitmapText hudText = new BitmapText(playerFont);

View File

@@ -0,0 +1,77 @@
package pp.mdga.client.gui;
import com.jme3.renderer.RenderManager;
import com.jme3.renderer.ViewPort;
import com.jme3.scene.Spatial;
import com.jme3.scene.control.AbstractControl;
public class ZoomControl extends AbstractControl {
private boolean zoomingIn = false;
private boolean zoomingOut = false;
private float progress = 0;
private float zoomSpeed = 1f;
private float zoomFactor = 1f;
@Override
public void setSpatial(Spatial spatial){
if(this.spatial == null && spatial != null){
super.setSpatial(spatial);
initSpatial();
}
}
private void initSpatial() {
zoomingIn = true;
}
@Override
protected void controlUpdate(float tpf) {
if (zoomingIn) {
progress += tpf * zoomSpeed;
if (progress > 1) progress = 1;
spatial.setLocalScale(lerp(0, zoomFactor, easeOut(progress)));
if (progress >= 1) {
zoomingIn = false;
zoomingOut = true;
progress = 0;
}
} else if (zoomingOut) {
progress += tpf * zoomSpeed;
spatial.setLocalScale(lerp(zoomFactor, 0, easeIn(progress)));
if (progress > 1) {
zoomingOut = false;
end();
}
}
}
private void end(){
spatial.removeFromParent();
spatial.removeControl(this);
}
@Override
protected void controlRender(RenderManager rm, ViewPort vp) {
}
private static float lerp(float start, float end, float t) {
return (1 - t) * start + t * end;
}
// private static float easeOut(float t) {
// return (float) Math.sqrt(1 - Math.pow(t - 1, 2));
// }
private float easeOut(float x) {
return x == 1 ? 1 : (float) (1 - Math.pow(2, -10 * x));
}
// private float easeIn(float t) {
// return t * t * t * t;
// }
private float easeIn(float x) {
return x == 0 ? 0 : (float) Math.pow(2, 10 * x - 10);
}
}