changed tabs to four spaces

master
melvin 2012-06-16 11:23:14 +08:00
parent ae360c8ce7
commit e55264be16
2 changed files with 239 additions and 242 deletions

View File

@ -13,51 +13,48 @@ import java.util.Set;
public class ImageBattlefieldViewer extends JPanel implements ChoiceViewer { public class ImageBattlefieldViewer extends JPanel implements ChoiceViewer {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private final ViewerInfo viewerInfo; private final ViewerInfo viewerInfo;
private final boolean opponent; private final boolean opponent;
private final ImagePermanentsViewer permanentsViewer; private final ImagePermanentsViewer permanentsViewer;
private final PermanentFilter permanentFilter; private final PermanentFilter permanentFilter;
public ImageBattlefieldViewer(final ViewerInfo viewerInfo,final GameController controller,final boolean opponent) { public ImageBattlefieldViewer(final ViewerInfo viewerInfo,final GameController controller,final boolean opponent) {
this.viewerInfo=viewerInfo;
this.viewerInfo=viewerInfo; this.opponent=opponent;
this.opponent=opponent;
final Theme theme=ThemeFactory.getInstance().getCurrentTheme(); final Theme theme=ThemeFactory.getInstance().getCurrentTheme();
controller.registerChoiceViewer(this); controller.registerChoiceViewer(this);
setOpaque(false); setOpaque(false);
setLayout(new BorderLayout(6,0)); setLayout(new BorderLayout(6,0));
final JPanel leftPanel=new JPanel(new BorderLayout()); final JPanel leftPanel=new JPanel(new BorderLayout());
leftPanel.setOpaque(false); leftPanel.setOpaque(false);
add(leftPanel,BorderLayout.WEST); add(leftPanel,BorderLayout.WEST);
final JLabel iconLabel=new JLabel(theme.getIcon(Theme.ICON_SMALL_BATTLEFIELD)); final JLabel iconLabel=new JLabel(theme.getIcon(Theme.ICON_SMALL_BATTLEFIELD));
iconLabel.setOpaque(true); iconLabel.setOpaque(true);
iconLabel.setBackground(theme.getColor(Theme.COLOR_ICON_BACKGROUND)); iconLabel.setBackground(theme.getColor(Theme.COLOR_ICON_BACKGROUND));
iconLabel.setPreferredSize(new Dimension(24,24)); iconLabel.setPreferredSize(new Dimension(24,24));
iconLabel.setBorder(FontsAndBorders.BLACK_BORDER); iconLabel.setBorder(FontsAndBorders.BLACK_BORDER);
leftPanel.add(iconLabel,BorderLayout.NORTH); leftPanel.add(iconLabel,BorderLayout.NORTH);
permanentsViewer=new ImagePermanentsViewer(controller, opponent); permanentsViewer=new ImagePermanentsViewer(controller, opponent);
add(permanentsViewer,BorderLayout.CENTER); add(permanentsViewer,BorderLayout.CENTER);
permanentFilter=new PermanentFilter(this,controller); permanentFilter=new PermanentFilter(this,controller);
} }
public void update() { public void update() {
permanentsViewer.viewPermanents(permanentFilter.getPermanents(viewerInfo,opponent));
permanentsViewer.viewPermanents(permanentFilter.getPermanents(viewerInfo,opponent)); }
}
@Override
@Override public void showValidChoices(final Set<Object> validChoices) {
public void showValidChoices(final Set<Object> validChoices) { permanentsViewer.showValidChoices(validChoices);
}
permanentsViewer.showValidChoices(validChoices); }
}
}

View File

