View Javadoc

1   package de.jos.game.objects.buttons;
2   
3   import java.awt.Graphics2D;
4   import java.awt.image.BufferedImage;
5   import java.util.Set;
6   
7   import org.apache.commons.lang.builder.ToStringBuilder;
8   
9   import de.jos.game.Constants;
10  import de.jos.game.logic.CombinationUtils;
11  import de.jos.game.objects.Bullet;
12  import de.jos.game.objects.screen.AbstractGameObject;
13  import de.jos.game.objects.screen.PuzzleLevelScreen;
14  import de.jos.game.objects.screen.Screen;
15  import de.jos.game.xml.Level;
16  
17  public class PuzzleLevelButton extends GameButton {
18  
19    private int level = -1;
20  
21    public PuzzleLevelButton(AbstractGameObject gameObject, int x, int y, int level, boolean solved) {
22      super("", x, y, 80, 80, gameObject);
23  
24      System.out.println("PuzzleLevelButton render !");
25  
26      // callback registrieren
27      setButtonClickCallback(new PuzzleLevelButtonClickCallback(gameObject));
28  
29      this.level = level;
30  
31      // Leveldaten ermitteln und reinitialisieren
32      Level puzzleLevel = gameObject.getResourceContainer().getPuzzleLevels().get(level - 1);
33      puzzleLevel.initBullets(gameObject.getResourceContainer());
34  
35      BufferedImage bg = gameObject.getImage("img/buttons/background_small_puzzle.png");
36      BufferedImage rahmenDefault = gameObject.getImage("img/buttons/rahmen_default.png");
37      BufferedImage rahmenSelected = gameObject.getImage("img/buttons/rahmen_selected.png");
38      BufferedImage haken = gameObject.getImage("img/buttons/haken.png");
39  
40      /*** Klon Instanzen erzeugen, damit das Aussehen des Levels erhalten bleibt */
41      Set<Bullet> bullets = puzzleLevel.getBullets();
42  
43      // BufferedImage blueTiny =
44      // gameObject.getImage("img/bullets/ball_blue_tiny.png");
45  
46      /*
47       * System.out.println("offset : " + offset);
48       * 
49       * BufferedImage bg2 = new BufferedImage(95, 95,
50       * BufferedImage.TYPE_INT_RGB); Graphics2D graphics = bg2.createGraphics();
51       * graphics.drawImage(bg, 0, 0, null); if (level < 5) { Set<Bullet> bullets =
52       * puzzleLevel.getBullets(); for (Bullet tmpBullet : bullets) { if
53       * (CombinationUtils.isOnBoard(tmpBullet)) { BufferedImage tinySprite =
54       * gameObject.getResourceContainer().getBulletSpriteImageTiny(
55       * tmpBullet.getColor().intValue())[0]; graphics.drawImage(tinySprite,
56       * offset + ((tmpBullet.getBoardX() - Constants.LEFT_BORDER) *
57       * (Constants.PUZZLE_SPRITE_WIDTH_X)), offset + ((tmpBullet.getBoardY() -
58       * Constants.TOP_BORDER) * (Constants.PUZZLE_SPRITE_WIDTH_Y)), null); } } }
59       */
60  
61      BufferedImage buttonImageDefault = renderButton(gameObject, bg, bullets, rahmenDefault, haken, solved);
62      BufferedImage buttonImageSelected = renderButton(gameObject, bg, bullets, rahmenSelected, haken, solved);
63  
64      BufferedImage[] images = new BufferedImage[4];
65      images[0] = buttonImageDefault;
66      images[1] = buttonImageSelected;
67      images[2] = buttonImageSelected;
68      images[3] = buttonImageSelected;
69  
70      // setExternalUI(gameObject.getImages("img/buttons/puzzleButton.png", 4, 1,
71      // true, 0, 1), true);
72      setExternalUI(images, true);
73  
74      // setButtonClicked(false);
75      //    
76      /*
77       * GameFont externalFont = gameObject.fontManager.getFont(new Font("Arial",
78       * Font.BOLD, 14));
79       * 
80       * //setExternalUI(gameObject.getImages("img/buttons/puzzleButton.png", 4,
81       * 1), true); // setUIRenderer(); UIResource().put("Text Color",
82       * Color.WHITE); UIResource().put("Text Over Color", Color.WHITE);
83       * UIResource().put("Text Font", externalFont); UIResource().put("Text Over
84       * Font", externalFont); UIResource().put("Text Pressed Font",
85       * externalFont); UIResource().put("Text Vertical Space Integer",
86       * Integer.valueOf(0)); UIResource().put("Text Insets", new Insets(4, 5, 5,
87       * 5));
88       * 
89       * this.action = action; setButtonClicked(false);
90       */
91      // setButtonClicked(false);
92    }
93  
94    /***
95     * Rendert ein kleinen Puzzlelevel Button ohne Rahmen.
96     * 
97     * @param gameObject
98     * @param background
99     * @param levelBullets
100    * @return
101    */
102   private BufferedImage renderButton(AbstractGameObject gameObject, BufferedImage background, Set<Bullet> levelBullets,
103       BufferedImage rahmen, BufferedImage haken, boolean solved) {
104 
105     final int offset = ((95 - (Constants.PUZZLE_SPRITE_WIDTH_X * Constants.PUZZLE_SPRITE_WIDTH_X)) / 2);
106 
107     BufferedImage tmpImage = new BufferedImage(95, 95, BufferedImage.TYPE_INT_RGB);
108     Graphics2D graphics = tmpImage.createGraphics();
109     graphics.drawImage(background, 0, 0, null);
110 
111     for (Bullet tmpBullet : levelBullets) {
112       if (CombinationUtils.isOnBoard(tmpBullet)) {
113         BufferedImage tinySprite = gameObject.getResourceContainer().getBulletSpriteImageTiny(
114             tmpBullet.getColor().intValue())[0];
115         graphics.drawImage(tinySprite, offset
116             + ((tmpBullet.getBoardX() - Constants.LEFT_BORDER) * (Constants.PUZZLE_SPRITE_WIDTH_X)), offset
117             + ((tmpBullet.getBoardY() - Constants.TOP_BORDER) * (Constants.PUZZLE_SPRITE_WIDTH_Y)), null);
118       }
119     }
120 
121     if (solved) {
122       graphics.drawImage(haken, 20, 20, null);
123     }
124 
125     graphics.drawImage(rahmen, 0, 0, null);
126     graphics.dispose();
127 
128     return tmpImage;
129   }
130 
131   @Override
132   public Action getAction() {
133     return Action.PUZZLE_LEVEL;
134   }
135 
136   /*
137    * @Override
138    * 
139    * public void render(Graphics2D g) { // super.render(g); //
140    * g.setComposite(AlphaComposite.Src);
141    * 
142    * 
143    * 
144    * if (isMousePressed() || solved) { g.drawImage(this.getExternalUI()[1],
145    * getX(), getY(), null); } else { g.drawImage(this.getExternalUI()[0],
146    * getX(), getY(), null); } // g.dispose(); // TODO Auto-generated method stub // //
147    * System.out.println(isButtonClicked()); }
148    */
149 
150   public int getLevel() {
151     return level;
152   }
153 
154   @Override
155   public String toString() {
156     ToStringBuilder tsb = new ToStringBuilder(this);
157     tsb.append("action", getAction());
158     tsb.append("level", getLevel());
159     return tsb.toString();
160   }
161 
162   /*
163    * protected void processMouseClicked() { super.processMouseClicked();
164    * setButtonClicked(true); }
165    * 
166    * public int getAction() { return action; }
167    * 
168    * public void setAction(int action) { this.action = action; }
169    * 
170    * public String toString() { StringBuilder sb = new StringBuilder(100);
171    * sb.append("ACTION : " + getAction()); return sb.toString(); }
172    * 
173    * public boolean isButtonClicked() { return buttonClicked; }
174    * 
175    * public void setButtonClicked(boolean buttonClicked) { this.buttonClicked =
176    * buttonClicked; }
177    */
178 
179   /***
180    * Callback fuer einen Button click.
181    * 
182    * @author root
183    * 
184    */
185   private final class PuzzleLevelButtonClickCallback implements ButtonClickCallback {
186 
187     AbstractGameObject gameObject = null;
188 
189     public PuzzleLevelButtonClickCallback(AbstractGameObject gameObject) {
190       this.gameObject = gameObject;
191     }
192 
193     /***
194      * {@inheritDoc}
195      */
196     public void performClickAction() {
197       PuzzleLevelScreen puzzleLevelScreen = (PuzzleLevelScreen) gameObject;
198 
199       puzzleLevelScreen.setNextScreen(Screen.GAME);
200       puzzleLevelScreen.setSelectedLevel(getLevel());
201     }
202 
203   }
204 
205 }