📄 movementdisplay.java
字号:
buttonsMech.add(butTurn); buttonsMech.add(butUp); buttonsMech.add(butDown); buttonsMech.add(butCharge); buttonsMech.add(butDfa); buttonsMech.add(butLoad); buttonsMech.add(butUnload); buttonsMech.add(butClimbMode); buttonsMech.add(butSearchlight); buttonsMech.add(butHullDown); buttonsMech.add(butSwim); buttonsMech.add(butEject); buttonsMech.add(butFlee); buttonsMech.add(butRAC); //these are last, they won't be used by mechs buttonsMech.add(butDigIn); buttonsMech.add(butFortify); buttonsMech.add(butLayMine); buttonsMech.add(butLower); buttonsMech.add(butRaise); buttonsTank = new ArrayList<JButton>(22); buttonsTank.add(butWalk); buttonsTank.add(butBackup); buttonsTank.add(butTurn); buttonsTank.add(butLoad); buttonsTank.add(butUnload); buttonsTank.add(butCharge); buttonsTank.add(butClimbMode); buttonsTank.add(butSearchlight); buttonsTank.add(butHullDown); buttonsTank.add(butSwim); buttonsTank.add(butEject); buttonsTank.add(butFlee); buttonsTank.add(butRAC); buttonsTank.add(butLayMine); //these are last, they won't be used by tanks buttonsTank.add(butDfa); buttonsTank.add(butUp); buttonsTank.add(butDown); buttonsTank.add(butJump); buttonsTank.add(butDigIn); buttonsTank.add(butFortify); buttonsTank.add(butLower); buttonsTank.add(butRaise); buttonsVtol = new ArrayList<JButton>(22); buttonsVtol.add(butWalk); buttonsVtol.add(butBackup); buttonsVtol.add(butLower); buttonsVtol.add(butRaise); buttonsVtol.add(butTurn); buttonsVtol.add(butLoad); buttonsVtol.add(butUnload); buttonsVtol.add(butSearchlight); buttonsVtol.add(butEject); buttonsVtol.add(butFlee); buttonsVtol.add(butRAC); //these are last, they won't be used by vtol buttonsVtol.add(butHullDown); buttonsVtol.add(butLayMine); buttonsVtol.add(butSwim); buttonsVtol.add(butClimbMode); buttonsVtol.add(butCharge); buttonsVtol.add(butDfa); buttonsVtol.add(butUp); buttonsVtol.add(butDown); buttonsVtol.add(butJump); buttonsVtol.add(butDigIn); buttonsVtol.add(butFortify); buttonsInf = new ArrayList<JButton>(22); buttonsInf.add(butWalk); buttonsInf.add(butJump); buttonsInf.add(butLower); buttonsInf.add(butRaise); buttonsInf.add(butTurn); buttonsInf.add(butClimbMode); buttonsInf.add(butSearchlight); buttonsInf.add(butEject); buttonsInf.add(butFlee); buttonsInf.add(butRAC); buttonsInf.add(butLayMine); buttonsInf.add(butSwim); buttonsInf.add(butDigIn); buttonsInf.add(butFortify); //these are last, they won't be used by infantry buttonsInf.add(butLoad); buttonsInf.add(butUnload); buttonsInf.add(butBackup); buttonsInf.add(butHullDown); buttonsInf.add(butCharge); buttonsInf.add(butDfa); buttonsInf.add(butUp); buttonsInf.add(butDown); // layout button grid panButtons = new JPanel(); buttonLayout = 0; setupButtonPanel(); // layout screen GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout(gridbag); c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; c.weighty = 1.0; c.insets = new Insets(1, 1, 1, 1);// c.gridwidth = GridBagConstraints.REMAINDER;// addBag(clientgui.bv, gridbag, c);// c.weightx = 1.0; c.weighty = 0;// c.gridwidth = 1;// addBag(client.cb.getComponent(), gridbag, c); c.gridwidth = GridBagConstraints.REMAINDER; c.weightx = 0.0; c.weighty = 0.0; addBag(panButtons, gridbag, c); c.weightx = 1.0; c.weighty = 0.0; c.gridwidth = GridBagConstraints.REMAINDER; addBag(panStatus, gridbag, c); clientgui.bv.addKeyListener(this); addKeyListener(this); } private void addBag(JComponent comp, GridBagLayout gridbag, GridBagConstraints c) { gridbag.setConstraints(comp, c); add(comp); comp.addKeyListener(this); } private void setupButtonPanel() { panButtons.removeAll(); panButtons.setLayout(new GridLayout(0, 8)); //choose button order based on entity type ArrayList<JButton> buttonList = buttonsMech; final Entity ce = ce(); if (ce != null) { if (ce instanceof Infantry) buttonList = buttonsInf; else if (ce instanceof VTOL) buttonList = buttonsVtol; else if (ce instanceof Tank) buttonList = buttonsTank; } //should this layout be skipped? (if nothing enabled) boolean ok = false; while (!ok && buttonLayout != 0) { for (int i = buttonLayout * 6; i < (buttonLayout + 1) * 6 && i < buttonList.size(); i++) { if (buttonList.get(i).isEnabled()) { ok = true; break; } } if (!ok) { //skip as nothing was enabled buttonLayout++; if (buttonLayout * 6 >= buttonList.size()) buttonLayout = 0; } } panButtons.add(butNext); for (int i = buttonLayout * 6; i < (buttonLayout + 1) * 6 && i < buttonList.size(); i++) { panButtons.add(buttonList.get(i)); } panButtons.add(butMore); validate(); } /** * Selects an entity, by number, for movement. */ public synchronized void selectEntity(int en) { final Entity ce = client.game.getEntity(en); // hmm, sometimes this gets called when there's no ready entities? if (ce == null) { System.err.println("MovementDisplay: tried to select non-existant entity: " + en); //$NON-NLS-1$ return; } cen = en; clientgui.setSelectedEntityNum(en); clearAllMoves(); updateButtons(); // Update the menu bar. clientgui.getMenuBar().setEntity(ce); clientgui.getBoardView().highlight(ce.getPosition()); clientgui.getBoardView().select(null); clientgui.getBoardView().cursor(null); clientgui.mechD.displayEntity(ce); clientgui.mechD.showPanel("movement"); //$NON-NLS-1$ if (!clientgui.bv.isMovingUnits()) { clientgui.bv.centerOnHex(ce.getPosition()); } } /** * Sets the buttons to their proper states */ private void updateButtons() { final Entity ce = ce(); boolean isMech = (ce instanceof Mech); boolean isInfantry = (ce instanceof Infantry); boolean isProtomech = (ce instanceof Protomech); // ^-- I suppose these should really be methods, a-la Entity.canCharge(), Entity.canDFA()... setWalkEnabled(!ce.isImmobile() && ce.getWalkMP() > 0 && !ce.isStuck()); setJumpEnabled(!ce.isImmobile() && ce.getJumpMP() > 0 && !ce.isStuck()); setSwimEnabled(!ce.isImmobile() && ce.hasUMU() && client.game.getBoard().getHex(ce.getPosition()).containsTerrain(Terrains.WATER)); setBackUpEnabled(butWalk.isEnabled()); setChargeEnabled(ce.canCharge()); setDFAEnabled(ce.canDFA()); if (isInfantry || isProtomech) { if (client.game.containsMinefield(ce.getPosition())) { setClearEnabled(true); } else { setClearEnabled(false); } } else { setClearEnabled(false); } if (ce.getMovementMode() == IEntityMovementMode.HYDROFOIL || ce.getMovementMode() == IEntityMovementMode.NAVAL || ce.getMovementMode() == IEntityMovementMode.SUBMARINE || ce.getMovementMode() == IEntityMovementMode.VTOL || ce.getMovementMode() == IEntityMovementMode.BIPED_SWIM || ce.getMovementMode() == IEntityMovementMode.QUAD_SWIM) { butClimbMode.setEnabled(false); } else { butClimbMode.setEnabled(true); } if (ce instanceof Infantry) { butDigIn.setEnabled(true); butFortify.setEnabled(true); } else { butDigIn.setEnabled(false); butFortify.setEnabled(false); } setTurnEnabled(!ce.isImmobile() && !ce.isStuck() && (ce.getWalkMP() > 0 || ce.getJumpMP() > 0)); if (ce.isProne()) { setGetUpEnabled(!ce.isImmobile() && !ce.isStuck()); setGoProneEnabled(false); setHullDownEnabled(false); } else if (ce.isHullDown()) { setGetUpEnabled(!ce.isImmobile() && !ce.isStuck()); setGoProneEnabled(!ce.isImmobile() && isMech && !ce.isStuck()); setHullDownEnabled(false); } else { setGetUpEnabled(false); setGoProneEnabled(!ce.isImmobile() && isMech && !ce.isStuck()); setHullDownEnabled(ce.canGoHullDown()); } updateProneButtons(); updateRACButton(); updateSearchlightButton(); updateLoadButtons(); updateElevationButtons(); if (isInfantry && ce.hasWorkingMisc(MiscType.F_TOOLS, MiscType.S_VIBROSHOVEL)) butFortify.setEnabled(true); else butFortify.setEnabled(false); if (isInfantry && client.game.getOptions().booleanOption("maxtech_dig_in")) butDigIn.setEnabled(true); else butDigIn.setEnabled(false); setLayMineEnabled(ce.canLayMine()); setFleeEnabled(ce.canFlee()); if (client.game.getOptions().booleanOption("vehicles_can_eject")) { //$NON-NLS-1$ setEjectEnabled((!isInfantry) && !(isMech && ((Mech) ce).getCockpitType() == Mech.COCKPIT_TORSO_MOUNTED) && ce.isActive()); } else { setEjectEnabled(isMech && ((Mech) ce).getCockpitType() != Mech.COCKPIT_TORSO_MOUNTED && ce.isActive()); } setupButtonPanel(); } /** * Enables relevant buttons and sets up for your turn. */ private void beginMyTurn() { setStatusBarText(Messages.getString("MovementDisplay.its_your_turn")); //$NON-NLS-1$ selectEntity(client.getFirstEntityNum()); butDone.setText(Messages.getString("MovementDisplay.Done")); //$NON-NLS-1$ butDone.setEnabled(true); setNextEnabled(true); butMore.setEnabled(true); if (!clientgui.bv.isMovingUnits()) { clientgui.setDisplayVisible(true); } } /** * Clears out old movement data and disables relevant buttons. */ private synchronized void endMyTurn() { final Entity ce = ce(); // end my turn, then. disableButtons();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -