summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorStarla Insigna <hatkirby@fourisland.com>2009-02-08 17:12:38 -0500
committerStarla Insigna <hatkirby@fourisland.com>2009-02-08 17:12:38 -0500
commit50928c2d12bf145711df877bb86aadfb1306860b (patch)
treebadafeb8015ff7550d5fe9bf70b0803b5c6aa9b3 /src
parented66e0aef4f519052a982dfcd1d454a1699e9800 (diff)
downloadfourpuzzle-50928c2d12bf145711df877bb86aadfb1306860b.tar.gz
fourpuzzle-50928c2d12bf145711df877bb86aadfb1306860b.tar.bz2
fourpuzzle-50928c2d12bf145711df877bb86aadfb1306860b.zip
Add choice choosing to ChoiceWindow
ChoiceWindow has also been modified around to rely on a Window class which makes the process more elegant (not elegant, just more so than before). TitleScreenGameState has also been modified to close the game when "End" is selected.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java72
-rw-r--r--src/com/fourisland/fourpuzzle/util/PauseTimer.java41
-rwxr-xr-xsrc/com/fourisland/fourpuzzle/window/ChoiceWindow.java68
-rwxr-xr-xsrc/com/fourisland/fourpuzzle/window/SystemChoiceArea.java56
-rwxr-xr-xsrc/com/fourisland/fourpuzzle/window/SystemGraphic.java10
-rw-r--r--src/com/fourisland/fourpuzzle/window/Window.java116
6 files changed, 253 insertions, 110 deletions
diff --git a/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java b/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java index 2f5dc97..998d33a 100755 --- a/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java +++ b/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java
@@ -10,6 +10,7 @@ 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.util.PauseTimer;
13import com.fourisland.fourpuzzle.window.ChoiceWindow; 14import com.fourisland.fourpuzzle.window.ChoiceWindow;
14import java.awt.Graphics2D; 15import java.awt.Graphics2D;
15import java.awt.event.KeyEvent; 16import java.awt.event.KeyEvent;
@@ -38,29 +39,62 @@ public class TitleScreenGameState implements GameState {
38 Audio.stopMusic(); 39 Audio.stopMusic();
39 } 40 }
40 41
42 PauseTimer pt = new PauseTimer(0);
41 public void processInput() 43 public void processInput()
42 { 44 {
43 if (Game.getKey().getKeyCode() == KeyEvent.VK_ENTER) 45 if (pt.isElapsed())
44 { 46 {
45 Game.setSaveFile(new SaveFile()); 47 if (Game.getKey().getKeyCode() == KeyEvent.VK_ENTER)
46 48 {
47 new Thread(new Runnable() { 49 if (choices.getSelected().equals(Database.getVocab("NewGame")))
48 public void run() { 50 {
49 try { 51 Game.setSaveFile(new SaveFile());
50 Display.transition(new SquareTransition(TransitionDirection.Out)); 52
51 } catch (InterruptedException ex) { 53 new Thread(new Runnable() {
52 Thread.currentThread().interrupt(); 54 public void run() {
53 } 55 try {
54 56 Display.transition(new SquareTransition(TransitionDirection.Out));
55 Game.setGameState(new MapViewGameState("TestMap", 1, 2)); 57 } catch (InterruptedException ex) {
56 58 Thread.currentThread().interrupt();
57 try { 59 }
58 Display.transition(new SquareTransition(TransitionDirection.In)); 60
59 } catch (InterruptedException ex) { 61 Game.setGameState(new MapViewGameState("TestMap", 1, 2));
60 Thread.currentThread().interrupt(); 62
61 } 63 try {
64 Display.transition(new SquareTransition(TransitionDirection.In));
65 } catch (InterruptedException ex) {
66 Thread.currentThread().interrupt();
67 }
68 }
69 }).start();
70 } else if (choices.getSelected().equals(Database.getVocab("LoadGame")))
71 {
72 // Do nothing, yet
73 } else if (choices.getSelected().equals(Database.getVocab("EndGame")))
74 {
75 new Thread(new Runnable() {
76 public void run() {
77 try {
78 Display.transition(new SquareTransition(TransitionDirection.Out));
79 } catch (InterruptedException ex) {
80 Thread.currentThread().interrupt();
81 }
82
83 System.exit(0);
84 }
85 }).start();
62 } 86 }
63 }).start(); 87 } else if (Game.getKey().getKeyCode() == KeyEvent.VK_UP)
88 {
89 choices.moveUp();
90
91 pt.setTimer(1);
92 } else if (Game.getKey().getKeyCode() == KeyEvent.VK_DOWN)
93 {
94 choices.moveDown();
95
96 pt.setTimer(1);
97 }
64 } 98 }
65 } 99 }
66 100
diff --git a/src/com/fourisland/fourpuzzle/util/PauseTimer.java b/src/com/fourisland/fourpuzzle/util/PauseTimer.java new file mode 100644 index 0000000..0e52b0f --- /dev/null +++ b/src/com/fourisland/fourpuzzle/util/PauseTimer.java
@@ -0,0 +1,41 @@
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
8/**
9 *
10 * @author hatkirby
11 */
12public class PauseTimer {
13
14 private int ticks;
15 public PauseTimer(int ticks)
16 {
17 this.ticks = ticks;
18 }
19
20 Interval in = Interval.createTickInterval(1);
21 public boolean isElapsed()
22 {
23 if (in.isElapsed())
24 {
25 if (ticks == 0)
26 {
27 return true;
28 } else {
29 ticks--;
30 }
31 }
32
33 return false;
34 }
35
36 public void setTimer(int ticks)
37 {
38 this.ticks = ticks;
39 }
40
41}
diff --git a/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java b/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java index 40fff30..3b30acc 100755 --- a/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java +++ b/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java
@@ -5,18 +5,13 @@
5 5
6package com.fourisland.fourpuzzle.window; 6package com.fourisland.fourpuzzle.window;
7 7
8import com.fourisland.fourpuzzle.util.TransparentPixelFilter; 8import com.fourisland.fourpuzzle.Audio;
9import java.awt.Font; 9import java.awt.Font;
10import java.awt.Toolkit;
11import java.awt.Graphics2D; 10import java.awt.Graphics2D;
12import java.awt.Rectangle; 11import java.awt.Rectangle;
13import java.awt.TexturePaint; 12import java.awt.TexturePaint;
14import java.awt.image.BufferedImage; 13import java.awt.image.BufferedImage;
15import java.awt.image.FilteredImageSource;
16import java.util.List; 14import 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 15
21/** 16/**
22 * 17 *
@@ -35,7 +30,7 @@ public class ChoiceWindow {
35 numChoices = choices.size(); 30 numChoices = choices.size();
36 this.center = center; 31 this.center = center;
37 32
38 createGraphic(new BufferedImage(TopLeft.getWidth()+getWidth()+TopRight.getWidth(), TopLeft.getHeight()+getHeight()+BottomLeft.getHeight(), BufferedImage.TYPE_INT_ARGB).createGraphics()); 33 createGraphic(new BufferedImage(Window.Default.getFullWidth(width), Window.Default.getFullHeight(height), BufferedImage.TYPE_INT_ARGB).createGraphics());
39 } 34 }
40 35
41 private int width; 36 private int width;
@@ -57,36 +52,38 @@ public class ChoiceWindow {
57 width += SPACER*2; 52 width += SPACER*2;
58 height -= SPACER; 53 height -= SPACER;
59 54
60 BufferedImage temp = new BufferedImage(TopLeft.getWidth()+getWidth()+TopRight.getWidth(), TopLeft.getHeight()+getHeight()+BottomLeft.getHeight(), BufferedImage.TYPE_INT_ARGB); 55 cacheBase = new BufferedImage(Window.Default.getFullWidth(width), Window.Default.getFullHeight(height), BufferedImage.TYPE_INT_ARGB);
61 Graphics2D g = temp.createGraphics();
62
63 g.drawImage(SystemGraphic.getChoiceArea(TopLeft), 0, 0, null);
64 g.drawImage(SystemGraphic.getChoiceArea(Top), TopLeft.getWidth(), 0, getWidth(),Top.getHeight(), null);
65 g.drawImage(SystemGraphic.getChoiceArea(TopRight), TopLeft.getWidth()+getWidth(), 0, null);
66 g.drawImage(SystemGraphic.getChoiceArea(Left), 0, TopLeft.getHeight(), Left.getWidth(),getHeight(), null);
67 g.drawImage(SystemGraphic.getChoiceArea(BottomLeft), 0, TopLeft.getHeight()+getHeight(), null);
68 g.drawImage(SystemGraphic.getChoiceArea(Bottom), BottomLeft.getWidth(), (getHeight()+TopLeft.getHeight()+BottomLeft.getHeight())-Bottom.getHeight(), getWidth(),Bottom.getHeight(), null);
69 g.drawImage(SystemGraphic.getChoiceArea(BottomRight), BottomRight.getWidth()+getWidth(), TopRight.getHeight()+getHeight(), null);
70 g.drawImage(SystemGraphic.getChoiceArea(Right), (getWidth()+TopLeft.getWidth()+TopRight.getWidth())-Right.getWidth(), TopRight.getHeight(), Right.getWidth(),getHeight(), null);
71
72 cacheBase = new BufferedImage(TopLeft.getWidth()+getWidth()+TopRight.getWidth(), TopLeft.getHeight()+getHeight()+BottomLeft.getHeight(), BufferedImage.TYPE_INT_ARGB);
73 Graphics2D g2 = cacheBase.createGraphics(); 56 Graphics2D g2 = cacheBase.createGraphics();
74 57
75 g2.drawImage(SystemGraphic.getMessageBackground(), 1, 1, TopLeft.getWidth()+getWidth()+TopRight.getWidth()-2, TopLeft.getHeight()+getHeight()+BottomLeft.getHeight()-2, null); 58 g2.drawImage(SystemGraphic.getMessageBackground(), 1, 1, Window.Default.getFullWidth(width)-2, Window.Default.getFullHeight(height)-2, null);
76 g2.drawImage(Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(temp.getSource(), new TransparentPixelFilter(SystemGraphic.getTransparentColor().getRGB()))), 0, 0, null); 59 g2.drawImage(Window.Default.getImage(width, height), 0, 0, null);
60 }
61
62 public void render(Graphics2D g2, int x, int y)
63 {
64 g2.drawImage(cacheBase, x, y, null);
65
77 g2.setFont(g2.getFont().deriveFont(Font.BOLD)); 66 g2.setFont(g2.getFont().deriveFont(Font.BOLD));
78 67
79 int ty = TopLeft.getHeight()+g2.getFontMetrics().getHeight()-SPACER; 68 int fh = g2.getFontMetrics().getHeight();
69 int ty = Window.Default.getTopY()+fh-SPACER+y;
80 for (String choice : choices) 70 for (String choice : choices)
81 { 71 {
82 int tx = TopLeft.getWidth(); 72 int fw = g2.getFontMetrics().stringWidth(choice);
73 int tx = Window.Default.getLeftX()+x;
83 74
84 if (center) 75 if (center)
85 { 76 {
86 tx += ((width/2)-(g2.getFontMetrics().stringWidth(choice)/2)); 77 tx += ((width/2)-(fw/2));
78 }
79
80 if (getSelected().equals(choice))
81 {
82 g2.drawImage(SystemGraphic.getSelectionBackground(), tx, ty-fh, fw+SPACER-2, fh+SPACER-2, null);
83 g2.drawImage(Window.Selector.getImage(fw-Window.Selector.getLeftX(), fh-Window.Selector.getTopY()), tx-SPACER, ty-fh, null);
87 } 84 }
88 85
89 g2.setPaint(new TexturePaint(SystemGraphic.getTextColor(), new Rectangle(tx, ty, g2.getFontMetrics().stringWidth(choice),g2.getFontMetrics().getHeight()))); 86 g2.setPaint(new TexturePaint(SystemGraphic.getTextColor(), new Rectangle(tx, ty, fw, fh)));
90 g2.drawString(choice, tx, ty); 87 g2.drawString(choice, tx, ty);
91 88
92 ty+=(SPACER+g2.getFontMetrics().getHeight()); 89 ty+=(SPACER+g2.getFontMetrics().getHeight());
@@ -95,11 +92,6 @@ public class ChoiceWindow {
95 g2.setFont(g2.getFont().deriveFont(Font.PLAIN)); 92 g2.setFont(g2.getFont().deriveFont(Font.PLAIN));
96 } 93 }
97 94
98 public void render(Graphics2D g2, int x, int y)
99 {
100 g2.drawImage(cacheBase, x, y, null);
101 }
102
103 public int getWidth() 95 public int getWidth()
104 { 96 {
105 return width; 97 return width;
@@ -113,12 +105,22 @@ public class ChoiceWindow {
113 int selected = 0; 105 int selected = 0;
114 public void moveUp() 106 public void moveUp()
115 { 107 {
116 selected--; 108 if (selected > 0)
109 {
110 Audio.playSound("Cursor1");
111
112 selected--;
113 }
117 } 114 }
118 115
119 public void moveDown() 116 public void moveDown()
120 { 117 {
121 selected++; 118 if (selected < (choices.size()-1))
119 {
120 Audio.playSound("Cursor1");
121
122 selected++;
123 }
122 } 124 }
123 125
124 public String getSelected() 126 public String getSelected()
diff --git a/src/com/fourisland/fourpuzzle/window/SystemChoiceArea.java b/src/com/fourisland/fourpuzzle/window/SystemChoiceArea.java deleted file mode 100755 index 5fc115f..0000000 --- a/src/com/fourisland/fourpuzzle/window/SystemChoiceArea.java +++ /dev/null
@@ -1,56 +0,0 @@
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, 9),
15 TopRight(56, 0, 8, 9),
16 Right(56, 15, 8, 1),
17 BottomRight(56, 25, 8, 9),
18 Bottom(47, 24, 1, 9),
19 BottomLeft(32, 24, 11, 9),
20 Left(32, 15, 11, 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 index ea67f41..24e0104 100755 --- a/src/com/fourisland/fourpuzzle/window/SystemGraphic.java +++ b/src/com/fourisland/fourpuzzle/window/SystemGraphic.java
@@ -7,6 +7,7 @@ package com.fourisland.fourpuzzle.window;
7 7
8import com.fourisland.fourpuzzle.util.ObjectLoader; 8import com.fourisland.fourpuzzle.util.ObjectLoader;
9import java.awt.Color; 9import java.awt.Color;
10import java.awt.Rectangle;
10import java.awt.image.BufferedImage; 11import java.awt.image.BufferedImage;
11 12
12/** 13/**
@@ -32,9 +33,14 @@ public class SystemGraphic {
32 return systemGraphic.getSubimage(0, 0, 32, 32); 33 return systemGraphic.getSubimage(0, 0, 32, 32);
33 } 34 }
34 35
35 public static BufferedImage getChoiceArea(SystemChoiceArea sca) 36 public static BufferedImage getSelectionBackground()
36 { 37 {
37 return systemGraphic.getSubimage(sca.getX(), sca.getY(), sca.getWidth(), sca.getHeight()); 38 return systemGraphic.getSubimage(79, 15, 1, 1);
39 }
40
41 public static BufferedImage getChoiceArea(Rectangle sca)
42 {
43 return systemGraphic.getSubimage(sca.x, sca.y, sca.width, sca.height);
38 } 44 }
39 45
40 public static BufferedImage getTextColor() 46 public static BufferedImage getTextColor()
diff --git a/src/com/fourisland/fourpuzzle/window/Window.java b/src/com/fourisland/fourpuzzle/window/Window.java new file mode 100644 index 0000000..fa40cba --- /dev/null +++ b/src/com/fourisland/fourpuzzle/window/Window.java
@@ -0,0 +1,116 @@
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.Graphics2D;
10import java.awt.Image;
11import java.awt.Rectangle;
12import java.awt.Toolkit;
13import java.awt.image.BufferedImage;
14import java.awt.image.FilteredImageSource;
15
16/**
17 *
18 * @author hatkirby
19 */
20public enum Window
21{
22 Default(32),
23 Selector(64);
24
25 private enum SystemArea
26 {
27 TOP(15, 0, 1, 9),
28 TOP_RIGHT(24, 0, 8, 9),
29 RIGHT(24, 15, 8, 1),
30 BOTTOM_RIGHT(24, 25, 8, 9),
31 BOTTOM(15, 24, 1, 9),
32 BOTTOM_LEFT(0, 24, 11, 9),
33 LEFT(0, 15, 11, 1),
34 TOP_LEFT(0, 0, 8, 8);
35
36 private final int x;
37 private final int y;
38 private final int width;
39 private final int height;
40 private SystemArea(int x, int y, int width, int height)
41 {
42 this.x = x;
43 this.y = y;
44 this.width = width;
45 this.height = height;
46 }
47 }
48
49 private int x;
50 private Window(int x)
51 {
52 this.x = x;
53 }
54
55 private int getX(SystemArea sa)
56 {
57 return x+sa.x;
58 }
59
60 private int getY(SystemArea sa)
61 {
62 return sa.y;
63 }
64
65 private int getWidth(SystemArea sa)
66 {
67 return sa.width;
68 }
69
70 private int getHeight(SystemArea sa)
71 {
72 return sa.height;
73 }
74
75 private Rectangle getBounds(SystemArea sa)
76 {
77 return new Rectangle(getX(sa), getY(sa), getWidth(sa), getHeight(sa));
78 }
79
80 public int getFullWidth(int width)
81 {
82 return getWidth(SystemArea.TOP_LEFT) + getWidth(SystemArea.TOP_RIGHT) + width;
83 }
84
85 public int getFullHeight(int height)
86 {
87 return getHeight(SystemArea.TOP_LEFT) + getHeight(SystemArea.BOTTOM_LEFT) + height;
88 }
89
90 public int getLeftX()
91 {
92 return getWidth(SystemArea.TOP_LEFT);
93 }
94
95 public int getTopY()
96 {
97 return getHeight(SystemArea.TOP_LEFT);
98 }
99
100 public Image getImage(int width, int height)
101 {
102 BufferedImage temp = new BufferedImage(getFullWidth(width), getFullHeight(height), BufferedImage.TYPE_INT_ARGB);
103 Graphics2D g = temp.createGraphics();
104
105 g.drawImage(SystemGraphic.getChoiceArea(getBounds(SystemArea.TOP_LEFT)), 0, 0, null);
106 g.drawImage(SystemGraphic.getChoiceArea(getBounds(SystemArea.TOP)), getWidth(SystemArea.TOP_LEFT), 0, width, getHeight(SystemArea.TOP), null);
107 g.drawImage(SystemGraphic.getChoiceArea(getBounds(SystemArea.TOP_RIGHT)), getWidth(SystemArea.TOP_LEFT)+width, 0, null);
108 g.drawImage(SystemGraphic.getChoiceArea(getBounds(SystemArea.LEFT)), 0, getHeight(SystemArea.TOP_LEFT), getWidth(SystemArea.LEFT),height, null);
109 g.drawImage(SystemGraphic.getChoiceArea(getBounds(SystemArea.BOTTOM_LEFT)), 0, getHeight(SystemArea.TOP_LEFT)+height, null);
110 g.drawImage(SystemGraphic.getChoiceArea(getBounds(SystemArea.BOTTOM)), getWidth(SystemArea.BOTTOM_LEFT), (height+getHeight(SystemArea.TOP_LEFT)+getHeight(SystemArea.BOTTOM_LEFT))-getHeight(SystemArea.BOTTOM), width, getHeight(SystemArea.BOTTOM), null);
111 g.drawImage(SystemGraphic.getChoiceArea(getBounds(SystemArea.BOTTOM_RIGHT)), getWidth(SystemArea.BOTTOM_RIGHT)+width, getHeight(SystemArea.TOP_RIGHT)+height, null);
112 g.drawImage(SystemGraphic.getChoiceArea(getBounds(SystemArea.RIGHT)), (width+getWidth(SystemArea.TOP_LEFT)+getWidth(SystemArea.TOP_RIGHT))-getWidth(SystemArea.RIGHT), getHeight(SystemArea.TOP_RIGHT), getWidth(SystemArea.RIGHT), height, null);
113
114 return Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(temp.getSource(), new TransparentPixelFilter(SystemGraphic.getTransparentColor().getRGB())));
115 }
116} \ No newline at end of file