summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorStarla Insigna <hatkirby@fourisland.com>2009-02-08 12:09:25 -0500
committerStarla Insigna <hatkirby@fourisland.com>2009-02-08 12:09:25 -0500
commiteca79b20cdb258768668c2ecf1b7333de62c7d7f (patch)
treed8999e81b3569aeff85138dc8df244c9c290a7a0 /src
parent3724f4ecbe61e6621d4a7e993cd80ab75ee41266 (diff)
downloadfourpuzzle-eca79b20cdb258768668c2ecf1b7333de62c7d7f.tar.gz
fourpuzzle-eca79b20cdb258768668c2ecf1b7333de62c7d7f.tar.bz2
fourpuzzle-eca79b20cdb258768668c2ecf1b7333de62c7d7f.zip
Implemented a basic ChoiceWindow
This window should be used when there are a few choices available (such as in TitleScreenGameState and MenuGameState) and one needs to be chosen. The implementation currently is bad, the code is messy and it could be optimized. Plus, there are a few bugs in it and no choice can currently be made, only the rendering has been done.
Diffstat (limited to 'src')
-rw-r--r--src/com/fourisland/fourpuzzle/Database.java6
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java11
-rw-r--r--src/com/fourisland/fourpuzzle/util/TransparentPixelFilter.java35
-rw-r--r--src/com/fourisland/fourpuzzle/window/ChoiceWindow.java109
-rw-r--r--src/com/fourisland/fourpuzzle/window/SystemChoiceArea.java56
-rw-r--r--src/com/fourisland/fourpuzzle/window/SystemGraphic.java43
6 files changed, 260 insertions, 0 deletions
diff --git a/src/com/fourisland/fourpuzzle/Database.java b/src/com/fourisland/fourpuzzle/Database.java index 8d51f9a..b6e97cf 100644 --- a/src/com/fourisland/fourpuzzle/Database.java +++ b/src/com/fourisland/fourpuzzle/Database.java
@@ -31,7 +31,13 @@ public class Database {
31 31
32 private static void loadDefaultVocabulary() 32 private static void loadDefaultVocabulary()
33 { 33 {
34 /* Global */
34 vocabulary.put("Title", "Untitled Game"); 35 vocabulary.put("Title", "Untitled Game");
36
37 /* TitleScreen */
38 vocabulary.put("NewGame", "New Game");
39 vocabulary.put("LoadGame", "Load Game");
40 vocabulary.put("EndGame", "End");
35 } 41 }
36 42
37 public static String getVocab(String key) 43 public static String getVocab(String key)
diff --git a/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java b/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java index 9247282..621ec0d 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java +++ b/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java
@@ -10,8 +10,10 @@ import com.fourisland.fourpuzzle.gamestate.mapview.MapViewGameState;
10import com.fourisland.fourpuzzle.transition.SquareTransition; 10import com.fourisland.fourpuzzle.transition.SquareTransition;
11import com.fourisland.fourpuzzle.transition.TransitionDirection; 11import com.fourisland.fourpuzzle.transition.TransitionDirection;
12import com.fourisland.fourpuzzle.util.ObjectLoader; 12import com.fourisland.fourpuzzle.util.ObjectLoader;
13import com.fourisland.fourpuzzle.window.ChoiceWindow;
13import java.awt.Graphics2D; 14import java.awt.Graphics2D;
14import java.awt.event.KeyEvent; 15import java.awt.event.KeyEvent;
16import java.util.Arrays;
15 17
16/** 18/**
17 * 19 *
@@ -19,9 +21,17 @@ import java.awt.event.KeyEvent;
19 */ 21 */
20public class TitleScreenGameState implements GameState { 22public class TitleScreenGameState implements GameState {
21 23
24 ChoiceWindow choices;
25 int wx, wy;
26
22 public void initalize() 27 public void initalize()
23 { 28 {
24 Audio.playMusic(Database.getMusic("Title")); 29 Audio.playMusic(Database.getMusic("Title"));
30
31 choices = new ChoiceWindow(Arrays.asList(Database.getVocab("NewGame"), Database.getVocab("LoadGame"), Database.getVocab("EndGame")));
32
33 wx = (Game.WIDTH/2)-(choices.getWidth()/2);
34 wy = (Game.HEIGHT/4*3)-(choices.getHeight()/2);
25 } 35 }
26 36
27 public void deinitalize() 37 public void deinitalize()
@@ -63,6 +73,7 @@ public class TitleScreenGameState implements GameState {
63 public void render(Graphics2D g) 73 public void render(Graphics2D g)
64 { 74 {
65 g.drawImage(ObjectLoader.getImage("Picture", "Title"), 0, 0, null); 75 g.drawImage(ObjectLoader.getImage("Picture", "Title"), 0, 0, null);
76 choices.render(g, wx, wy);
66 } 77 }
67 78
68} 79}
diff --git a/src/com/fourisland/fourpuzzle/util/TransparentPixelFilter.java b/src/com/fourisland/fourpuzzle/util/TransparentPixelFilter.java new file mode 100644 index 0000000..ed1c49c --- /dev/null +++ b/src/com/fourisland/fourpuzzle/util/TransparentPixelFilter.java
@@ -0,0 +1,35 @@
1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5
6package com.fourisland.fourpuzzle.util;
7
8import java.awt.image.RGBImageFilter;
9
10/**
11 *
12 * @author hatkirby
13 */
14public class TransparentPixelFilter extends RGBImageFilter {
15
16 private int trans;
17 public TransparentPixelFilter(int i)
18 {
19 trans = i;
20
21 canFilterIndexColorModel = true;
22 }
23
24 @Override
25 public int filterRGB(int x, int y, int rgb)
26 {
27 if (rgb == trans)
28 {
29 return 0;
30 } else {
31 return rgb;
32 }
33 }
34
35}
diff --git a/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java b/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java new file mode 100644 index 0000000..ed20ab0 --- /dev/null +++ b/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java
@@ -0,0 +1,109 @@
1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5
6package com.fourisland.fourpuzzle.window;
7
8import com.fourisland.fourpuzzle.util.TransparentPixelFilter;
9import java.awt.Font;
10import java.awt.Toolkit;
11import java.awt.Graphics2D;
12import java.awt.Rectangle;
13import java.awt.TexturePaint;
14import java.awt.image.BufferedImage;
15import java.awt.image.FilteredImageSource;
16import java.util.List;
17import static com.fourisland.fourpuzzle.window.SystemChoiceArea.*;
18
19/* TODO Find a more elegant way to implement window, it looks terrible now */
20
21/**
22 *
23 * @author hatkirby
24 */
25public class ChoiceWindow {
26
27 private final int SPACER = 4;
28
29 private List<String> choices;
30 int numChoices;
31 public ChoiceWindow(List<String> choices)
32 {
33 this.choices = choices;
34 numChoices = choices.size();
35
36 createGraphic(new BufferedImage(TopLeft.getWidth()+getWidth()+TopRight.getWidth(), TopLeft.getHeight()+getHeight()+BottomLeft.getHeight(), BufferedImage.TYPE_INT_ARGB).createGraphics());
37 }
38
39 private int width;
40 private int height;
41 BufferedImage cacheBase;
42 private void createGraphic(Graphics2D g3)
43 {
44 for (String choice : choices)
45 {
46 int l = g3.getFontMetrics().stringWidth(choice);
47 if (l > getWidth())
48 {
49 width = l;
50 }
51
52 height += g3.getFontMetrics().getHeight() + SPACER;
53 }
54
55 width += SPACER*2;
56 height -= SPACER;
57
58 BufferedImage temp = new BufferedImage(TopLeft.getWidth()+getWidth()+TopRight.getWidth(), TopLeft.getHeight()+getHeight()+BottomLeft.getHeight(), BufferedImage.TYPE_INT_ARGB);
59 Graphics2D g = temp.createGraphics();
60
61 g.drawImage(SystemGraphic.getChoiceArea(TopLeft), 0, 0, null);
62 g.drawImage(SystemGraphic.getChoiceArea(Top), TopLeft.getWidth(), 0, getWidth(),Top.getHeight(), null);
63 g.drawImage(SystemGraphic.getChoiceArea(TopRight), TopLeft.getWidth()+getWidth(), 0, null);
64 g.drawImage(SystemGraphic.getChoiceArea(Left), 0, TopLeft.getHeight(), Left.getWidth(),getHeight(), null);
65 g.drawImage(SystemGraphic.getChoiceArea(BottomLeft), 0, TopLeft.getHeight()+getHeight(), null);
66 g.drawImage(SystemGraphic.getChoiceArea(Bottom), BottomLeft.getWidth(), (getHeight()+TopLeft.getHeight()+BottomLeft.getHeight())-Bottom.getHeight(), getWidth(),Bottom.getHeight(), null);
67 g.drawImage(SystemGraphic.getChoiceArea(BottomRight), BottomRight.getWidth()+getWidth(), TopRight.getHeight()+getHeight(), null);
68 g.drawImage(SystemGraphic.getChoiceArea(Right), (getWidth()+TopLeft.getWidth()+TopRight.getWidth())-Right.getWidth(), TopRight.getHeight(), Right.getWidth(),getHeight(), null);
69
70 cacheBase = new BufferedImage(TopLeft.getWidth()+getWidth()+TopRight.getWidth(), TopLeft.getHeight()+getHeight()+BottomLeft.getHeight(), BufferedImage.TYPE_INT_ARGB);
71 Graphics2D g2 = cacheBase.createGraphics();
72
73 g2.drawImage(SystemGraphic.getMessageBackground(), 1, 1, TopLeft.getWidth()+getWidth()+TopRight.getWidth()-2, TopLeft.getHeight()+getHeight()+BottomLeft.getHeight()-2, null);
74 g2.drawImage(Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(temp.getSource(), new TransparentPixelFilter(-25600))), 0, 0, null);
75 g2.setFont(g2.getFont().deriveFont(Font.BOLD));
76
77 int tx = TopLeft.getWidth();
78 int ty = TopLeft.getHeight()+g2.getFontMetrics().getHeight()-SPACER;
79 for (String choice : choices)
80 {
81 /* TODO The following code paints the text onto the window. However,
82 * when it paints the lowercase 'y', the tail is white, not the
83 * correct gradient. */
84
85 g2.setPaint(new TexturePaint(SystemGraphic.getTextColor(), new Rectangle(tx, ty, g2.getFontMetrics().stringWidth(choice),g2.getFontMetrics().getHeight())));
86 g2.drawString(choice, tx, ty);
87
88 ty+=(SPACER+g2.getFontMetrics().getHeight());
89 }
90
91 g2.setFont(g2.getFont().deriveFont(Font.PLAIN));
92 }
93
94 public void render(Graphics2D g2, int x, int y)
95 {
96 g2.drawImage(cacheBase, x, y, null);
97 }
98
99 public int getWidth()
100 {
101 return width;
102 }
103
104 public int getHeight()
105 {
106 return height;
107 }
108
109}
diff --git a/src/com/fourisland/fourpuzzle/window/SystemChoiceArea.java b/src/com/fourisland/fourpuzzle/window/SystemChoiceArea.java new file mode 100644 index 0000000..8908c10 --- /dev/null +++ b/src/com/fourisland/fourpuzzle/window/SystemChoiceArea.java
@@ -0,0 +1,56 @@
1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5
6package com.fourisland.fourpuzzle.window;
7
8/**
9 *
10 * @author hatkirby
11 */
12public enum SystemChoiceArea
13{
14 Top(47, 0, 1, 4),
15 TopRight(56, 0, 8, 8),
16 Right(60, 15, 4, 1),
17 BottomRight(56, 24, 8, 8),
18 Bottom(47, 28, 1, 4),
19 BottomLeft(32, 24, 8, 8),
20 Left(32, 15, 4, 1),
21 TopLeft(32, 0, 8, 8),
22 UpArrow(43, 9, 10, 6),
23 DownArrow(43, 17, 10, 6);
24
25 private final int x;
26 private final int y;
27 private final int width;
28 private final int height;
29 private SystemChoiceArea(int x, int y, int width, int height)
30 {
31 this.x = x;
32 this.y = y;
33 this.width = width;
34 this.height = height;
35 }
36
37 public int getX()
38 {
39 return x;
40 }
41
42 public int getY()
43 {
44 return y;
45 }
46
47 public int getWidth()
48 {
49 return width;
50 }
51
52 public int getHeight()
53 {
54 return height;
55 }
56} \ No newline at end of file
diff --git a/src/com/fourisland/fourpuzzle/window/SystemGraphic.java b/src/com/fourisland/fourpuzzle/window/SystemGraphic.java new file mode 100644 index 0000000..70fc7fe --- /dev/null +++ b/src/com/fourisland/fourpuzzle/window/SystemGraphic.java
@@ -0,0 +1,43 @@
1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5
6package com.fourisland.fourpuzzle.window;
7
8import com.fourisland.fourpuzzle.util.ObjectLoader;
9import java.awt.image.BufferedImage;
10
11/**
12 *
13 * @author hatkirby
14 */
15public class SystemGraphic {
16
17 private static BufferedImage systemGraphic;
18 static
19 {
20 initalize("System");
21 }
22
23 public static void initalize(String graphic)
24 {
25 systemGraphic = ObjectLoader.getImage("Picture", graphic);
26 }
27
28 public static BufferedImage getMessageBackground()
29 {
30 return systemGraphic.getSubimage(0, 0, 32, 32);
31 }
32
33 public static BufferedImage getChoiceArea(SystemChoiceArea sca)
34 {
35 return systemGraphic.getSubimage(sca.getX(), sca.getY(), sca.getWidth(), sca.getHeight());
36 }
37
38 public static BufferedImage getTextColor()
39 {
40 return systemGraphic.getSubimage(0, 48, 16, 16);
41 }
42
43}