summary refs log tree commit diff stats
diff options
context:
space:
mode:
-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}