@ -14,206 +14,206 @@ import java.util.Set;
public class ImagePermanentsViewer extends JPanel { public class ImagePermanentsViewer extends JPanel {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private static final int POSITION_SPACING = 60; private static final int POSITION_SPACING = 60;
private static final int HORIZONTAL_SPACING = 40; private static final int HORIZONTAL_SPACING = 40;
private static final int VERTICAL_SPACING = 30; private static final int VERTICAL_SPACING = 30;
private static final float CARD_WIDTH = (float) CardImagesProvider.CARD_WIDTH; private static final float CARD_WIDTH = (float) CardImagesProvider.CARD_WIDTH;
private static final float CARD_HEIGHT = (float) CardImagesProvider.CARD_HEIGHT; private static final float CARD_HEIGHT = (float) CardImagesProvider.CARD_HEIGHT;
private static final float CARD_ASPECT_RATIO = CARD_WIDTH / CARD_HEIGHT; private static final float CARD_ASPECT_RATIO = CARD_WIDTH / CARD_HEIGHT;
private final GameController controller; private final GameController controller;
private final boolean isTop; private final boolean isTop;
private List<ImagePermanentViewer> viewers; private List<ImagePermanentViewer> viewers;
private Set<Object> validChoices; private Set<Object> validChoices;
public ImagePermanentsViewer(final GameController controller) { public ImagePermanentsViewer(final GameController controller) {
this(controller, false); this(controller, false);
} }
public ImagePermanentsViewer(final GameController controller, final boolean isTop) { public ImagePermanentsViewer(final GameController controller, final boolean isTop) {
this.controller = controller; this.controller = controller;
this.isTop = isTop; this.isTop = isTop;
setLayout(null); setLayout(null);
setOpaque(false); setOpaque(false);
viewers=Collections.emptyList(); viewers=Collections.emptyList();
validChoices=Collections.emptySet(); validChoices=Collections.emptySet();
} }
private static int divideIntoRows(final List<ImagePermanentViewer> cards, final int maxCardsPerRow, final int startingRow) { private static int divideIntoRows(final List<ImagePermanentViewer> cards, final int maxCardsPerRow, final int startingRow) {
int numCardsThisRow = 0; int numCardsThisRow = 0;
int currentRow = startingRow; int currentRow = startingRow;
for(ImagePermanentViewer card : cards) { for(ImagePermanentViewer card : cards) {
if(numCardsThisRow + 1 > maxCardsPerRow) { if(numCardsThisRow + 1 > maxCardsPerRow) {
// goto next row // goto next row
currentRow++; currentRow++;
numCardsThisRow = 0; numCardsThisRow = 0;
} }
numCardsThisRow++; numCardsThisRow++;
card.setLogicalRow(currentRow); card.setLogicalRow(currentRow);
} }
return currentRow; return currentRow;
} }
private int divideAllIntoRows(final List<ImagePermanentViewer> creatures, final List<ImagePermanentViewer> nonCreatures, final int maxCardsPerRow) { private int divideAllIntoRows(final List<ImagePermanentViewer> creatures, final List<ImagePermanentViewer> nonCreatures, final int maxCardsPerRow) {
final List<ImagePermanentViewer> firstCards = (isTop) ? nonCreatures : creatures; final List<ImagePermanentViewer> firstCards = (isTop) ? nonCreatures : creatures;
final List<ImagePermanentViewer> secondCards = (isTop) ? creatures : nonCreatures; final List<ImagePermanentViewer> secondCards = (isTop) ? creatures : nonCreatures;
int currentRow = divideIntoRows(firstCards, maxCardsPerRow, 1); int currentRow = divideIntoRows(firstCards, maxCardsPerRow, 1);
if(firstCards.size() > 0) { // creatures go in separate row from others if(firstCards.size() > 0) { // creatures go in separate row from others
currentRow++; currentRow++;
} }
return divideIntoRows(secondCards, maxCardsPerRow, currentRow); return divideIntoRows(secondCards, maxCardsPerRow, currentRow);
} }
private int calculateAndSetPositions(final List<ImagePermanentViewer> creatures, final List<ImagePermanentViewer> nonCreatures) { private int calculateAndSetPositions(final List<ImagePermanentViewer> creatures, final List<ImagePermanentViewer> nonCreatures) {
int currentRow=1; int currentRow=1;
int x=0; int x=0;
int y=0; int y=0;
int maxWidth=0; int maxWidth=0;
int rowHeight=0; int rowHeight=0;
List<ImagePermanentViewer> aViewers = new ArrayList<ImagePermanentViewer>(); List<ImagePermanentViewer> aViewers = new ArrayList<ImagePermanentViewer>();
if(isTop) { if(isTop) {
aViewers.addAll(nonCreatures); aViewers.addAll(nonCreatures);
aViewers.addAll(creatures); aViewers.addAll(creatures);
} else { } else {
aViewers.addAll(creatures); aViewers.addAll(creatures);
aViewers.addAll(nonCreatures); aViewers.addAll(nonCreatures);
} }
int prevPosition=aViewers.get(0).getPosition(); int prevPosition=aViewers.get(0).getPosition();
for (final ImagePermanentViewer viewer : aViewers) { for (final ImagePermanentViewer viewer : aViewers) {
if (currentRow!=viewer.getLogicalRow()) { if (currentRow!=viewer.getLogicalRow()) {
currentRow++; currentRow++;
x=0; x=0;
y+=VERTICAL_SPACING+rowHeight; y+=VERTICAL_SPACING+rowHeight;
} }
if (viewer.getPosition()!=prevPosition) { if (viewer.getPosition()!=prevPosition) {
prevPosition=viewer.getPosition(); prevPosition=viewer.getPosition();
if (x>0) { if (x>0) {
x+=POSITION_SPACING; x+=POSITION_SPACING;
} }
} }
viewer.setLogicalPosition(new Point(x,y)); viewer.setLogicalPosition(new Point(x,y));
final Dimension logicalSize=viewer.getLogicalSize(); final Dimension logicalSize=viewer.getLogicalSize();
x+=logicalSize.width; x+=logicalSize.width;
maxWidth=Math.max(maxWidth,x); maxWidth=Math.max(maxWidth,x);
x+=HORIZONTAL_SPACING; x+=HORIZONTAL_SPACING;
rowHeight=Math.max(rowHeight,logicalSize.height); rowHeight=Math.max(rowHeight,logicalSize.height);
} }
final int maxHeight=y+rowHeight; final int maxHeight=y+rowHeight;
final int width=getWidth(); final int width=getWidth();
final int height=getHeight(); final int height=getHeight();
int scaleMult=width; int scaleMult=width;
int scaleDiv=maxWidth; int scaleDiv=maxWidth;
if ((maxHeight*scaleMult)/scaleDiv>height) { if ((maxHeight*scaleMult)/scaleDiv>height) {
scaleMult=height; scaleMult=height;
scaleDiv=maxHeight; scaleDiv=maxHeight;
} }
if (scaleMult>scaleDiv/2) { if (scaleMult>scaleDiv/2) {
scaleMult=scaleDiv/2; scaleMult=scaleDiv/2;
} }
for (final ImagePermanentViewer viewer : aViewers) { for (final ImagePermanentViewer viewer : aViewers) {
final Point point=viewer.getLogicalPosition(); final Point point=viewer.getLogicalPosition();
viewer.setLocation((point.x*scaleMult)/scaleDiv,(point.y*scaleMult)/scaleDiv); viewer.setLocation((point.x*scaleMult)/scaleDiv,(point.y*scaleMult)/scaleDiv);
final Dimension size=viewer.getLogicalSize(); final Dimension size=viewer.getLogicalSize();
viewer.setSize((size.width*scaleMult)/scaleDiv,(size.height*scaleMult)/scaleDiv); viewer.setSize((size.width*scaleMult)/scaleDiv,(size.height*scaleMult)/scaleDiv);
} }
return (1000*scaleMult)/scaleDiv; return (1000*scaleMult)/scaleDiv;
} }
private void calculateOptimalPositions(final List<ImagePermanentViewer> creatures, final List<ImagePermanentViewer> nonCreatures) { private void calculateOptimalPositions(final List<ImagePermanentViewer> creatures, final List<ImagePermanentViewer> nonCreatures) {
final float screenWidth = (float) getWidth(); final float screenWidth = (float) getWidth();
final float screenHeight = (float) getHeight(); final float screenHeight = (float) getHeight();
final int numCards = creatures.size() + nonCreatures.size(); final int numCards = creatures.size() + nonCreatures.size();
if(numCards > 0 && screenWidth > 0 && screenHeight > 0) { // ignore cases where drawing doesn't matter if(numCards > 0 && screenWidth > 0 && screenHeight > 0) { // ignore cases where drawing doesn't matter
int r; int r;
int maxCardsForBestNumRow = 1; int maxCardsForBestNumRow = 1;
float largestScaledCardSize = 0; float largestScaledCardSize = 0;
// approximate number of rows needed to contain all the cards // approximate number of rows needed to contain all the cards
for(r = (creatures.size() == 0 || nonCreatures.size() == 0) ? 1 : 2; r < numCards; r++) { for(r = (creatures.size() == 0 || nonCreatures.size() == 0) ? 1 : 2; r < numCards; r++) {
float numCardsPerRow = (float) Math.ceil((float) numCards / r); // avoid lost of precision float numCardsPerRow = (float) Math.ceil((float) numCards / r); // avoid lost of precision
// max width and height for a card using this number of rows // max width and height for a card using this number of rows
float scaledCardHeight = screenHeight / r; float scaledCardHeight = screenHeight / r;
float scaledCardWidth = screenWidth / numCardsPerRow; float scaledCardWidth = screenWidth / numCardsPerRow;
// change width or height to maintain aspect ratio // change width or height to maintain aspect ratio
if (scaledCardWidth / scaledCardHeight > CARD_ASPECT_RATIO) { if (scaledCardWidth / scaledCardHeight > CARD_ASPECT_RATIO) {
// height is limiting factor on size of scaled card // height is limiting factor on size of scaled card
scaledCardWidth = (scaledCardHeight / CARD_HEIGHT) * CARD_WIDTH; scaledCardWidth = (scaledCardHeight / CARD_HEIGHT) * CARD_WIDTH;
} else { } else {
// width is limiting factor on size of scaled card // width is limiting factor on size of scaled card
scaledCardHeight = (scaledCardWidth / CARD_WIDTH) * CARD_HEIGHT;; scaledCardHeight = (scaledCardWidth / CARD_WIDTH) * CARD_HEIGHT;;
} }
numCardsPerRow = (float) Math.ceil(screenWidth / scaledCardWidth); // scaled -> more cards can fit per row numCardsPerRow = (float) Math.ceil(screenWidth / scaledCardWidth); // scaled -> more cards can fit per row
// set best possible // set best possible
final float scaledCardSize = scaledCardWidth * scaledCardHeight; final float scaledCardSize = scaledCardWidth * scaledCardHeight;
if(scaledCardSize > largestScaledCardSize) { if(scaledCardSize > largestScaledCardSize) {
largestScaledCardSize = scaledCardSize; largestScaledCardSize = scaledCardSize;
maxCardsForBestNumRow = (int) numCardsPerRow; maxCardsForBestNumRow = (int) numCardsPerRow;
} }
} }
divideAllIntoRows(creatures, nonCreatures, maxCardsForBestNumRow); divideAllIntoRows(creatures, nonCreatures, maxCardsForBestNumRow);
calculateAndSetPositions(creatures, nonCreatures); calculateAndSetPositions(creatures, nonCreatures);
} }
} }
public void viewPermanents(final Collection<PermanentViewerInfo> permanentInfos) { public void viewPermanents(final Collection<PermanentViewerInfo> permanentInfos) {
final List<ImagePermanentViewer> creatures = new ArrayList<ImagePermanentViewer>(); final List<ImagePermanentViewer> creatures = new ArrayList<ImagePermanentViewer>();
final List<ImagePermanentViewer> nonCreatures = new ArrayList<ImagePermanentViewer>(); final List<ImagePermanentViewer> nonCreatures = new ArrayList<ImagePermanentViewer>();
final List<ImagePermanentViewer> newViewers = new ArrayList<ImagePermanentViewer>(); final List<ImagePermanentViewer> newViewers = new ArrayList<ImagePermanentViewer>();
for (final PermanentViewerInfo permanentInfo : permanentInfos) { for (final PermanentViewerInfo permanentInfo : permanentInfos) {
ImagePermanentViewer perm = new ImagePermanentViewer(this,permanentInfo); ImagePermanentViewer perm = new ImagePermanentViewer(this,permanentInfo);
if(permanentInfo.creature) { if(permanentInfo.creature) {
creatures.add(perm); creatures.add(perm);
} else { } else {
nonCreatures.add(perm); nonCreatures.add(perm);
} }
newViewers.add(perm); // permanentInfos has a specific order newViewers.add(perm); // permanentInfos has a specific order
} }
calculateOptimalPositions(creatures, nonCreatures); calculateOptimalPositions(creatures, nonCreatures);
removeAll(); removeAll();
for (final ImagePermanentViewer viewer : newViewers) { for (final ImagePermanentViewer viewer : newViewers) {
add(viewer); add(viewer);
} }
viewers=newViewers; viewers=newViewers;
revalidate(); revalidate();
repaint(); repaint();
} }
public GameController getController() { public GameController getController() {
return controller; return controller;
} }
public void showValidChoices(final Set<Object> aValidChoices) { public void showValidChoices(final Set<Object> aValidChoices) {
this.validChoices=aValidChoices; this.validChoices=aValidChoices;
for (final ImagePermanentViewer viewer : viewers) { for (final ImagePermanentViewer viewer : viewers) {
viewer.repaint(); viewer.repaint();
} }
} }
public boolean isValidChoice(final PermanentViewerInfo permanentInfo) { public boolean isValidChoice(final PermanentViewerInfo permanentInfo) {
return validChoices.contains(permanentInfo.permanent); return validChoices.contains(permanentInfo.permanent);
} }
} }