added select nodes, cards & pieces

This commit is contained in:
Cedric Beck
2024-11-26 16:45:13 +01:00
parent 7a482b74ab
commit 1b151aabdd
10 changed files with 135 additions and 30 deletions

View File

@@ -1,7 +1,7 @@
package pp.mdga.client;
public enum Asset {
bigTent,
bigTent(0.8f),
cardStack,
cir,
heer,
@@ -23,7 +23,6 @@ public enum Asset {
ship(0.8f),
smallTent,
tank,
// world(1.2f),
world("Models/world_new/world_export_new.obj", "Models/world_new/world_new_diff.png", 1.2f),
shield_ring("Models/shield_ring/shield_ring.obj", null),
tree_small("Models/tree_small/tree_small.obj", "Models/tree_small/tree_small_diff.png"),

View File

@@ -1,9 +1,22 @@
package pp.mdga.client;
import com.jme3.collision.CollisionResults;
import com.jme3.input.InputManager;
import com.jme3.input.KeyInput;
import com.jme3.input.MouseInput;
import com.jme3.input.controls.*;
import com.jme3.math.Ray;
import com.jme3.math.Vector2f;
import com.jme3.math.Vector3f;
import com.jme3.renderer.Camera;
import com.jme3.scene.Node;
import com.jme3.scene.control.AbstractControl;
import com.jme3.scene.control.Control;
import pp.mdga.client.board.NodeControl;
import pp.mdga.client.board.OutlineControl;
import pp.mdga.client.board.PieceControl;
import pp.mdga.client.gui.CardControl;
import pp.mdga.client.view.GameView;
public class InputSynchronizer {
@@ -13,12 +26,13 @@ public class InputSynchronizer {
protected boolean rightMousePressed = false;
private float rotationAngle = 180f;
private int scrollValue = 0;
private CardControl hoverCard;
InputSynchronizer(MdgaApp app) {
this.app = app;
this.inputManager = app.getInputManager();
hoverCard = null;
setupInput();
}
@@ -28,13 +42,19 @@ private void setupInput() {
inputManager.addMapping("RotateRightMouse", new MouseButtonTrigger(MouseInput.BUTTON_RIGHT));
inputManager.addMapping("MouseLeft", new MouseAxisTrigger(MouseInput.AXIS_X, false)); // Left movement
inputManager.addMapping("MouseRight", new MouseAxisTrigger(MouseInput.AXIS_X, true)); // Right movement
inputManager.addMapping("MouseVertical", new MouseAxisTrigger(MouseInput.AXIS_Y, false), new MouseAxisTrigger(MouseInput.AXIS_Y, true)); //Mouse Up Down movement
inputManager.addMapping("MouseScrollUp", new MouseAxisTrigger(MouseInput.AXIS_WHEEL, false)); // Scroll up
inputManager.addMapping("MouseScrollDown", new MouseAxisTrigger(MouseInput.AXIS_WHEEL, true)); // Scroll down
inputManager.addMapping("Test", new KeyTrigger(KeyInput.KEY_J));
inputManager.addMapping("Click", new MouseButtonTrigger(MouseInput.BUTTON_LEFT));
inputManager.addListener(actionListener, "Settings", "RotateRightMouse");
inputManager.addListener(actionListener, "Settings", "RotateRightMouse", "Click", "Test");
inputManager.addListener(analogListener, "MouseLeft", "MouseRight", "MouseScrollUp", "MouseScrollDown");
}
private boolean test = false;
private final ActionListener actionListener = new ActionListener() {
@Override
public void onAction(String name, boolean isPressed, float tpf) {
@@ -44,6 +64,36 @@ public void onAction(String name, boolean isPressed, float tpf) {
if (name.equals("RotateRightMouse")) {
rightMousePressed = isPressed;
}
if(name.equals("Click") && isPressed) {
//check Hover cardLayer
//check Hover board
if (app.getView() instanceof GameView gameView) {
CardControl cardLayerSelect = checkHover(gameView.getGuiHandler().getCardLayerCamera(), gameView.getGuiHandler().getCardLayer().getRootNode(), CardControl.class);
OutlineControl boardSelect = checkHover(app.getCamera(), app.getRootNode(), OutlineControl.class);
if(cardLayerSelect != null) {
//cardSelect
cardLayerSelect.outline();
}
if(cardLayerSelect == null && boardSelect != null) {
//boardSelect
if(boardSelect instanceof PieceControl pieceControl){
pieceControl.outline(true);
}
if(boardSelect instanceof NodeControl nodeControl){
nodeControl.outline();
}
}
else{
//both null
}
}
}
if(name.equals("Test") &&isPressed){
test = true;
}
}
};
@@ -52,16 +102,56 @@ public void onAction(String name, boolean isPressed, float tpf) {
public void onAnalog(String name, float value, float tpf) {
if (name.equals("MouseLeft") && rightMousePressed) {
rotationAngle -= value * 360f;
} else if (name.equals("MouseRight") && rightMousePressed) {
}
else if (name.equals("MouseRight") && rightMousePressed) {
rotationAngle += value * 360f;
} else if (name.equals("MouseScrollUp")) {
}
else if (name.equals("MouseScrollUp")) {
scrollValue = Math.max(1, scrollValue - 5);
} else if (name.equals("MouseScrollDown")) {
}
else if (name.equals("MouseScrollDown")) {
scrollValue = Math.min(100, scrollValue + 5);
}
else if (name.equals("MouseLeft") || name.equals("MouseRight") || name.equals("MouseVertical")){
// hoverCardOutline();
}
}
};
private <T extends AbstractControl> T checkHover(Camera cam, Node root, Class<T> controlType) {
CollisionResults results = new CollisionResults();
Ray ray = new Ray(cam.getLocation(), getMousePos(cam).subtract(cam.getLocation()).normalize());
root.collideWith(ray, results);
if (results.size() > 0) {
return results.getClosestCollision().getGeometry().getControl(controlType);
}
return null;
}
private void hoverCardOutline() {
if (app.getView() instanceof GameView gameView) {
CardControl control = checkHover(gameView.getGuiHandler().getCardLayerCamera(), gameView.getGuiHandler().getCardLayer().getRootNode(), CardControl.class);
if (control != null) {
if(control != hoverCard){
hoverCardOff();
hoverCard = control;
hoverCard.outline();
}
}
else hoverCardOff();
}
}
private void hoverCardOff() {
if (hoverCard != null) hoverCard.deOutline();
hoverCard = null;
}
private Vector3f getMousePos(Camera cam){
Vector2f mousePositionScreen = inputManager.getCursorPosition();
return cam.getWorldCoordinates(mousePositionScreen, 0);
}
public float getRotation() {
return (rotationAngle / 2) % 360;
}

View File

@@ -81,9 +81,8 @@ private void handleGame(Notification notification) {
// Handle DicingNotification
} else if (notification instanceof DrawCardNotification) {
// Handle DrawCardNotification
} else if (notification instanceof HomeMoveNotification) {
HomeMoveNotification n = (HomeMoveNotification)notification;
gameView.getBoardHandler().moveHomePiece(n.getPieceId(), n.getHomeIndex());
} else if (notification instanceof HomeMoveNotification home) {
gameView.getBoardHandler().moveHomePiece(home.getPieceId(), home.getHomeIndex());
} else if (notification instanceof InterruptNotification) {
// Handle InterruptNotification
} else if (notification instanceof MovePieceNotification) {

View File

@@ -66,6 +66,9 @@ private void initMap() {
this.waitingPiecesMap = new HashMap<>();
this.pieceColor = new HashMap<>();
List<AssetOnMap> assetOnMaps = MapLoader.loadMap(MAP_NAME);
for (AssetOnMap assetOnMap : assetOnMaps) {

View File

@@ -54,6 +54,7 @@ private void hideOutlineFilterEffect(Spatial model) {
outlineFilter.getOutlinePreFilter().setEnabled(false);
fpp.removeFilter(outlineFilter);
outlineViewport.detachScene(model);
outlineViewport.clearProcessors();
renderManager.removePreView(outlineViewport);
outlineViewport = null;
}

View File

@@ -10,15 +10,19 @@
import pp.mdga.client.board.Outline.SelectObjectOutliner;
public class OutlineControl extends AbstractControl {
private static final int OUTLINE_THICKNESS = 4;
public final SelectObjectOutliner outlineOwn;
private int thickness = 4;
private final SelectObjectOutliner outlineOwn;
public OutlineControl(MdgaApp app, FilterPostProcessor fpp){
outlineOwn = new SelectObjectOutliner(OUTLINE_THICKNESS, fpp, app.getRenderManager(), app.getAssetManager(), app.getCamera());
outlineOwn = new SelectObjectOutliner(thickness, fpp, app.getRenderManager(), app.getAssetManager(), app.getCamera());
}
public OutlineControl(MdgaApp app, FilterPostProcessor fpp, Camera cam){
outlineOwn = new SelectObjectOutliner(OUTLINE_THICKNESS, fpp, app.getRenderManager(), app.getAssetManager(), cam);
outlineOwn = new SelectObjectOutliner(thickness, fpp, app.getRenderManager(), app.getAssetManager(), cam);
}
public OutlineControl(MdgaApp app, FilterPostProcessor fpp, Camera cam, int thickness){
outlineOwn = new SelectObjectOutliner(thickness, fpp, app.getRenderManager(), app.getAssetManager(), cam);
}

View File

@@ -11,14 +11,14 @@
public class CardControl extends OutlineControl {
private static final ColorRGBA OUTLINE_COLOR = ColorRGBA.White;
private static final ColorRGBA OUTLINE_COLOR = ColorRGBA.Yellow;
private static final int OUTLINE_THICKNESS = 7;
public CardControl(MdgaApp app, FilterPostProcessor fpp, Camera cam){
super(app, fpp, cam);
super(app, fpp, cam, OUTLINE_THICKNESS);
}
public void outline(){
super.outline(OUTLINE_COLOR);
}
}

View File

@@ -88,4 +88,8 @@ public void deleteCard(Spatial spatial){
public Camera getOverlayCam(){
return overlayCam;
}
public Node getRootNode(){
return root;
}
}

View File

@@ -33,15 +33,17 @@ public class GuiHandler {
private final FilterPostProcessor fpp;
Texture2D backTexture;
private Camera cardLayerCamera;
public GuiHandler(MdgaApp app, Texture2D backTexture) {
this.app = app;
this.fpp = new FilterPostProcessor(app.getAssetManager());
this.backTexture = backTexture;
cardLayerCamera = createOverlayCam();
}
public void init(){
cardLayer = new CardLayer(fpp, createOverlayCam(), backTexture);
cardLayer = new CardLayer(fpp, cardLayerCamera, backTexture);
app.getStateManager().attach(cardLayer);
ownCardsMap = new HashMap<>();
playerFont = app.getAssetManager().loadFont("Fonts/Gunplay.fnt");
@@ -167,7 +169,14 @@ public void test(){
addCard(BonusCard.TURBO, UUID.randomUUID());
addCard(BonusCard.SWAP, UUID.randomUUID());
ownCardsMap.get(uuid).outline();
// ownCardsMap.get(uuid).outline();
}
public Camera getCardLayerCamera() {
return cardLayerCamera;
}
public CardLayer getCardLayer(){
return cardLayer;
}
}

View File

@@ -69,19 +69,11 @@ public void onEnter() {
boardHandler.addPlayer(Color.AIRFORCE, test);
boardHandler.movePieceStart(player0, 0);
boardHandler.outline(player0, true);
// boardHandler.outline(player0, true);
boardHandler.outline(10);
// boardHandler.outline(10);
app.getInputManager().addMapping("Test", new KeyTrigger(KeyInput.KEY_J));
app.getInputManager().addListener(new ActionListener() {
@Override
public void onAction(String name, boolean isPressed, float tpf) {
if(name.equals("Test") && isPressed){
guiHandler.test();
}
}
}, "Test");
guiHandler.test();
}
@Override
@@ -118,4 +110,8 @@ private void leaveGame() {
public BoardHandler getBoardHandler() {
return boardHandler;
}
public GuiHandler getGuiHandler() {
return guiHandler;
}
}