It is currently 05 Nov 2025, 02:32
   
Text Size

UI Improvements, Round 2: Match UI

Post MTG Forge Related Programming Questions Here

Moderators: timmermac, Agetian, friarsol, Blacksmith, KrazyTheFox, CCGHQ Admins

Re: UI Improvements, Round 2: match UI

Postby slapshot5 » 26 Nov 2011, 02:50

The key mapping stuff has some weird things:

1. concede game has a weird symbol
2. I assume card picture and card details are Ctrl+P and Ctrl+D. We should show that instead of ^P and ^D.

Screen shot 2011-11-25 at 8.32.53 PM.png


-slapshot5
slapshot5
Programmer
 
Posts: 1391
Joined: 03 Jan 2010, 17:47
Location: Mac OS X
Has thanked: 25 times
Been thanked: 68 times

Re: UI Improvements, Round 2: match UI

Postby Sloth » 27 Nov 2011, 18:22

Just did a first test. Good work Doublestrike! =D>

I like the feature to few the opponents hand by clicking on it (Dev mode only). :D
User avatar
Sloth
Programmer
 
Posts: 3498
Joined: 23 Jun 2009, 19:40
Has thanked: 125 times
Been thanked: 507 times

Re: UI Improvements, Round 2: match UI

Postby Sloth » 28 Nov 2011, 09:32

A few things i would like to see changed:

a. The card details should always be visible (and not picture or details), a lot of additional info is displayed there: damage, temporary keywords and abilities, remembered objects, regeneration shields, etc.

b. The main phases should be represented in the phase display.

c. Selecting a player should include the picture not only the life points.

d. When a spell or ability is played the picture of the source card should be displayed in the picture panel until the mouse is moved on another card.

e. Spells and abilities on the stack had a box in the color of their source card around them and the letters were also in this color (the old design can probably be improved, but the general info was nice).
User avatar
Sloth
Programmer
 
Posts: 3498
Joined: 23 Jun 2009, 19:40
Has thanked: 125 times
Been thanked: 507 times

Re: UI Improvements, Round 2: match UI

Postby Sloth » 28 Nov 2011, 10:08

Bugs i found:

a. When i try to use the old GUI, i get this error after the coin toss result:

| Open
forge.GuiDisplay cannot be cast to forge.view.match.ViewTopLevel


Version:
Forge version SVN

OS: Windows XP Version: 5.1 Architecture: x86

Java Version: 1.6.0_27 Vendor: Sun Microsystems Inc.

Detailed error trace:
java.lang.ClassCastException: forge.GuiDisplay cannot be cast to forge.view.match.ViewTopLevel
at forge.PhaseUtil.visuallyActivatePhase(PhaseUtil.java:639)
at forge.Phase.nextPhase(Phase.java:520)
at forge.MyObservable.updateObservers(MyObservable.java:27)
at forge.gui.input.InputControl.resetInput(InputControl.java:127)
at forge.gui.input.Input.stop(Input.java:83)
at forge.gui.input.InputMulligan.end(InputMulligan.java:191)
at forge.gui.input.InputMulligan.selectButtonOK(InputMulligan.java:48)
at forge.GuiInput.selectButtonOK(GuiInput.java:68)
at forge.GuiDisplay.okButtonActionPerformed(GuiDisplay.java:1419)
at forge.GuiDisplay.access$25(GuiDisplay.java:1418)
at forge.GuiDisplay$33.actionPerformed(GuiDisplay.java:1139)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)


b. the player info "draw per turn" is actually the value of cards "drawn this turn".
User avatar
Sloth
Programmer
 
Posts: 3498
Joined: 23 Jun 2009, 19:40
Has thanked: 125 times
Been thanked: 507 times

Re: UI Improvements, Round 2: match UI

Postby slapshot5 » 28 Nov 2011, 13:38

A few more things:
1. Combat text needs same treatment as Stack text (white, etc…)
2. Cards in my hand don't have nice round edges like they do on the battlefield
3. Card detail pane can split power/toughness onto 2 separate lines
4. Mana pool in the player view always shows 99. (Maybe I mentioned that already? Dunno.) I've been using this in ViewField:

