Class LudoGameStackPane

java.lang.Object
javafx.scene.Node
javafx.scene.Parent
javafx.scene.layout.Region
javafx.scene.layout.Pane
javafx.scene.layout.StackPane
edu.ntnu.idi.idatt.view.common.GameStackPane
edu.ntnu.idi.idatt.view.ludo.LudoGameStackPane
All Implemented Interfaces:
javafx.css.Styleable, javafx.event.EventTarget

public class LudoGameStackPane extends GameStackPane
LudoGameStackPane.

Extends GameStackPane to manage the visual representation of a Ludo game board, including the tokens and their movements. It handles placing tokens in their start areas, releasing tokens onto the board, moving tokens between tiles, and returning tokens to the start area when captured.

Animations for token movements are implemented using PathTransition. The class maintains a map of LudoToken objects to their corresponding JavaFX Shape representations. It relies on a LudoGameBoardStackPane for the underlying board graphics.

See Also:
  • Property Summary

    Properties inherited from class javafx.scene.layout.StackPane

    alignment

    Properties inherited from class javafx.scene.layout.Region

    background, border, cacheShape, centerShape, height, insets, maxHeight, maxWidth, minHeight, minWidth, opaqueInsets, padding, prefHeight, prefWidth, scaleShape, shape, snapToPixel, width

    Properties inherited from class javafx.scene.Parent

    needsLayout

    Properties inherited from class javafx.scene.Node

    accessibleHelp, accessibleRoleDescription, accessibleRole, accessibleText, blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip, cursor, depthTest, disabled, disable, effectiveNodeOrientation, effect, eventDispatcher, focused, focusTraversable, focusVisible, focusWithin, hover, id, inputMethodRequests, layoutBounds, layoutX, layoutY, localToParentTransform, localToSceneTransform, managed, mouseTransparent, nodeOrientation, onContextMenuRequested, onDragDetected, onDragDone, onDragDropped, onDragEntered, onDragExited, onDragOver, onInputMethodTextChanged, onKeyPressed, onKeyReleased, onKeyTyped, onMouseClicked, onMouseDragEntered, onMouseDragExited, onMouseDragged, onMouseDragOver, onMouseDragReleased, onMouseEntered, onMouseExited, onMouseMoved, onMousePressed, onMouseReleased, onRotate, onRotationFinished, onRotationStarted, onScrollFinished, onScroll, onScrollStarted, onSwipeDown, onSwipeLeft, onSwipeRight, onSwipeUp, onTouchMoved, onTouchPressed, onTouchReleased, onTouchStationary, onZoomFinished, onZoom, onZoomStarted, opacity, parent, pickOnBounds, pressed, rotate, rotationAxis, scaleX, scaleY, scaleZ, scene, style, translateX, translateY, translateZ, viewOrder, visible
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected double
     
    protected final Map<LudoToken,javafx.scene.shape.Shape>
     

    Fields inherited from class edu.ntnu.idi.idatt.view.common.GameStackPane

    board, boardDimensions, players, playersPane, tilePositionX, tilePositionY, tileSizeX, tileSizeY, TRANSITION_DURATION

    Fields inherited from class javafx.scene.layout.Region

    USE_COMPUTED_SIZE, USE_PREF_SIZE

    Fields inherited from class javafx.scene.Node

    BASELINE_OFFSET_SAME_AS_HEIGHT
  • Constructor Summary

    Constructors
    Constructor
    Description
    Constructs a LudoGameStackPane for the given Ludo game board and list of players.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Adds the visual representations (game pieces) for each player's tokens to the board.
    protected double[]
    Converts logical board coordinates (row, column) to screen coordinates (x, y) for the Ludo game board.
    protected List<Tile>
    getPathTiles(int playerIndex, Tile startTile, Tile endTile)
    Determines the sequence of tiles a Ludo token must traverse to move from a start tile to an end tile, accounting for wrapping around the board and moving onto finish tracks.
    protected void
    Initializes the pane where player tokens will be displayed and moved.
    void
    moveToken(LudoToken token, Tile oldTile, Tile newTile, boolean straightLine, Runnable onFinished)
    Animates the movement of a Ludo token from an old tile to a new tile on the game board.
    void
    Animates the movement of a captured Ludo token back to its start area.
    void
    releaseToken(LudoPlayer player, int tokenId)
    Animates the movement of a player's token from its start area to its designated start tile on the main track.

    Methods inherited from class edu.ntnu.idi.idatt.view.common.GameStackPane

    getAnimationDuration, initialize

    Methods inherited from class javafx.scene.layout.StackPane

    alignmentProperty, clearConstraints, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, getAlignment, getAlignment, getClassCssMetaData, getContentBias, getCssMetaData, getMargin, layoutChildren, requestLayout, setAlignment, setAlignment, setMargin

    Methods inherited from class javafx.scene.layout.Pane

    getChildren

    Methods inherited from class javafx.scene.layout.Region

    backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, computeMaxHeight, computeMaxWidth, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isResizable, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty

    Methods inherited from class javafx.scene.Parent

    getBaselineOffset, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, queryAccessibleAttribute, requestParentLayout, setNeedsLayout, updateBounds

    Methods inherited from class javafx.scene.Node

    accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, executeAccessibleAction, fireEvent, focusedProperty, focusTraversableProperty, focusVisibleProperty, focusWithinProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInitialFocusTraversable, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isFocusVisible, isFocusWithin, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface javafx.css.Styleable

    getStyleableNode
  • Field Details

    • tokenShapeMap

      protected final Map<LudoToken,javafx.scene.shape.Shape> tokenShapeMap
    • tileOffset

      protected double tileOffset
  • Constructor Details

    • LudoGameStackPane

      public LudoGameStackPane(LudoGameBoard board, List<Player> players)
      Constructs a LudoGameStackPane for the given Ludo game board and list of players. Initializes the token-to-shape map and sets up the underlying board view using a LudoGameBoardStackPane.
      Parameters:
      board - The LudoGameBoard to be displayed.
      players - The list of Players (expected to be LudoPlayers) in the game.
  • Method Details

    • initializePlayersPane

      protected void initializePlayersPane()
      Initializes the pane where player tokens will be displayed and moved. It sets up listeners to determine board dimensions and tile sizes once the pane is laid out. If game pieces haven't been added yet, it calls addGamePieces(List).
      Specified by:
      initializePlayersPane in class GameStackPane
    • addGamePieces

      public void addGamePieces(List<Player> players)
      Adds the visual representations (game pieces) for each player's tokens to the board. For each LudoToken of each LudoPlayer, a Shape is created using PlayerTokenFactory, styled, and stored in the tokenShapeMap. Each token is then initially placed in its designated start area using placeTokenInStartArea(Player, LudoToken).
      Specified by:
      addGamePieces in class GameStackPane
      Parameters:
      players - The list of Players whose tokens are to be added.
    • releaseToken

      public void releaseToken(LudoPlayer player, int tokenId)
      Animates the movement of a player's token from its start area to its designated start tile on the main track.
      Parameters:
      player - The LudoPlayer whose token is being released.
      tokenId - The ID of the token to be released (typically 0-3).
    • moveTokenToStartArea

      public void moveTokenToStartArea(Player player, LudoToken token)
      Animates the movement of a captured Ludo token back to its start area. The animation includes a slight delay to visually signify capture before movement.
      Parameters:
      player - The Player who owns the token.
      token - The LudoToken that was captured and is being moved to its start area.
    • moveToken

      public void moveToken(LudoToken token, Tile oldTile, Tile newTile, boolean straightLine, Runnable onFinished)
      Animates the movement of a Ludo token from an old tile to a new tile on the game board. If straightLine is true, the token moves directly. Otherwise, it follows the path defined by getPathTiles(int, Tile, Tile).
      Parameters:
      token - The LudoToken to move.
      oldTile - The Tile the token is currently on.
      newTile - The Tile the token is moving to.
      straightLine - If true, move in a direct line; otherwise, follow the board path.
    • convertCoordinates

      protected double[] convertCoordinates(int[] rc)
      Converts logical board coordinates (row, column) to screen coordinates (x, y) for the Ludo game board.
      Specified by:
      convertCoordinates in class GameStackPane
      Parameters:
      rc - An array containing the row and column (e.g., [row, col]).
      Returns:
      An array containing the x and y screen coordinates (e.g., [x, y]).
    • getPathTiles

      protected List<Tile> getPathTiles(int playerIndex, Tile startTile, Tile endTile)
      Determines the sequence of tiles a Ludo token must traverse to move from a start tile to an end tile, accounting for wrapping around the board and moving onto finish tracks.
      Parameters:
      playerIndex - The index of the player who owns the token.
      startTile - The Tile where the movement begins.
      endTile - The Tile where the movement ends.
      Returns:
      A list of Tile objects representing the path. For direct moves or when start and end are the same, this list might be empty or contain only the end tile.