summary refs log tree commit diff stats
path: root/src/com/fourisland
diff options
context:
space:
mode:
authorStarla Insigna <hatkirby@fourisland.com>2009-02-08 19:40:41 -0500
committerStarla Insigna <hatkirby@fourisland.com>2009-02-08 19:40:41 -0500
commit3cecb76e6a2240f052eb14a374b7a75950cbbc3d (patch)
tree93ea75c86e068ccd21cec6ba15eb2c8ae7bc0580 /src/com/fourisland
parent2b4864dd89dc6d3aeb70ec863bd092ca30c31db7 (diff)
downloadfourpuzzle-3cecb76e6a2240f052eb14a374b7a75950cbbc3d.tar.gz
fourpuzzle-3cecb76e6a2240f052eb14a374b7a75950cbbc3d.tar.bz2
fourpuzzle-3cecb76e6a2240f052eb14a374b7a75950cbbc3d.zip
Started MessageWindow
Currently, MessageWindow splits a string into four lines and displays it when necessary. However, there is currently no way to close the window, it does not animate upon opening and more.
Diffstat (limited to 'src/com/fourisland')
-rwxr-xr-xsrc/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java12
-rwxr-xr-xsrc/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java2
-rwxr-xr-xsrc/com/fourisland/fourpuzzle/window/ChoiceWindow.java2
-rw-r--r--src/com/fourisland/fourpuzzle/window/MessageWindow.java139
4 files changed, 153 insertions, 2 deletions
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java index 3acfff4..9924c9e 100755 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java
@@ -22,6 +22,7 @@ import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.AutomaticViewpoint;
22import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint; 22import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint;
23import com.fourisland.fourpuzzle.util.Functions; 23import com.fourisland.fourpuzzle.util.Functions;
24import com.fourisland.fourpuzzle.util.ResourceNotFoundException; 24import com.fourisland.fourpuzzle.util.ResourceNotFoundException;
25import com.fourisland.fourpuzzle.window.MessageWindow;
25import java.awt.Graphics2D; 26import java.awt.Graphics2D;
26import java.awt.event.KeyEvent; 27import java.awt.event.KeyEvent;
27import java.awt.image.BufferedImage; 28import java.awt.image.BufferedImage;
@@ -230,6 +231,11 @@ public class MapViewGameState implements GameState {
230 231
231 g.drawImage(eventLayer, 0, 0, Game.WIDTH, Game.HEIGHT, x, y, x+Game.WIDTH, y+Game.HEIGHT, null); 232 g.drawImage(eventLayer, 0, 0, Game.WIDTH, Game.HEIGHT, x, y, x+Game.WIDTH, y+Game.HEIGHT, null);
232 g.drawImage(currentMap.renderUpper(), 0, 0, Game.WIDTH, Game.HEIGHT, x, y, x+Game.WIDTH, y+Game.HEIGHT, null); 233 g.drawImage(currentMap.renderUpper(), 0, 0, Game.WIDTH, Game.HEIGHT, x, y, x+Game.WIDTH, y+Game.HEIGHT, null);
234
235 if (mw != null)
236 {
237 mw.render(g);
238 }
233 } 239 }
234 240
235 public void initCurrentMap(String mapName) 241 public void initCurrentMap(String mapName)
@@ -268,5 +274,11 @@ public class MapViewGameState implements GameState {
268 { 274 {
269 currentViewpoint = viewpoint; 275 currentViewpoint = viewpoint;
270 } 276 }
277
278 volatile MessageWindow mw = null;
279 public void displayMessage(String message)
280 {
281 mw = new MessageWindow(message);
282 }
271 283
272} 284}
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java index c48b312..5bd312a 100755 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java
@@ -51,7 +51,7 @@ public class SpecialEvent {
51 */ 51 */
52 public void DisplayMessage(String message) 52 public void DisplayMessage(String message)
53 { 53 {
54 throw new UnsupportedOperationException("Not yet implemented"); 54 mapView.displayMessage(message);
55 } 55 }
56 56
57 /** 57 /**
diff --git a/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java b/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java index 19d53ac..e466e63 100755 --- a/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java +++ b/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java
@@ -19,7 +19,7 @@ import java.util.List;
19 */ 19 */
20public class ChoiceWindow { 20public class ChoiceWindow {
21 21
22 private final int SPACER = 4; 22 private static final int SPACER = 4;
23 23
24 private List<String> choices; 24 private List<String> choices;
25 int numChoices; 25 int numChoices;
diff --git a/src/com/fourisland/fourpuzzle/window/MessageWindow.java b/src/com/fourisland/fourpuzzle/window/MessageWindow.java new file mode 100644 index 0000000..9e482ba --- /dev/null +++ b/src/com/fourisland/fourpuzzle/window/MessageWindow.java
@@ -0,0 +1,139 @@
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.Game;
9import java.awt.Font;
10import java.awt.FontFormatException;
11import java.awt.Graphics2D;
12import java.awt.Rectangle;
13import java.awt.TexturePaint;
14import java.awt.image.BufferedImage;
15import java.io.File;
16import java.io.IOException;
17import java.util.ArrayList;
18import java.util.List;
19import java.util.logging.Level;
20import java.util.logging.Logger;
21
22/**
23 *
24 * @author hatkirby
25 */
26public class MessageWindow {
27
28 private static final int SPACER = 4;
29 private static final int HEIGHT = 4*(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB).createGraphics().getFontMetrics().getHeight()+SPACER);
30
31 private List<String> messages;
32 int width;
33 BufferedImage cacheBase;
34 public MessageWindow(String message)
35 {
36 width = Game.WIDTH - Window.Default.getFullWidth(0);
37 messages = new ArrayList<String>();
38
39 initalizeMessages(message, new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB).createGraphics());
40
41 cacheBase = new BufferedImage(Game.WIDTH, Window.Default.getFullHeight(HEIGHT), BufferedImage.TYPE_INT_ARGB);
42 Graphics2D g2 = cacheBase.createGraphics();
43
44 g2.drawImage(SystemGraphic.getMessageBackground(), 1, 1, Game.WIDTH-2, Window.Default.getFullHeight(HEIGHT)-2, null);
45 g2.drawImage(Window.Default.getImage(width, HEIGHT), 0, 0, null);
46 }
47
48 private void initalizeMessages(String message, Graphics2D g)
49 {
50 setFont(g);
51
52 String temp = message;
53 int len = 0;
54 while (!temp.isEmpty())
55 {
56 while ((g.getFontMetrics().stringWidth(temp.substring(0, len)) < (width - SPACER)) && (len < temp.length()))
57 {
58 len++;
59 }
60
61 if (len != temp.length())
62 {
63 while ((!temp.substring(len, len+1).equals(" ")) && (len > 0))
64 {
65 len--;
66 }
67 }
68
69 messages.add(temp.substring(0, len));
70
71 if (len != temp.length())
72 {
73 temp = temp.substring(len+1);
74 } else {
75 temp = "";
76 }
77
78 len = 0;
79 }
80 }
81
82 public void render(Graphics2D g2)
83 {
84 int y = MessageWindowLocation.Bottom.getY();
85
86 g2.drawImage(cacheBase, 0, y, null);
87
88 setFont(g2);
89
90 int fh = g2.getFontMetrics().getHeight();
91 int ty = Window.Default.getTopY()+fh-(SPACER/2)+y;
92 int msgs = Math.min(messages.size(), 4);
93 for (int i=0;i<msgs;i++)
94 {
95 String message = messages.get(i);
96 int fw = g2.getFontMetrics().stringWidth(message);
97 int tx = Window.Default.getLeftX();
98
99 g2.setPaint(new TexturePaint(SystemGraphic.getTextColor(), new Rectangle(tx, ty, fw, fh)));
100 g2.drawString(message, tx, ty);
101
102 ty+=(SPACER+g2.getFontMetrics().getHeight());
103 }
104
105 g2.setFont(g2.getFont().deriveFont(Font.PLAIN));
106 }
107
108 public static enum MessageWindowLocation
109 {
110 Top(0),
111 Middle((Game.HEIGHT/2)-(Window.Default.getFullHeight(MessageWindow.HEIGHT)/2)),
112 Bottom(Game.HEIGHT-Window.Default.getFullHeight(MessageWindow.HEIGHT));
113
114 private int y;
115 private MessageWindowLocation(int y)
116 {
117 this.y = y;
118 }
119
120 public int getY()
121 {
122 return y;
123 }
124 }
125
126 public static void setFont(Graphics2D g)
127 {
128 try {
129 g.setFont(Font.createFont(Font.TRUETYPE_FONT, new File("/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf")));
130 } catch (FontFormatException ex) {
131 Logger.getLogger(MessageWindow.class.getName()).log(Level.SEVERE, null, ex);
132 } catch (IOException ex) {
133 Logger.getLogger(MessageWindow.class.getName()).log(Level.SEVERE, null, ex);
134 }
135
136 g.setFont(g.getFont().deriveFont(Font.PLAIN, 10));
137 }
138
139}