Code: Select all
//mana
        ManaPool m = p0.getManaPool();
        getLblBlack().setText("" +m.getAmountOfColor(Constant.Color.BLACK));
        getLblBlue().setText("" +m.getAmountOfColor(Constant.Color.BLUE));
        getLblGreen().setText("" +m.getAmountOfColor(Constant.Color.GREEN));
        getLblRed().setText("" +m.getAmountOfColor(Constant.Color.RED));
        getLblWhite().setText("" +m.getAmountOfColor(Constant.Color.WHITE));
        getLblColorless().setText("" +m.getAmountOfColor(Constant.Color.COLORLESS));
Edit: And update needs to be called from a few places where mana is added to the pool...

-slapshot5
slapshot5
Programmer
 
Posts: 1391
Joined: 03 Jan 2010, 17:47
Location: Mac OS X
Has thanked: 25 times
Been thanked: 68 times

Re: UI Improvements, Round 2: match UI

Postby Hellfish » 28 Nov 2011, 19:58

Looks sweet! Played a few games and took some notes, first some opinions:
  1. I really miss the ability to resize the different areas of the window, especially when switching between my desktop and a laptop.
  2. Closing the window exits Forge and does not concede as I'm used to. (This has been the case with the winlose frame for a while, exiting instead of going to Main window or quest window or wherever you should be inside forge)
  3. A customizable "Pass Priority" hotkey would be nice. I know of Space/Enter of course but you know, options! :)

As for actual bugs, it turns out most of them have already been reported or even fixed :D :
  1. When viewing the graveyard or exile, the detail or image view does not update to show the card. (In fact, when any card list is presented, the detail or image view does not update)
  2. The end turn button doesn't seem to do anything.
  3. Clicking my flashback button doesn't do anything, even with flashback cards in the grave.Makes my Burning Vengeance deck kinda impotent :lol:

Thanks for all your work!
So now you're
Screaming for the blood of the cookie monster
Evil puppet demon of obesity
Time to change the tune of his fearful ballad
C is for "Lettuce," that's good enough for me
User avatar
Hellfish
Programmer
 
Posts: 1297
Joined: 07 Jun 2009, 10:41
Location: South of the Pumphouse
Has thanked: 110 times
Been thanked: 169 times

Re: UI Improvements, Round 2: match UI

Postby Doublestrike » 28 Nov 2011, 23:53

Hi everyone, just checking in after the downtime.

Too much stuff to address immediately, so I'll attack this stuff one by one and keep everyone filled in. Of course, if anyone else wants to lend a hand, they're more than welcome :) I pushed hard to get it to a alpha state, so it's not perfect, but it's a start.

Thanks for the feedback, hopefully we can get this to a point where everyone is (mostly) happy. At day job right now, so fixes will start in 10 hours or so.
Last edited by Doublestrike on 29 Nov 2011, 00:09, edited 3 times in total.
---
A joke is a very serious thing.
User avatar
Doublestrike
UI Programmer
 
Posts: 715
Joined: 08 Aug 2011, 09:07
Location: Bali
Has thanked: 183 times
Been thanked: 161 times

Re: UI Improvements, Round 2: match UI

Postby Doublestrike » 28 Nov 2011, 23:56

concede game has a weird symbol
All dock icons can be changed per skin, in the file called "sprite.png". It's an 80 x 80 px subimage. Moomarc, maybe might manufacture magnificent masterpieces for the icons.

=====
EDIT

....never mind, I see what you meant. #-o
Last edited by Doublestrike on 29 Nov 2011, 12:30, edited 1 time in total.
---
A joke is a very serious thing.
User avatar
Doublestrike
UI Programmer
 
Posts: 715
Joined: 08 Aug 2011, 09:07
Location: Bali
Has thanked: 183 times
Been thanked: 161 times

Re: UI Improvements, Round 2: match UI

Postby Doublestrike » 28 Nov 2011, 23:58

The Mana things always show "99", even if the mana pool is empty.
Thanks for that quick fix, I'll have a look. I was waiting to implement this because I'd like the "mana pool" card to be removed altogether.
Last edited by Doublestrike on 29 Nov 2011, 00:02, edited 1 time in total.
---
A joke is a very serious thing.
User avatar
Doublestrike
UI Programmer
 
