⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplemenu2d.java

📁 Vyger offers a D & D and Rogue-like environment in a graphical online roleplay game.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     }

 /*------------------------------------------------------------------------------------*/

  /** To show this menu2D at the specified screen point.
   * @param p screen point
   */
     public void show( Point p ) {
         menuDrawable.setNextPosition( p.x, p.y );

         if(!isVisible && menuManager!=null) {
            menuDrawable.animateMenu();
            menuDrawable.tick();
            menuManager.getGraphicsDirector().addDrawable( menuDrawable );
            isVisible=true;
         }
     }

 /*------------------------------------------------------------------------------------*/

  /** To hide this menu2D.
   */
     public void hide() {
         if(isVisible && menuManager!=null) {
            menuManager.getGraphicsDirector().removeDrawable( menuDrawable );
            isVisible=false;
            selectedItemIndex=-1;
            firstItemIndex=0;
            isFirstIndexArrow=false;
            scrollEnabled = false;

            hideSubMenus();
         }
     }

 /*------------------------------------------------------------------------------------*/

  /** To hide this menu's sub-menus.
   */
     protected void hideSubMenus() {
       // We hide all the other sub-menus
          for( int i=0; i<items.length; i++ )
               if( items[i].link !=null )
                   items[i].link.hide();
     }

 /*------------------------------------------------------------------------------------*/

  /** Tells if this menu is visible on screen.
   * @return true if it's visible, false otherwise.
   */
     public boolean isVisible() {
        return isVisible;
     }

 /*------------------------------------------------------------------------------------*/

  /** To get the menu name.
   * @return the menu's name.
   */
     public String getName() {
       return name;
     }

 /*------------------------------------------------------------------------------------*/
  /** To find a menu by its name. The search is performed also among sub-menus.
   * @param menuName the menu's name to search
   * @return the menu if found, null if not.
   */
     public Menu2D findByName(String menuName) {
     	if(menuName.equals(name))
     	   return this;

       // search among sub-menus
         for( int i=0; i<items.length; i++ )
              if( items[i].link !=null ) {
              	  Menu2D menu = items[i].link.findByName(menuName);
              	  if(menu!=null) return menu;
              }

         return null; // not found
     }

 /*------------------------------------------------------------------------------------*/

  /** To process a mouse event.
   * @param mEvent the mouse event received on this menu
   * @return true if the event was processed by us or one of our sub-menus, false
   *         if the event was not for us.
   */
    public boolean mouseClicked( MouseEvent mEvent ) {
        if(!isVisible)
           return false;

      // is it a click on one of our sub-menus ?    
         int maxIndex = items.length;
        
         if(maxIndex>MAX_ITEMS_DISPLAYED)
            maxIndex = firstItemIndex + MAX_ITEMS_DISPLAYED;

         for( int i=firstItemIndex; i<maxIndex; i++ )
              if( items[i].link !=null && items[i].link.mouseClicked(mEvent) )
                  return true; // one of our sub-menus received the event

      // is the event for us ?
         if( menuDrawable.contains( mEvent.getX(), mEvent.getY() ) ) {
           // ok the event is for us !
           // we ask which item is selected...
             int index = menuDrawable.getItemAt( mEvent.getY() );
             
             if(index<firstItemIndex || maxIndex<=index ) return true;

           // need to update the first index displayed ?
             if( index==firstItemIndex && ( firstItemIndex!=0 || isFirstIndexArrow ) ) {
                 hideSubMenus();

                 if( isFirstIndexArrow && firstItemIndex==0 )
                    isFirstIndexArrow = false;
                 else
                    firstItemIndex--; // backward navigation

                 return true;
             }
             
             if( index==maxIndex-1 && index<items.length-1 ) {
                 hideSubMenus();

                 if( !isFirstIndexArrow && firstItemIndex==0 )
                    isFirstIndexArrow = true;
                 else
                    firstItemIndex++; // forward navigation

                 return true;
             }

             if( items[index].itemName.equals("-") ) return true;

             if( !items[index].isEnabled ) return true;

           // item is a link
             if( items[index].link!=null ) {

                 if( !items[index].link.isVisible() ) {
                     hideSubMenus();

                  // We display the newly selected menu
                     int x = menuDrawable.getX()+menuDrawable.getWidth()+1;
                     int y = menuDrawable.getItemY(index);

                     items[index].link.menuDrawable.setParentRectangle( menuDrawable.getRectangle() );
                     items[index].link.show( new Point(x,y) );
                     return true;
                 }
                 else {
                     items[index].link.hide();
                     timeStamp = System.currentTimeMillis()+1000; // to avoid our menu to re-appear
                     return true; // we hide the linked menu
                 }
             }

           // ok, we have a click on an item !
           // we generate an event on our menu listeners.
             hideSubMenus();
             menuManager.dispatchEvent( new Menu2DEvent( this, items[index].itemName ) );
             return true;
         }
         
         return false;
    }

 /*------------------------------------------------------------------------------------*/

  /** To call when the mouse cursor is moved.
   * @param x mouse's x
   * @param y mouse's y
   */
    public boolean mouseMoved( int x, int y ) {

         if(!isVisible)
            return false;

      // is it a click on one of our sub-menus ?
         int maxIndex = items.length;
        
         if(maxIndex>MAX_ITEMS_DISPLAYED)
            maxIndex = firstItemIndex + MAX_ITEMS_DISPLAYED;

         for( int i=firstItemIndex; i<maxIndex; i++ )
              if( items[i].link !=null && items[i].link.mouseMoved( x, y ) )
                  return true; // one of our sub-menus received the event

      // is the event for us ?
         long now = System.currentTimeMillis();

         if( menuDrawable.contains( x, y ) ) {
             selectedItemIndex = menuDrawable.getItemAt( y );

             if(selectedItemIndex<firstItemIndex || maxIndex<=selectedItemIndex ) return true;

             if( selectedItemIndex==firstItemIndex && ( firstItemIndex!=0 ||
                 isFirstIndexArrow ) ) {

                 if(!scrollEnabled && now-timeStamp < MIN_TIME_BEFORE_SCROLL)
                    return true;

                 if(now-timeStamp < MIN_TIME_BETWEEN_SCROLL)
                    return true;

                 scrollEnabled=true;
                 timeStamp = now;
                 hideSubMenus();

                 if( isFirstIndexArrow && firstItemIndex==0 )
                    isFirstIndexArrow = false;
                 else
                    firstItemIndex--; // backward navigation

                 return true;
             }

             if( selectedItemIndex==maxIndex-1 && selectedItemIndex<items.length-1 ) {

                 if(!scrollEnabled && now-timeStamp < MIN_TIME_BEFORE_SCROLL)
                    return true;

                 if(now-timeStamp < MIN_TIME_BETWEEN_SCROLL)
                    return true;

                 scrollEnabled=true;
                 timeStamp = now;
                 hideSubMenus();

                 if( !isFirstIndexArrow && firstItemIndex==0 )
                    isFirstIndexArrow = true;
                 else
                    firstItemIndex++; // forward navigation

                 return true;
             }

             scrollEnabled=false; // cancel scrolling

             if( items[selectedItemIndex].itemName.equals("-") ) return true;
             if( !items[selectedItemIndex].isEnabled ) return true;

           // item is a link
             if( items[selectedItemIndex].link!=null ) {

                 if( !items[selectedItemIndex].link.isVisible() ) {

                     if(now-timeStamp < MIN_TIME_BEFORE_MENU)
                        return true;

                     hideSubMenus();

                  // We display the newly selected menu
                     int xi = menuDrawable.getX()+menuDrawable.getWidth()+1;
                     int yi = menuDrawable.getItemY(selectedItemIndex);

                     items[selectedItemIndex].link.menuDrawable.setParentRectangle( menuDrawable.getRectangle() );
                     items[selectedItemIndex].link.show( new Point(xi,yi) );
                 }
             }

             timeStamp = now; // reset time-stamp
             return true;
         }

         return false;
    }

 /*------------------------------------------------------------------------------------*/

  /** To call when the mouse cursor is dragged.
   * @param dx mouse's dx
   * @param dy mouse's dy
   * @param startsNow tells if the drag movement is just about to start
   */
    public boolean mouseDragged( int dx, int dy, boolean startsNow ) {

         if(!isVisible)
            return false;

         for( int i=0; i<items.length; i++ )
               if( items[i].link !=null )
                   items[i].link.mouseDragged(dx,dy,startsNow);

         if(startsNow) {
            dragFromX = menuDrawable.getX();
            dragFromY = menuDrawable.getY();
            return true;
         }

         menuDrawable.setNextPosition( dragFromX + dx, dragFromY + dy );
         return true;
    }

 /*------------------------------------------------------------------------------------*/

  /** To get the available items.
   * @return available items a null length array if none.
   */
    protected SimpleMenu2DItem[] getItems() {
       return items;
    }

 /*------------------------------------------------------------------------------------*/

  /** To get the currently selected index
   * @return index
   */
    public int getSelectedItemIndex() {
        return selectedItemIndex;
    }

 /*------------------------------------------------------------------------------------*/

  /** To get the index of the first item displayed.
   * @return index
   */
    public int getFirstItemIndex() {
        return firstItemIndex;
    }

 /*------------------------------------------------------------------------------------*/

  /** To tell if the first item to display is an arrow.
   * @return index
   */
    public boolean isFirstIndexArrow() {
        return isFirstIndexArrow;
    }

 /*------------------------------------------------------------------------------------*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -