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

View File

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