Posts: 715
Joined: 08 Aug 2011, 09:07
Location: Bali
Has thanked: 183 times
Been thanked: 161 times

Re: UI Improvements, Round 2: match UI

Postby Doublestrike » 29 Nov 2011, 00:00

I assume card picture and card details are Ctrl+P and Ctrl+D. We should show that instead of ^P and ^D.
Hmmm, on my system it says "Ctrl". That one should be quickly fixable in

forge.control.match > ControlDock.java

but I'm not sure what the problem is immediately.
---
A joke is a very serious thing.
User avatar
Doublestrike
UI Programmer
 
Posts: 715
Joined: 08 Aug 2011, 09:07
Location: Bali
Has thanked: 183 times
Been thanked: 161 times

Re: UI Improvements, Round 2: match UI

Postby Jaedayr » 29 Nov 2011, 00:00

Not sure if this is UI related or not but will post here so you can check. I conceded first game, clicked continue and Forge closed. This was on the Eclipse console.

Code: Select all
ViewTopLevel > getCard: Something should happen here!
java.lang.Exception
   at forge.view.match.ViewTopLevel.setCard(ViewTopLevel.java:531)
   at forge.gui.GuiUtils$1.valueChanged(GuiUtils.java:359)
   at javax.swing.JList.fireSelectionValueChanged(Unknown Source)
   at javax.swing.JList$ListSelectionHandler.valueChanged(Unknown Source)
   at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
   at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
   at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
   at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
   at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
   at javax.swing.DefaultListSelectionModel.setSelectionInterval(Unknown Source)
   at javax.swing.JList.setSelectedIndex(Unknown Source)
   at forge.gui.ListChooser.show(ListChooser.java:349)
   at forge.gui.GuiUtils.getChoices(GuiUtils.java:363)
   at forge.gui.GuiUtils.getChoiceOptional(GuiUtils.java:247)
   at forge.control.match.ControlField$ZoneAction.actionPerformed(ControlField.java:406)
   at forge.control.match.ControlField$7.mousePressed(ControlField.java:248)
   at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
   at java.awt.Component.processMouseEvent(Unknown Source)
   at javax.swing.JComponent.processMouseEvent(Unknown Source)
   at java.awt.Component.processEvent(Unknown Source)
   at java.awt.Container.processEvent(Unknown Source)
   at java.awt.Component.dispatchEventImpl(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Window.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
   at java.awt.EventQueue.access$000(Unknown Source)
   at java.awt.EventQueue$1.run(Unknown Source)
   at java.awt.EventQueue$1.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue$2.run(Unknown Source)
   at java.awt.EventQueue$2.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue.dispatchEvent(Unknown Source)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.run(Unknown Source)
ViewTopLevel > getCard: Something should happen here!
java.lang.Exception
   at forge.view.match.ViewTopLevel.setCard(ViewTopLevel.java:531)
   at forge.gui.GuiUtils$1.valueChanged(GuiUtils.java:359)
   at javax.swing.JList.fireSelectionValueChanged(Unknown Source)
   at javax.swing.JList$ListSelectionHandler.valueChanged(Unknown Source)
   at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
   at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
   at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
   at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
   at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
   at javax.swing.DefaultListSelectionModel.setSelectionInterval(Unknown Source)
   at javax.swing.JList.setSelectionInterval(Unknown Source)
   at javax.swing.plaf.basic.BasicListUI$Handler.adjustSelection(Unknown Source)
   at javax.swing.plaf.basic.BasicListUI$Handler.mousePressed(Unknown Source)
   at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
   at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
   at java.awt.Component.processMouseEvent(Unknown Source)
   at javax.swing.JComponent.processMouseEvent(Unknown Source)
   at java.awt.Component.processEvent(Unknown Source)
   at java.awt.Container.processEvent(Unknown Source)
   at java.awt.Component.dispatchEventImpl(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Window.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
   at java.awt.EventQueue.access$000(Unknown Source)
   at java.awt.EventQueue$1.run(Unknown Source)
   at java.awt.EventQueue$1.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue$2.run(Unknown Source)
   at java.awt.EventQueue$2.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue.dispatchEvent(Unknown Source)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.Dialog$1.run(Unknown Source)
   at java.awt.Dialog$3.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.awt.Dialog.show(Unknown Source)
   at java.awt.Component.show(Unknown Source)
   at java.awt.Component.setVisible(Unknown Source)
   at java.awt.Window.setVisible(Unknown Source)
   at java.awt.Dialog.setVisible(Unknown Source)
   at forge.gui.ListChooser.show(ListChooser.java:360)
   at forge.gui.GuiUtils.getChoices(GuiUtils.java:363)
   at forge.gui.GuiUtils.getChoiceOptional(GuiUtils.java:247)
   at forge.control.match.ControlField$ZoneAction.actionPerformed(ControlField.java:406)
   at forge.control.match.ControlField$7.mousePressed(ControlField.java:248)
   at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
   at java.awt.Component.processMouseEvent(Unknown Source)
   at javax.swing.JComponent.processMouseEvent(Unknown Source)
   at java.awt.Component.processEvent(Unknown Source)
   at java.awt.Container.processEvent(Unknown Source)
   at java.awt.Component.dispatchEventImpl(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Window.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
   at java.awt.EventQueue.access$000(Unknown Source)
   at java.awt.EventQueue$1.run(Unknown Source)
   at java.awt.EventQueue$1.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue$2.run(Unknown Source)
   at java.awt.EventQueue$2.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue.dispatchEvent(Unknown Source)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.run(Unknown Source)
ViewTopLevel > getCard: Something should happen here!
java.lang.Exception
   at forge.view.match.ViewTopLevel.setCard(ViewTopLevel.java:531)
   at forge.gui.GuiUtils$1.valueChanged(GuiUtils.java:359)
   at javax.swing.JList.fireSelectionValueChanged(Unknown Source)
   at javax.swing.JList$ListSelectionHandler.valueChanged(Unknown Source)
   at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
   at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
   at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(Unknown Source)
   at javax.swing.JList.setValueIsAdjusting(Unknown Source)
   at javax.swing.plaf.basic.BasicListUI$Handler.mouseReleased(Unknown Source)
   at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
   at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
   at java.awt.Component.processMouseEvent(Unknown Source)
   at javax.swing.JComponent.processMouseEvent(Unknown Source)
   at java.awt.Component.processEvent(Unknown Source)
   at java.awt.Container.processEvent(Unknown Source)
   at java.awt.Component.dispatchEventImpl(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Window.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
   at java.awt.EventQueue.access$000(Unknown Source)
   at java.awt.EventQueue$1.run(Unknown Source)
   at java.awt.EventQueue$1.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue$2.run(Unknown Source)
   at java.awt.EventQueue$2.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue.dispatchEvent(Unknown Source)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.Dialog$1.run(Unknown Source)
   at java.awt.Dialog$3.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.awt.Dialog.show(Unknown Source)
   at java.awt.Component.show(Unknown Source)
   at java.awt.Component.setVisible(Unknown Source)
   at java.awt.Window.setVisible(Unknown Source)
   at java.awt.Dialog.setVisible(Unknown Source)
   at forge.gui.ListChooser.show(ListChooser.java:360)
   at forge.gui.GuiUtils.getChoices(GuiUtils.java:363)
   at forge.gui.GuiUtils.getChoiceOptional(GuiUtils.java:247)
   at forge.control.match.ControlField$ZoneAction.actionPerformed(ControlField.java:406)
   at forge.control.match.ControlField$7.mousePressed(ControlField.java:248)
   at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
   at java.awt.Component.processMouseEvent(Unknown Source)
   at javax.swing.JComponent.processMouseEvent(Unknown Source)
   at java.awt.Component.processEvent(Unknown Source)
   at java.awt.Container.processEvent(Unknown Source)
   at java.awt.Component.dispatchEventImpl(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Window.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
   at java.awt.EventQueue.access$000(Unknown Source)
   at java.awt.EventQueue$1.run(Unknown Source)
   at java.awt.EventQueue$1.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue$2.run(Unknown Source)
   at java.awt.EventQueue$2.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue.dispatchEvent(Unknown Source)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.run(Unknown Source)
Correcting zone for Ajani's Pridemate (80)
Jaedayr
Tester
 
Posts: 523
Joined: 08 Jul 2010, 00:06
Has thanked: 16 times
Been thanked: 13 times

Re: UI Improvements, Round 2: match UI

Postby Doublestrike » 29 Nov 2011, 00:04

Jaedayr wrote:Not sure if this is UI related or not but will post here so you can check. I conceded first game, clicked continue and Forge closed. This was on the Eclipse console.
Aha! I'm trying to figure out when that method is called. That's the last thing I couldn't put my finger on. :? It is indeed UI related, has to do with the Display interface, and it's on the fix list.
---
A joke is a very serious thing.
User avatar
Doublestrike
UI Programmer
 
Posts: 715
Joined: 08 Aug 2011, 09:07
Location: Bali
Has thanked: 183 times
Been thanked: 161 times

Re: UI Improvements, Round 2: match UI

Postby Doublestrike » 29 Nov 2011, 00:11

The end turn button doesn't seem to do anything.
That's an easy one - I didn't take the time to dig around in the code for a good way to do this. It's easy to implement but I'm not intimate with the pass priority stuff. If somebody who knows that stuff could drop in a few appropriate lines, it will work great. Should be in forge.control.match > ControlDock.java. Otherwise, I'll throw it on my list and get to it eventually.
---
A joke is a very serious thing.
User avatar
Doublestrike
UI Programmer
 
Posts: 715
Joined: 08 Aug 2011, 09:07
Location: Bali
Has thanked: 183 times
Been thanked: 161 times

Re: UI Improvements, Round 2: match UI

Postby slowe » 29 Nov 2011, 01:53

I was writing in with some bugs and observations when the forum went down, which was disheartening, especially because Forge has been unplayable for me since the UI updates. :(
Since no one else mentioned a similar problem, I thought it might have something to do with modifications in my copy of the code, but SoulStorm seems to be experiencing the same thing. Here's what I'm seeing:

- If I try to play a match with the old GUI, it crashes at end of mulligans. See trace:
Code: Select all
java.lang.ClassCastException: forge.GuiDisplay cannot be cast to forge.view.match.ViewTopLevel
   at forge.PhaseUtil.visuallyActivatePhase(PhaseUtil.java:639)
   at forge.Phase.nextPhase(Phase.java:520)
   at forge.MyObservable.updateObservers(MyObservable.java:27)
   at forge.gui.input.InputControl.resetInput(InputControl.java:127)
   at forge.gui.input.Input.stop(Input.java:83)
   at forge.gui.input.InputMulligan.end(InputMulligan.java:191)
   at forge.gui.input.InputMulligan.selectButtonOK(InputMulligan.java:48)
...
- When I play a match with the new GUI, when I press "Continue" or "Restart" at the end of a game, Forge terminates completely and silently -- no messages or logs anywhere that I can find. :shock:

- What do populate stderr are the message and stack trace below. They are repeated whenever a spell or ability is put on the stack and whenever you select a card in a list (e.g. when duressing or tutoring) - at this point, the old GUI would show the card at top-right, but new GUI is just complaining and spamming a stack trace. The comment for the method says the controller class handles this, but I don't see it happening; I have to mouse over the spell/ability on the stack to see its picture. Also, this occurs ViewTopLevel.setCard(), but the debug message is copied from getCard() without change. :roll:
Console output | Open
ViewTopLevel > getCard: Something should happen here!
java.lang.Exception
at forge.view.match.ViewTopLevel.setCard(ViewTopLevel.java:433)
at forge.gui.GuiUtils$1.valueChanged(GuiUtils.java:322)
at javax.swing.JList.fireSelectionValueChanged(JList.java:1765)
at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1779)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:388)
at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:398)
at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:442)
at javax.swing.JList.setSelectedIndex(JList.java:2179)
at forge.gui.ListChooser.show(ListChooser.java:336)
at forge.gui.GuiUtils.getChoices(GuiUtils.java:326)
at forge.gui.GuiUtils.getChoiceOptional(GuiUtils.java:227)
at forge.card.abilityfactory.AbilityFactoryChangeZone.changeHiddenOriginResolveHuman(AbilityFactoryChangeZone.java:815)
at forge.card.abilityfactory.AbilityFactoryChangeZone.changeHiddenOriginResolve(AbilityFactoryChangeZone.java:701)
at forge.card.abilityfactory.AbilityFactoryChangeZone.changeZoneResolve(AbilityFactoryChangeZone.java:329)
at forge.card.abilityfactory.AbilityFactoryChangeZone.access$1(AbilityFactoryChangeZone.java:324)
at forge.card.abilityfactory.AbilityFactoryChangeZone$1.resolve(AbilityFactoryChangeZone.java:72)
at forge.card.abilityfactory.AbilityFactory.resolve(AbilityFactory.java:2321)
at forge.MagicStack.resolveStack(MagicStack.java:865)
at forge.Phase.passPriority(Phase.java:825)
at forge.ComputerAIGeneral.stackResponse(ComputerAIGeneral.java:564)
at forge.ComputerAIGeneral.stackNotEmpty(ComputerAIGeneral.java:506)
at forge.ComputerAIInput.think(ComputerAIInput.java:78)
at forge.ComputerAIInput.showMessage(ComputerAIInput.java:54)
at forge.GuiInput.setInput(GuiInput.java:50)
at forge.GuiInput.update(GuiInput.java:36)
at java.util.Observable.notifyObservers(Observable.java:142)
at java.util.Observable.notifyObservers(Observable.java:98)
at forge.MyObservable.updateObservers(MyObservable.java:21)
at forge.gui.input.InputControl.resetInput(InputControl.java:127)
at forge.Phase.passPriority(Phase.java:814)
at forge.gui.input.InputPassPriority.selectButtonOK(InputPassPriority.java:54)
at forge.GuiInput.selectButtonOK(GuiInput.java:68)
at forge.control.match.ControlInput.btnOKActionPerformed(ControlInput.java:81)
at forge.control.match.ControlInput.access$2(ControlInput.java:80)
at forge.control.match.ControlInput$2.actionPerformed(ControlInput.java:41)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener$Actions.actionPerformed(BasicButtonListener.java:287)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1636)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2849)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2884)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2812)
at java.awt.Component.processEvent(Component.java:5815)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:697)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:962)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:834)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661)
at java.awt.Component.dispatchEventImpl(Component.java:4282)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

