This commit is contained in:
Felix Koppe
2024-11-29 12:29:20 +01:00
parent ae1ec74056
commit c3055a0646
15 changed files with 201 additions and 357 deletions

View File

@@ -3,7 +3,7 @@
public enum Asset {
bigTent,
cardStack,
cir("Models/+cir/cir_newOrigin.obj"),
cir("Models/cir/cir_newOrigin.obj"),
heer("Models/heer/heer_newOrigin.obj"),
jet,
lw("Models/lw/lw_newOrigin.obj"),

View File

@@ -22,10 +22,15 @@ public class MdgaApp extends SimpleApplication {
private ModelSyncronizer modelSyncronizer;
MdgaView view = null;
private MdgaState state = MdgaState.MAIN;
private MdgaState state = null;
private static float imageScale = 1.5f;
private MdgaView mainView;
private MdgaView lobbyView;
private MdgaView gameView;
private MdgaView ceremonyView;
public static void main(String[] args) {
AppSettings settings = new AppSettings(true);
settings.setSamples(128);
@@ -54,7 +59,12 @@ public void simpleInitApp() {
inputSynchronizer = new InputSynchronizer(this);
modelSyncronizer = new ModelSyncronizer(this);
enter(state);
mainView = new MainView(this);
lobbyView = new LobbyView(this);
gameView = new GameView(this);
ceremonyView = new CeremonyView(this);
enter(MdgaState.MAIN);
}
@Override
@@ -73,16 +83,16 @@ public void enter(MdgaState state) {
switch (state) {
case MAIN:
view = new MainView(this);
view = mainView;
break;
case LOBBY:
view = new LobbyView(this);
view = lobbyView;
break;
case GAME:
view = new GameView(this);
view = gameView;
break;
case CEREMONY:
view = new CeremonyView(this);
view = ceremonyView;
break;
case NONE:
throw new RuntimeException("cant enter state NONE");
@@ -93,10 +103,6 @@ public void enter(MdgaState state) {
view.enter();
}
public void afteGameCleanup() {
//TODO
}
public AnimationHandler getAnimationHandler() {
return animationHandler;
}

View File

@@ -34,29 +34,29 @@ public class BoardHandler {
private Map<UUID, Color> pieceColor;
private Set<OutlineControl> outlineControls;
private Node node;
private Node node = new Node();
private Node rootNode;
private final FilterPostProcessor fpp;
private FilterPostProcessor fpp;
private boolean isInitialised;
private boolean scheduleInit = false;
private boolean scheduleShutdown = false;
private List<PieceControl> selectableOwnPieces = new ArrayList<>();
private List<PieceControl> selectableEnemyPieces = new ArrayList<>();
private PieceControl selectedOwnPiece;
private PieceControl selectedEnemyPiece;
private DiceControl diceControl;
public BoardHandler(MdgaApp app, FilterPostProcessor fpp) {
public BoardHandler(MdgaApp app, Node node3d, FilterPostProcessor fpp) {
if(app == null) throw new RuntimeException("app is null");
this.isInitialised = false;
this.app = app;
this.rootNode = node3d;
this.fpp = fpp;
selectedEnemyPiece = null;
selectedOwnPiece = null;
initMap();
}
@@ -66,11 +66,7 @@ private void addFigureToPlayerMap(Color col, AssetOnMap assetOnMap) {
}
private void initMap() {
if (isInitialised) return;
this.isInitialised = true;
this.node = new Node("Asset Node");
this.pieces = new HashMap<>();
this.colorAssetsMap = new HashMap<>();
this.infield = new ArrayList<>(40);
@@ -79,12 +75,12 @@ private void initMap() {
this.waitingPiecesMap = new HashMap<>();
this.pieceColor = new HashMap<>();
this.outlineControls = new HashSet<>();
// Initialize dice
diceControl = new DiceControl(app.getAssetManager());
diceControl.create(new Vector3f(0,0,0), 0.7f, true);
diceControl.create(new Vector3f(0, 0, 0), 0.7f, true);
// Load assets and populate the node
List<AssetOnMap> assetOnMaps = MapLoader.loadMap(MAP_NAME);
for (AssetOnMap assetOnMap : assetOnMaps) {
@@ -103,7 +99,6 @@ private void initMap() {
case node_wait_blue -> addHomeNode(waitingNodesMap, Color.NAVY, assetOnMap);
case node_wait_green -> addHomeNode(waitingNodesMap, Color.ARMY, assetOnMap);
case node_wait_yellow -> addHomeNode(waitingNodesMap, Color.CYBER, assetOnMap);
default -> displayAsset(assetOnMap);
}
}
@@ -122,14 +117,20 @@ private Color assetToColor(Asset asset) {
private Spatial createModel(Asset asset, Vector3f pos, float rot) {
String modelName = asset.getModelPath();
String texName = asset.getDiffPath();
// Load the model
Spatial model = app.getAssetManager().loadModel(modelName);
model.scale(asset.getSize());
model.rotate((float) Math.toRadians(0), 0, (float) Math.toRadians(rot));
model.setLocalTranslation(pos);
model.setShadowMode(RenderQueue.ShadowMode.CastAndReceive);
// Set material
Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Light/Lighting.j3md");
mat.setTexture("DiffuseMap", app.getAssetManager().loadTexture(texName));
model.setMaterial(mat);
// Attach to the asset node
node.attachChild(model);
return model;
@@ -332,23 +333,46 @@ public void swapPieces(UUID piece1, UUID piece2){
}
public void init() {
// outlineControls.forEach((outlineControl) -> {
// outlineControl.outline(outlineControl.getColor());
// });
if (isInitialised) return;
rootNode.attachChild(node);
app.getViewPort().addProcessor(fpp);
isInitialised = true;
scheduleInit = false;
app.getRootNode().attachChild(node);
}
public void shutdown(){
outlineControls.forEach((outlineControl) -> {
outlineControl.deOutline();
});
public void shutdown() {
if (!isInitialised) return;
outlineControls.forEach(OutlineControl::deOutline);
outlineControls.clear();
rootNode.detachChild(node);
if (fpp != null) {
app.getViewPort().removeProcessor(fpp);
}
pieces.clear();
colorAssetsMap.clear();
homeNodesMap.clear();
waitingNodesMap.clear();
waitingPiecesMap.clear();
pieceColor.clear();
selectableOwnPieces.clear();
selectableEnemyPieces.clear();
selectedEnemyPiece = null;
selectedOwnPiece = null;
if (diceControl != null) {
diceControl.hide();
}
isInitialised = false;
scheduleShutdown = false;
app.getRootNode().detachChild(node);
System.gc();
}
//List<Pieces>
@@ -375,9 +399,6 @@ public void outline(int index){
outlineControls.add(infield.get(index));
}
//called when (dice) moveNum is received from server to display the movable pieces and corresponding moveNodes
public void outlineMove(List<UUID> pieces, List<Integer> moveIndexe, List<Boolean> homeMoves) {
if(pieces.size() != moveIndexe.size() || pieces.size() != homeMoves.size()) throw new RuntimeException("arrays are not the same size");
@@ -500,6 +521,4 @@ public void showDice(Color color){
public void hideDice(){
diceControl.hide();
}
}

View File

@@ -4,6 +4,7 @@
import com.jme3.light.DirectionalLight;
import com.jme3.math.ColorRGBA;
import com.jme3.math.FastMath;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import com.jme3.post.FilterPostProcessor;
import com.jme3.shadow.DirectionalLightShadowFilter;
@@ -18,8 +19,19 @@ public class CameraHandler {
private static final int SHADOWMAP_SIZE = 1024 * 8;
public CameraHandler(MdgaApp app, FilterPostProcessor fpp){
private Vector3f defaultCameraPosition;
private Quaternion defaultCameraRotation;
FilterPostProcessor fpp;
DirectionalLightShadowFilter dlsf;
public CameraHandler(MdgaApp app, FilterPostProcessor fpp) {
this.app = app;
this.fpp = fpp;
// Save the default camera state
this.defaultCameraPosition = app.getCamera().getLocation().clone();
this.defaultCameraRotation = app.getCamera().getRotation().clone();
sun = new DirectionalLight();
sun.setColor(ColorRGBA.White);
@@ -28,22 +40,29 @@ public CameraHandler(MdgaApp app, FilterPostProcessor fpp){
ambient = new AmbientLight();
ambient.setColor(new ColorRGBA(0.3f, 0.3f, 0.3f, 1));
DirectionalLightShadowFilter dlsf = new DirectionalLightShadowFilter(app.getAssetManager(), SHADOWMAP_SIZE, 4);
dlsf = new DirectionalLightShadowFilter(app.getAssetManager(), SHADOWMAP_SIZE, 4);
dlsf.setLight(sun);
dlsf.setEnabled(true);
dlsf.setEdgeFilteringMode(EdgeFilteringMode.PCFPOISSON);
dlsf.setShadowIntensity(0.7f);
fpp.addFilter(dlsf);
}
public void init() {
app.getRootNode().addLight(sun);
app.getRootNode().addLight(ambient);
fpp.addFilter(dlsf);
}
public void shutdown() {
app.getRootNode().removeLight(sun);
app.getRootNode().removeLight(ambient);
// Reset the camera to its default state
app.getCamera().setLocation(defaultCameraPosition);
app.getCamera().setRotation(defaultCameraRotation);
fpp.removeFilter(dlsf);
}
public void update(float scroll, float rotation) {
@@ -77,5 +96,4 @@ public void update(float scroll, float rotation) {
app.getCamera().lookAt(Vector3f.ZERO, Vector3f.UNIT_Z);
}
}

View File

@@ -94,6 +94,8 @@ public String getString() {
return field.getText();
}
public void setString(String string) { field.setText(string); }
public void reset() {
field.setText("");
}

View File

@@ -23,6 +23,7 @@ public HostDialog(MdgaApp app, Node node, MainView view) {
this.view = view;
portInput = new InputButton(app, node, "Port: ", 5);
portInput.setString("11111");
hostButton = new ButtonRight(app, node, view::forward, "Spiel hosten", 10);
backButton = new ButtonLeft(app, node, view::back, "Zurück", 10);

View File

@@ -25,6 +25,7 @@ public JoinDialog(MdgaApp app, Node node, MainView view) {
ipInput = new InputButton(app, node, "Ip: ", 15);
portInput = new InputButton(app, node, "Port: ", 5);
portInput.setString("11111");
joinButton = new ButtonRight(app, node, view::forward, "Spiel beitreten", 10);
backButton = new ButtonLeft(app, node, view::back, "Zurück", 10);

View File

@@ -1,80 +0,0 @@
package pp.mdga.client.dialog2;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Node;
import com.simsilica.lemur.Button;
import com.simsilica.lemur.Container;
import com.simsilica.lemur.HAlignment;
import com.simsilica.lemur.VAlignment;
import com.simsilica.lemur.component.QuadBackgroundComponent;
import pp.mdga.client.MdgaApp;
public abstract class Dialog {
protected final ColorRGBA COLOR_DEFAULT = ColorRGBA.Gray;
protected final ColorRGBA COLOR_HOVER = ColorRGBA.DarkGray;
protected Container container;
protected final MdgaApp app;
private final Node node;
protected final float vertical_step;
protected final float horitontal_step;
protected float fontSize = 35;
public Dialog(MdgaApp app, Node node) {
this.app = app;
this.node = node;
this.container = new Container();
this.horitontal_step = app.getCamera().getWidth() / 16;
this.vertical_step = app.getCamera().getHeight() / 9;
//int val = (int) (32 * Math.min(app.getResolutionFactor() * 0.9f, 1));
//fontSize = val;
}
public void show() {
node.attachChild(container);
}
public void hide () {
node.detachChild(container);
}
protected void createButton(String label, Runnable action, Vector3f size) {
Button button = new Button(label);
button.addClickCommands(source -> action.run());
button.setFontSize(fontSize);
button.setHighlightColor(ColorRGBA.White);
button.setColor(ColorRGBA.Black);
button.setPreferredSize(size);
button.setTextHAlignment(HAlignment.Center);
button.setTextVAlignment(VAlignment.Center);
QuadBackgroundComponent background = new QuadBackgroundComponent(COLOR_DEFAULT);
//background.setMargin(5 * app.getResolutionFactor(), 5 * app.getResolutionFactor());
button.setBackground(background);
button.addCommands(com.simsilica.lemur.Button.ButtonAction.HighlightOn, (source) -> {
QuadBackgroundComponent hoverBackground = new QuadBackgroundComponent(COLOR_HOVER);
// hoverBackground.setMargin(5 * app.getResolutionFactor(), 5 * app.getResolutionFactor());
source.setBackground(hoverBackground);
button.setHighlightColor(ColorRGBA.White);
button.setColor(ColorRGBA.Black);
});
button.addCommands(com.simsilica.lemur.Button.ButtonAction.HighlightOff, (source) -> {
QuadBackgroundComponent normalBackground = new QuadBackgroundComponent(COLOR_DEFAULT);
// normalBackground.setMargin(5 * app.getResolutionFactor(), 5 * app.getResolutionFactor());
source.setBackground(normalBackground);
button.setHighlightColor(ColorRGBA.White);
button.setColor(ColorRGBA.Black);
});
container.addChild(button);
}
}

View File

@@ -1,106 +0,0 @@
package pp.mdga.client.dialog2;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Node;
import com.jme3.texture.Texture;
import com.simsilica.lemur.*;
import com.simsilica.lemur.component.QuadBackgroundComponent;
import com.simsilica.lemur.component.SpringGridLayout;
import pp.mdga.client.MdgaApp;
import java.util.HashMap;
public class SettingsDialog extends Dialog {
private TextField nameInput;
//private HashMap<Slider, PercentRunnable> map = new HashMap<Slider, PercentRunnable>();
//private HashMap<Slider, GetPercentRunnable> map2 = new HashMap<Slider, GetPercentRunnable>();
public SettingsDialog(MdgaApp app, Node node, String path) {
super(app, node);
QuadBackgroundComponent quad1 = new QuadBackgroundComponent(ColorRGBA.Gray);
//quad1.setMargin(100 * app.getResolutionFactor(), 50 * app.getResolutionFactor());
container.setBackground(quad1);
Texture texture = app.getAssetManager().loadTexture(path);
QuadBackgroundComponent b = new QuadBackgroundComponent(texture);
Panel imagePanel = new Panel();
imagePanel.setBackground(b);
// container.addChild(imagePanel).setPreferredSize(new Vector3f((texture.getImage().getWidth() / 2) * app.getResolutionFactor(), (texture.getImage().getHeight() / 2) * app.getResolutionFactor(), 0));
//abstandshalter
// container.addChild(new Panel(80 * app.getResolutionFactor(), 50 * app.getResolutionFactor(), ColorRGBA.Gray));
}
@Override
public void show() {
super.show();
container.setLocalTranslation(
app.getCamera().getWidth() / 2 - container.getPreferredSize().x / 2,
app.getCamera().getHeight() / 2 + container.getPreferredSize().y / 2,
0
);
}
@Override
public void hide() {
super.hide();
}
public void addButton(String label, Runnable action, Vector3f size) {
createButton(label, action, size);
}
/*public void addSlider(String label, PercentRunnable action, GetPercentRunnable action2, Vector3f size, int start) {
Container subContainer = new Container(new SpringGridLayout(Axis.X, Axis.Y));
Slider slider = new Slider("slider");
QuadBackgroundComponent background = new QuadBackgroundComponent(ColorRGBA.DarkGray);
slider.setBackground(background);
slider.setPreferredSize(size);
slider.setModel(new DefaultRangedValueModel(0, 100, start));
//slider.setPreferredSize(new Vector3f(150 * app.getResolutionFactor(), 30 * app.getResolutionFactor(), 0));
slider.getDecrementButton().setText(" - ");
slider.getIncrementButton().setText(" + ");
// slider.getDecrementButton().setFontSize(25 * app.getResolutionFactor());
// slider.getIncrementButton().setFontSize(25 * app.getResolutionFactor());
Label nameLabel = new Label(label);
nameLabel.setFontSize(fontSize);
nameLabel.setColor(ColorRGBA.Black);
// nameLabel.setPreferredSize(new Vector3f(150 * app.getResolutionFactor(), 10 * app.getResolutionFactor(), 0));
subContainer.addChild(nameLabel);
subContainer.addChild(slider);
container.addChild(subContainer);
map.put(slider, action);
map2.put(slider, action2);
//abstandshalter
// container.addChild(new Panel(20 * app.getResolutionFactor(), 10 * app.getResolutionFactor(), ColorRGBA.Gray));
}
public void initVolume() {
map2.forEach((slider, runnable) -> {
double val = (double) runnable.get();
slider.getModel().setPercent(val);
});
}
public void update() {
map.forEach((slider, runnable) -> {
float val = (float) slider.getModel().getPercent();
runnable.run(val);
});
}*/
}

View File

@@ -10,19 +10,27 @@
import pp.mdga.client.Asset;
public class ActionTextHandler {
private Node root;
private Node node;
public ActionTextHandler(AppSettings appSettings, AssetManager assetManager, Node guiNode){
root = new Node("actionTextRoot");
guiNode.attachChild(root);
private Node textWithSpacing;
root.setLocalTranslation(center(appSettings.getWidth(), appSettings.getHeight(), Vector3f.ZERO));
public ActionTextHandler(AppSettings appSettings, AssetManager assetManager, Node node){
BitmapFont playerFont = assetManager.loadFont("Fonts/Gunplay.fnt");
root.attachChild(createTextWithSpacing(playerFont, "TEST", 20f, 250));
textWithSpacing = createTextWithSpacing(playerFont, "TEST", 20f, 250);
textWithSpacing.setLocalTranslation(center(appSettings.getWidth(), appSettings.getHeight(), Vector3f.ZERO));
}
public static Node createTextWithSpacing(BitmapFont font, String text, float spacing, float size) {
public void show () {
node.attachChild(textWithSpacing);
}
public void hide() {
node.detachChild(textWithSpacing);
}
private static Node createTextWithSpacing(BitmapFont font, String text, float spacing, float size) {
Node textNode = new Node("TextWithSpacing");
Node center = new Node();
float xOffset = 0;
@@ -45,9 +53,9 @@ public static Node createTextWithSpacing(BitmapFont font, String text, float spa
private Vector3f center(float width, float height, Vector3f pos){
return new Vector3f(pos.x+width/2, pos.y+height/2,0);
}
private Vector3f centerText(float width, float height, Vector3f pos){
return center(-width, height, pos);
}
}

View File

@@ -10,6 +10,8 @@
import com.jme3.renderer.queue.RenderQueue;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.texture.FrameBuffer;
import com.jme3.texture.Image;
import com.jme3.texture.Texture2D;
import pp.mdga.client.Asset;
import pp.mdga.client.MdgaApp;
@@ -29,12 +31,10 @@ public class GuiHandler {
private Map<BonusCard, CardControl> bonusCardControlMap;
private Map<BonusCard, Integer> bonusCardIntegerMap;
private static final Vector3f START = new Vector3f(-1.8f,-3.5f,0);
private static final Vector3f MARGIN = new Vector3f(1.8f,0,0);
private final FilterPostProcessor fpp;
Texture2D backTexture;
private Camera cardLayerCamera;
private DiceControl diceControl;
@@ -42,10 +42,13 @@ public class GuiHandler {
private BonusCard cardSelect = null;
private PlayerNameHandler playerNameHandler;
public GuiHandler(MdgaApp app, Texture2D backTexture) {
private Node rootNode;
public GuiHandler(MdgaApp app, Node node) {
this.app = app;
this.fpp = new FilterPostProcessor(app.getAssetManager());
this.backTexture = backTexture;
this.rootNode = node;
cardLayerCamera = createOverlayCam();
uuidBonusCardMap = new HashMap<>();
bonusCardIntegerMap = new HashMap<>();
@@ -53,22 +56,29 @@ public GuiHandler(MdgaApp app, Texture2D backTexture) {
}
public void init(){
FrameBuffer backFrameBuffer = new FrameBuffer(app.getCamera().getWidth(), app.getCamera().getHeight(), 1);
Texture2D backTexture = new Texture2D(app.getCamera().getWidth(), app.getCamera().getHeight(), Image.Format.RGBA8);
backFrameBuffer.setDepthTarget(FrameBuffer.FrameBufferTarget.newTarget(Image.Format.Depth));
backFrameBuffer.addColorTarget(FrameBuffer.FrameBufferTarget.newTarget(backTexture));
app.getViewPort().setOutputFrameBuffer(backFrameBuffer);
cardLayer = new CardLayer(fpp, cardLayerCamera, backTexture);
app.getStateManager().attach(cardLayer);
diceControl = new DiceControl(app.getAssetManager());
diceControl.create(new Vector3f(0,0,0), 1f, false);
playerNameHandler = new PlayerNameHandler(app.getGuiNode(), app.getAssetManager(), app.getContext().getSettings());
new ActionTextHandler(app.getContext().getSettings(), app.getAssetManager(), app.getGuiNode());
playerNameHandler = new PlayerNameHandler(rootNode, app.getAssetManager(), app.getContext().getSettings());
}
public void shutdown(){
if(cardLayer != null){
cardLayer.shutdown();
}
cardLayer = null;
app.getViewPort().setOutputFrameBuffer(null);
}
private Asset bonusToAsset(BonusCard card){
@@ -113,25 +123,6 @@ private Vector3f nextPos() {
return START.add(MARGIN.mult(bonusCardControlMap.size()));
}
private CardControl createCard(Asset card, Vector3f pos){
Node rootCard = new Node("Root Card");
Spatial spatial = app.getAssetManager().loadModel(card.getModelPath());
rootCard.attachChild(spatial);
// Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Light/Lighting.j3md");
// mat.setTexture("ColorMap", app.getAssetManager().loadTexture(card.getDiffPath()));
mat.setTexture("DiffuseMap", app.getAssetManager().loadTexture(card.getDiffPath()));
spatial.setMaterial(mat);
spatial.setLocalScale(1f);
rootCard.setLocalTranslation(pos);
// spatial.setLocalTranslation(pos);
spatial.rotate((float)Math.toRadians(90), (float)Math.toRadians(180), (float)Math.toRadians(180));
spatial.setShadowMode(RenderQueue.ShadowMode.CastAndReceive);
CardControl control = new CardControl(app, fpp, cardLayer.getOverlayCam(), rootCard);
spatial.addControl(control);
return control;
}
public void addPlayer(Color color, String name, boolean own){
playerNameHandler.addPlayer(color, name, own);
}
@@ -140,33 +131,6 @@ public void setActivePlayer(Color color){
playerNameHandler.setActivePlayer(color);
}
private Camera createOverlayCam(){
Camera originalCam = app.getCamera();
Camera overlayCam = new Camera(originalCam.getWidth(), originalCam.getHeight());
overlayCam.setParallelProjection(true);
// overlayCam.setFrustum(originalCam.getFrustumNear(), originalCam.getFrustumFar(), originalCam.getFrustumLeft(), originalCam.getFrustumRight(),originalCam.getFrustumTop(), originalCam.getFrustumBottom());
float CAMERA_ZOOM = 4;
float aspect = (float) originalCam.getWidth() / originalCam.getHeight();
float size = CAMERA_ZOOM;
overlayCam.setFrustum(-1000, 1000, -aspect * size, aspect * size, size, -size);
// overlayCam.setFov(originalCam.getFov());
overlayCam.setLocation(new Vector3f(0, 0, 10));
overlayCam.lookAt(new Vector3f(0,0,0), Vector3f.UNIT_Y);
return overlayCam;
}
public void test(){
UUID uuid = UUID.randomUUID();
UUID uuid1 = UUID.randomUUID();
addCard(BonusCard.SHIELD, uuid);
addCard(BonusCard.SHIELD, UUID.randomUUID());
addCard(BonusCard.TURBO, uuid1);
addCard(BonusCard.SWAP, UUID.randomUUID());
// setSelectableCards(List.of(uuid,uuid1));
// showDice();
}
public Camera getCardLayerCamera() {
return cardLayerCamera;
}
@@ -175,7 +139,6 @@ public CardLayer getCardLayer(){
return cardLayer;
}
public void setSelectableCards_UUID(List<UUID> selectUuids) {
for(UUID uuid : selectUuids) {
selectableCards.add(bonusCardControlMap.get(uuidBonusCardMap.get(uuid)));
@@ -221,28 +184,6 @@ public void selectCard(CardControl cardControl) {
cardControl.select();
cardSelect = getKeyByValue(bonusCardControlMap, cardControl);
}
}
public static <K, V> K getKeyByValue(Map<K, V> map, V value) {
for (Map.Entry<K, V> entry : map.entrySet()) {
if (entry.getValue().equals(value)) {
return entry.getKey();
}
}
return null; // Key not found
}
private SymbolControl createSymbol(Asset asset){
Spatial spatial = app.getAssetManager().loadModel(asset.getModelPath());
Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
mat.setTexture("ColorMap", app.getAssetManager().loadTexture(asset.getDiffPath()));
spatial.setMaterial(mat);
spatial.setLocalScale(1f);
spatial.rotate((float)Math.toRadians(90), (float)Math.toRadians(180), (float)Math.toRadians(180));
SymbolControl control = new SymbolControl();
spatial.addControl(control);
return control;
}
public void shield(){
@@ -264,5 +205,58 @@ public void turbo(){
}
private static <K, V> K getKeyByValue(Map<K, V> map, V value) {
for (Map.Entry<K, V> entry : map.entrySet()) {
if (entry.getValue().equals(value)) {
return entry.getKey();
}
}
return null; // Key not found
}
private SymbolControl createSymbol(Asset asset){
Spatial spatial = app.getAssetManager().loadModel(asset.getModelPath());
Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
mat.setTexture("ColorMap", app.getAssetManager().loadTexture(asset.getDiffPath()));
spatial.setMaterial(mat);
spatial.setLocalScale(1f);
spatial.rotate((float)Math.toRadians(90), (float)Math.toRadians(180), (float)Math.toRadians(180));
SymbolControl control = new SymbolControl();
spatial.addControl(control);
return control;
}
private Camera createOverlayCam(){
Camera originalCam = app.getCamera();
Camera overlayCam = new Camera(originalCam.getWidth(), originalCam.getHeight());
overlayCam.setParallelProjection(true);
// overlayCam.setFrustum(originalCam.getFrustumNear(), originalCam.getFrustumFar(), originalCam.getFrustumLeft(), originalCam.getFrustumRight(),originalCam.getFrustumTop(), originalCam.getFrustumBottom());
float CAMERA_ZOOM = 4;
float aspect = (float) originalCam.getWidth() / originalCam.getHeight();
float size = CAMERA_ZOOM;
overlayCam.setFrustum(-1000, 1000, -aspect * size, aspect * size, size, -size);
// overlayCam.setFov(originalCam.getFov());
overlayCam.setLocation(new Vector3f(0, 0, 10));
overlayCam.lookAt(new Vector3f(0,0,0), Vector3f.UNIT_Y);
return overlayCam;
}
private CardControl createCard(Asset card, Vector3f pos){
Node rootCard = new Node("Root Card");
Spatial spatial = app.getAssetManager().loadModel(card.getModelPath());
rootCard.attachChild(spatial);
// Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Light/Lighting.j3md");
// mat.setTexture("ColorMap", app.getAssetManager().loadTexture(card.getDiffPath()));
mat.setTexture("DiffuseMap", app.getAssetManager().loadTexture(card.getDiffPath()));
spatial.setMaterial(mat);
spatial.setLocalScale(1f);
rootCard.setLocalTranslation(pos);
// spatial.setLocalTranslation(pos);
spatial.rotate((float)Math.toRadians(90), (float)Math.toRadians(180), (float)Math.toRadians(180));
spatial.setShadowMode(RenderQueue.ShadowMode.CastAndReceive);
CardControl control = new CardControl(app, fpp, cardLayer.getOverlayCam(), rootCard);
spatial.addControl(control);
return control;
}
}

View File

@@ -35,16 +35,27 @@ public class PlayerNameHandler {
private static final ColorRGBA ACTIVE_COLOR = ColorRGBA.Blue;
private static final ColorRGBA OWN_COLOR = ColorRGBA.Cyan;
private final Node guiNode;
public PlayerNameHandler(Node guiNode, AssetManager assetManager, AppSettings appSettings){
this.guiNode = guiNode;
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;
}
public void show() {
guiNode.attachChild(playerNameNode);
}
public void hide() {
guiNode.detachChild(playerNameNode);
}
private void drawPlayers(){
playerNameNode.detachAllChildren();

View File

@@ -144,6 +144,4 @@ private float easeInOut(float t) {
private float easeIn(float t) {
return t * t * t * t;
}
}

View File

@@ -7,6 +7,7 @@
import com.jme3.input.controls.MouseButtonTrigger;
import com.jme3.post.FilterPostProcessor;
import com.jme3.post.filters.ComposeFilter;
import com.jme3.renderer.ViewPort;
import com.jme3.shadow.DirectionalLightShadowFilter;
import com.jme3.shadow.EdgeFilteringMode;
import com.jme3.texture.FrameBuffer;
@@ -34,51 +35,29 @@ public class GameView extends MdgaView {
private Color ownColor = null;
private FilterPostProcessor fpp;
public GameView(MdgaApp app) {
super(app);
cheatButton = new ButtonRight(app, guiNode, () -> app.getModelSyncronizer().enter(MdgaState.CEREMONY), "Weiter (CHEAT)", 1);
FilterPostProcessor fpp = new FilterPostProcessor(app.getAssetManager());
fpp = new FilterPostProcessor(app.getAssetManager());
this.camera = new CameraHandler(app, fpp);
this.boardHandler = new BoardHandler(app, fpp);
this.boardHandler = new BoardHandler(app, rootNode, fpp);
//TODO sollte das onLeave nicht vlt rückgänging gemacht werden??
app.getViewPort().addProcessor(fpp);
FrameBuffer backFrameBuffer = new FrameBuffer(app.getCamera().getWidth(), app.getCamera().getHeight(), 1);
Texture2D backTexture = new Texture2D(app.getCamera().getWidth(), app.getCamera().getHeight(), Image.Format.RGBA8);
backFrameBuffer.setDepthTarget(FrameBuffer.FrameBufferTarget.newTarget(Image.Format.Depth));
backFrameBuffer.addColorTarget(FrameBuffer.FrameBufferTarget.newTarget(backTexture));
app.getViewPort().setOutputFrameBuffer(backFrameBuffer);
this.guiHandler = new GuiHandler(app, backTexture);
//TODO ---------------------------------------------------------
guiHandler = new GuiHandler(app, guiNode);
}
@Override
public void onEnter() {
cheatButton.show();
camera.init();
boardHandler.init();
guiHandler.init();
cheatButton.show();
// boardHandler.addPlayer(Color.AIRFORCE, test);
// boardHandler.movePieceStart(player0, 0);
// boardHandler.enableHover(player0);
// boardHandler.enableHover(player1);
// boardHandler.highlight(player0, true);
// boardHandler.outline(player0, true);
// boardHandler.outline(10);
guiHandler.test();
app.getViewPort().addProcessor(fpp);
}
@Override
@@ -88,6 +67,8 @@ public void onLeave() {
guiHandler.shutdown();
cheatButton.hide();
app.getViewPort().removeProcessor(fpp);
}
@Override
@@ -108,8 +89,6 @@ protected void onLeaveOverlay(Overlay overlay)
private void leaveGame() {
app.getModelSyncronizer().leave();
app.afteGameCleanup();
}
public BoardHandler getBoardHandler() {

View File

@@ -70,13 +70,6 @@ public void leaveOverlay(Overlay overlay) {
}
public void update(float tpf) {
//TODO is not necessary but will show misuse of nodes
//app.getRootNode().detachAllChildren();
//app.getGuiNode().detachAllChildren();
//app.getRootNode().attachChild(rootNode);
//app.getGuiNode().attachChild(guiNode);
//TODO ----------------------------------------------
videoSettingsDialog.update();
audioSettingsDialog.update();