- If I start a match in quest mode, it uses the new GUI even if I have the old GUI checkbox selected.


As for the interface itself, it's ... very different, so I'm not sure what I can say about it before I'm a little more used to it. A couple things do stick out to me, though. The phase indicator and stop setter is great, but it doesn't list all of the phases, most notably the main phases. There's enough room (with some vertical expansion) to list all the phases, and there's no reason not to. Also, the text in the stack and combat descriptions is small and difficult to read. Finally, the issue with spell/ability sources and cards in lists not showing up automatically in the picture/oracle pane is really frustrating. I've gotten used to watching that corner to see when things go on the stack, so now it's easy to miss what's happening, and if I'm looking at the opponent's hand and don't know what all the cards do, I can't click on them to see.

Hopefully all the little bugs aren't too difficult to work out and you can finish the remaining features soon. Thanks, and good luck!
slowe
 
Posts: 127
Joined: 05 Jan 2010, 14:04
Has thanked: 6 times
Been thanked: 10 times

Re: UI Improvements, Round 2: match UI

Postby slapshot5 » 29 Nov 2011, 04:30

Doublestrike wrote:
I assume card picture and card details are Ctrl+P and Ctrl+D. We should show that instead of ^P and ^D.
Hmmm, on my system it says "Ctrl". That one should be quickly fixable in

forge.control.match > ControlDock.java

but I'm not sure what the problem is immediately.
Pretty sure it's a Mac vs. Windows thing. I'll track this bug down and fix it.

-slapshot5
slapshot5
Programmer
 
Posts: 1391
Joined: 03 Jan 2010, 17:47
Location: Mac OS X
Has thanked: 25 times
Been thanked: 68 times

PreviousNext

Return to Developer's Corner

Who is online

Users browsing this forum: No registered users and 60 guests

Main Menu

User Menu

Our Partners


Who is online

In total there are 60 users online :: 0 registered, 0 hidden and 60 guests (based on users active over the past 10 minutes)
Most users ever online was 9298 on 10 Oct 2025, 12:54

Users browsing this forum: No registered users and 60 guests

Login Form