annotate game/Engine.java @ 138:9eb791e2fa17

Optimize board updating logic, so that the old placed tiles need not to be redrawn from scratch on each screen update, as they do not change usually.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 25 Nov 2011 11:04:09 +0200
parents a33fdb1de11c
children be9cc2ee3c16
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f930f72ed0f5 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 /*
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
2 * Ristipolku Game Engine
0
f930f72ed0f5 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 * (C) Copyright 2011 Matti 'ccr' Hämäläinen <ccr@tnsp.org>
f930f72ed0f5 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 */
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
5 package game;
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
6
0
f930f72ed0f5 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 import java.awt.*;
f930f72ed0f5 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 import java.awt.geom.*;
1
44f1e7b47fcf Preliminary work ... puuh.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
9 import java.awt.event.*;
7
70714c229e23 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
10 import java.awt.image.*;
70714c229e23 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
11 import java.awt.event.*;
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
12 import java.awt.font.*;
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
13 import javax.imageio.*;
7
70714c229e23 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
14 import javax.swing.*;
1
44f1e7b47fcf Preliminary work ... puuh.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
15 import java.util.*;
131
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
16 import java.util.concurrent.locks.Lock;
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
17 import java.util.concurrent.locks.ReentrantReadWriteLock;
6
be0bf7544069 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 4
diff changeset
18 import java.io.*;
1
44f1e7b47fcf Preliminary work ... puuh.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
19 import game.*;
37
3dc5ae9f1c80 Work on game logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
20 import javax.sound.sampled.*;
21
df494a65bf8c More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
21
42
951a4d669af0 Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
22
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
23 class AboutBox extends IDMWidget
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
24 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
25 BufferedImage aboutImg;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
26 boolean aboutSecret;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
27
76
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
28 IDMPoint currPos, currOffs;
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
29 Paint textPaint;
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
30 Font textFont;
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
31 FontMetrics textMetrics;
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
32
76
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
33
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
34 public AboutBox()
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
35 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
36 try {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
37 ResourceLoader res = new ResourceLoader("graphics/girl.jpg");
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
38 aboutImg = ImageIO.read(res.getStream());
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
39 }
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
40 catch (IOException e)
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
41 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
42 }
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
43
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
44 aboutSecret = false;
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
45
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
46 setPos(150f, 150f);
81
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
47 setSize(675f, 420f);
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
48 }
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
49
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
50 public void setTextFont(Font font, FontMetrics metrics)
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
51 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
52 textFont = font;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
53 textMetrics = metrics;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
54 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
55
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
56 public void setTextPaint(Paint paint)
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
57 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
58 textPaint = paint;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
59 }
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
60
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
61 public void setCurrPos(IDMPoint npos)
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
62 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
63 currPos = npos;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
64 currOffs = new IDMPoint(0, 0);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
65 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
66
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
67 public void setCurrPos(float x, float y)
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
68 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
69 setCurrPos(new IDMPoint(x, y));
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
70 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
71
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
72 public void drawString(Graphics2D g, String text)
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
73 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
74 Paint savePaint = g.getPaint();
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
75 g.setPaint(textPaint);
76
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
76 g.setFont(textFont);
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
77
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
78 int i = 0;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
79 while (i < text.length())
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
80 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
81 int p = text.indexOf("\n", i);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
82 boolean linefeed;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
83 String str;
80
3d34258ccc2c Render empty lines correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 77
diff changeset
84 if (p >= i)
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
85 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
86 str = text.substring(i, p);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
87 i = p + 1;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
88 linefeed = true;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
89 }
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
90 else
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
91 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
92 str = text.substring(i);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
93 i += str.length();
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
94 linefeed = false;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
95 }
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
96
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
97 g.drawString(str, currPos.x + currOffs.x, currPos.y + currOffs.y);
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
98
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
99 if (linefeed)
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
100 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
101 currOffs.x = 0;
76
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
102 currOffs.y += textMetrics.getHeight();
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
103 }
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
104 else
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
105 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
106 currOffs.x += textMetrics.stringWidth(str);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
107 }
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
108 }
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
109
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
110 g.setPaint(savePaint);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
111 }
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
112
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
113 public void paint(Graphics2D g)
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
114 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
115 int x = getScaledX(), y = getScaledY(),
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
116 w = getScaledWidth(), h = getScaledHeight();
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
117
115
8c3bc197310d Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
118 g.setPaint(new Color(0.0f, 0.0f, 0.0f, 0.7f));
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
119 g.fill(new RoundRectangle2D.Float(x, y, w, h, 10, 10));
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
120
76
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
121 setTextFont(G.fonts[3], G.metrics[3]);
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
122 setTextPaint(Color.white);
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
123
76
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
124 setCurrPos(x + 20, y + 30);
105
75015dfd47ef Move version number info to G.java.
Matti Hamalainen <ccr@tnsp.org>
parents: 93
diff changeset
125 drawString(g, "RistiPolku (CrossPaths) v"+ G.version +"\n");
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
126
76
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
127 setTextFont(G.fonts[1], G.metrics[1]);
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
128 if (aboutSecret)
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
129 {
115
8c3bc197310d Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
130 g.drawImage(aboutImg, x + 20, y + 55,
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
131 aboutImg.getWidth(), aboutImg.getHeight(), null);
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
132
76
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
133 setCurrPos(x + 225, y + 75);
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
134 drawString(g,
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
135 "Dedicated to my\n" +
76
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
136 "favorite woman\n" +
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
137 "in the world.");
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
138
76
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
139 setCurrPos(x + 370, y + 175);
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
140 drawString(g, "- Matti");
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
141 }
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
142 else
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
143 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
144 setTextPaint(Color.yellow);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
145 drawString(g, "(c) Copyright 2011 Matti 'ccr' Hämäläinen\n");
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
146
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
147 setTextPaint(Color.white);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
148 drawString(g, "Programming project for Java-course\n" +
81
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
149 "T740306 taught by Kari Laitinen." +
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
150 "\n \n");
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
151
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
152 setTextPaint(Color.red);
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
153 drawString(g, "Controls:\n");
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
154
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
155 IDMPoint old = currOffs.copy();
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
156
81
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
157 setTextPaint(Color.white);
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
158 drawString(g,
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
159 "Arrow keys / mouse wheel\n"+
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
160 "Enter / mouse click\n"+
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
161 "Space bar\n");
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
162
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
163 currPos.x += 330;
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
164 currOffs.y = old.y;
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
165 drawString(g,
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
166 "- Rotate piece\n" +
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
167 "- Place/lock piece\n" +
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
168 "- Swap piece\n");
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
169
81
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
170 currPos.x -= 330;
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
171 setTextPaint(Color.green);
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
172 drawString(g,
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
173 "\nObjective: Create a path long as possible by rotating\n"+
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
174 "and placing pieces. More points will be awarded for\n"+
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
175 "advancing the path by several segments per turn."
8932b1300ba1 Adjust about box size, add instructions.
Matti Hamalainen <ccr@tnsp.org>
parents: 80
diff changeset
176 );
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
177 }
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
178 }
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
179
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
180 public boolean keyPressed(KeyEvent e)
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
181 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
182 if (e.getKeyCode() == KeyEvent.VK_L)
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
183 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
184 aboutSecret = true;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
185 }
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
186 else
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
187 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
188 clicked();
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
189 aboutSecret = false;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
190 }
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
191 return true;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
192 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
193
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
194 public void clicked()
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
195 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
196 parent.remove(this);
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
197 }
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
198 }
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
199
0
f930f72ed0f5 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
201 class GameBoard extends IDMWidget
0
f930f72ed0f5 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
203 static final int boardSize = 9;
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
204 static final int boardMiddle = 4;
2
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
205 Piece[][] board;
117
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
206 float pscale, ptime;
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
207
138
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
208 public boolean flagGameOver, flagBoardIsDirty;
119
52d79502447c Make few variables un-public.
Matti Hamalainen <ccr@tnsp.org>
parents: 117
diff changeset
209 int gameScore;
54
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
210
119
52d79502447c Make few variables un-public.
Matti Hamalainen <ccr@tnsp.org>
parents: 117
diff changeset
211 Piece currPiece, nextPiece;
41
a5fd4f74a767 Rename some variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
212 int currX, currY, currPoint;
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
213
47
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
214 Sound sndPlaced;
131
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
215
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
216 private final ReentrantReadWriteLock pointLock = new ReentrantReadWriteLock();
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
217 private ArrayList<AnimatedPointElement> pointElems;
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
218
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
219 public GameBoard(IDMPoint pos, float ps)
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
220 {
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
221 super(pos);
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
222 pscale = ps;
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
223
108
ae66d21d4747 Disable piece placement sound.
Matti Hamalainen <ccr@tnsp.org>
parents: 106
diff changeset
224 // sndPlaced = G.smgr.getSound("sounds/placed.wav");
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
225
131
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
226 pointElems = new ArrayList<AnimatedPointElement>();
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
227
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
228 startNewGame();
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
229 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
230
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
231 public void startNewGame()
2
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
232 {
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
233
2
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
234 board = new Piece[boardSize][boardSize];
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
235 board[boardMiddle][boardMiddle] = new Piece(PieceType.START);
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
236
41
a5fd4f74a767 Rename some variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
237 currX = boardMiddle;
42
951a4d669af0 Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
238 currY = boardMiddle;
951a4d669af0 Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
239 currPoint = 0;
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
240
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
241 currPiece = null;
54
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
242 nextPiece = new Piece(PieceType.ACTIVE);
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
243
65
dc936dba124e Set game over-flag correctly, so that we reset everything after a game over
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
244 flagGameOver = false;
138
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
245 flagBoardIsDirty = true;
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
246 pieceFinishTurn();
55
974ec36c562e Updates.
Matti Hamalainen <ccr@tnsp.org>
parents: 54
diff changeset
247 gameScore = 0;
2
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
248 }
0
f930f72ed0f5 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
249
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
250 public void paintBackPlate(Graphics2D g)
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
251 {
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
252 g.setPaint(new Color(0.0f, 0.0f, 0.0f, 0.2f));
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
253 g.setStroke(new BasicStroke(5.0f));
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
254 g.draw(new RoundRectangle2D.Float(getScaledX(), getScaledY(),
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
255 boardSize * pscale, boardSize * pscale,
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
256 pscale / 5, pscale / 5));
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
257 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
258
138
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
259 public void paintBoard(Graphics2D g, boolean drawCurrent)
2
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
260 {
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
261 for (int y = 0; y < boardSize; y++)
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
262 for (int x = 0; x < boardSize; x++)
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
263 if (board[x][y] != null)
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
264 {
138
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
265 if ((drawCurrent && board[x][y] == currPiece) ||
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
266 (!drawCurrent && board[x][y] != currPiece))
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
267 {
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
268 board[x][y].paint(g,
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
269 getScaledX() + (x * pscale),
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
270 getScaledY() + (y * pscale),
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
271 pscale - pscale / 10);
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
272 }
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
273 }
138
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
274 }
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
275
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
276 public void paint(Graphics2D g)
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
277 {
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
278 paintBoard(g, true);
117
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
279
131
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
280 Lock read = pointLock.readLock();
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
281 read.lock();
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
282 try
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
283 {
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
284 for (AnimatedPointElement elem : pointElems)
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
285 {
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
286 elem.paint(g);
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
287 }
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
288 }
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
289 finally
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
290 {
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
291 read.unlock();
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
292 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
293
131
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
294
117
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
295 if (!flagGameOver)
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
296 {
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
297 if (nextPiece != null)
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
298 {
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
299 // Draw next piece
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
300 AffineTransform save = g.getTransform();
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
301 nextPiece.paint(g, 830, 325, 90);
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
302 g.setTransform(save);
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
303 }
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
304 }
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
305 else
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
306 {
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
307 // Game over text
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
308 String text = "Game Over!";
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
309 int textWidth = G.metrics[2].stringWidth(text);
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
310 g.setFont(G.fonts[2]);
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
311
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
312 g.setPaint(new Color(0.0f, 0.0f, 0.0f, 0.5f));
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
313 g.drawString(text, (G.screenDim.width - textWidth) / 2 + 5, G.screenDim.height / 2 + 5);
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
314
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
315 double f = Math.sin(ptime * 0.1) * 4.0;
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
316 g.setPaint(Color.white);
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
317 g.drawString(text, (G.screenDim.width - textWidth) / 2 + (float) f, G.screenDim.height / 2 + (float) f);
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
318 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
319
117
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
320 // Score
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
321 g.setFont(G.fonts[2]);
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
322 g.setPaint(Color.white);
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
323 g.drawString(""+ String.format("%05d", gameScore), G.screenDim.width - 230, 220);
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
324
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
325 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
326
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
327 public boolean contains(float x, float y)
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
328 {
76
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
329 return (x >= getScaledX() &&
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
330 y >= getScaledY() &&
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
331 x < getScaledX() + boardSize * pscale &&
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
332 y < getScaledY() + boardSize * pscale);
2
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
333 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
334
138
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
335 public boolean isBoardDirty()
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
336 {
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
337 if (flagBoardIsDirty)
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
338 {
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
339 flagBoardIsDirty = false;
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
340 return true;
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
341 }
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
342 else
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
343 return false;
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
344 }
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
345
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
346 public void animate(float time)
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
347 {
117
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
348 ptime = time;
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
349 for (int y = 0; y < boardSize; y++)
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
350 for (int x = 0; x < boardSize; x++)
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
351 if (board[x][y] != null)
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
352 {
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
353 board[x][y].animate(time);
138
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
354 if (board[x][y] != currPiece && board[x][y].active)
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
355 flagBoardIsDirty = true;
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
356 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
357
131
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
358 Lock write = pointLock.writeLock();
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
359 write.lock();
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
360 try
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
361 {
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
362 ArrayList<AnimatedPointElement> tmp = new ArrayList<AnimatedPointElement>();
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
363
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
364 for (AnimatedPointElement elem : pointElems)
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
365 {
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
366 elem.animate(time);
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
367 if (elem.active)
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
368 tmp.add(elem);
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
369 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
370
131
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
371 pointElems = tmp;
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
372 }
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
373 finally
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
374 {
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
375 write.unlock();
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
376 }
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
377 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
378
32
e480579cc460 More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
379 public void pieceRotate(Piece.RotateDir dir)
2
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
380 {
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
381 if (currPiece != null && !flagGameOver)
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
382 {
41
a5fd4f74a767 Rename some variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
383 currPiece.rotate(dir);
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
384 }
2
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
385 }
1
44f1e7b47fcf Preliminary work ... puuh.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
386
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
387 // Change coordinates based on the "outgoing"
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
388 // piece connection point.
42
951a4d669af0 Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
389 private void pieceMoveTo(int point)
7
70714c229e23 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
390 {
46
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
391 switch (point)
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
392 {
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
393 case 0: currY--; break;
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
394 case 1: currY--; break;
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
395
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
396 case 2: currX++; break;
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
397 case 3: currX++; break;
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
398
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
399 case 4: currY++; break;
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
400 case 5: currY++; break;
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
401
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
402 case 6: currX--; break;
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
403 case 7: currX--; break;
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
404 }
42
951a4d669af0 Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
405 }
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
406
54
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
407 public void pieceCreateNew()
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
408 {
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
409 currPiece = nextPiece;
106
41c6cca69d60 Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 105
diff changeset
410 currPiece.changed();
54
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
411 nextPiece = new Piece(PieceType.ACTIVE);
138
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
412 flagBoardIsDirty = true;
54
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
413 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
414
54
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
415 public void pieceSwapCurrent()
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
416 {
56
8718cc1c6586 Minor bugfixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 55
diff changeset
417 if (!flagGameOver)
8718cc1c6586 Minor bugfixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 55
diff changeset
418 {
8718cc1c6586 Minor bugfixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 55
diff changeset
419 Piece tmp = currPiece;
8718cc1c6586 Minor bugfixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 55
diff changeset
420 currPiece = nextPiece;
8718cc1c6586 Minor bugfixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 55
diff changeset
421 nextPiece = tmp;
8718cc1c6586 Minor bugfixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 55
diff changeset
422 board[currX][currY] = currPiece;
106
41c6cca69d60 Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 105
diff changeset
423 currPiece.changed();
41c6cca69d60 Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 105
diff changeset
424 nextPiece.changed();
56
8718cc1c6586 Minor bugfixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 55
diff changeset
425 }
54
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
426 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
427
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
428 // Check one piece, set connections, find the new placement
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
429 // based on piece rotations etc.
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
430 private boolean pieceCheck(Piece piece)
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
431 {
53
6bf4675e2d96 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 52
diff changeset
432 if (piece == null)
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
433 {
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
434 // Create new piece
56
8718cc1c6586 Minor bugfixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 55
diff changeset
435 pieceCreateNew();
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
436 board[currX][currY] = currPiece;
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
437 return true;
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
438 }
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
439 else
53
6bf4675e2d96 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 52
diff changeset
440 if (piece.getType() == PieceType.START)
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
441 {
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
442 if (currPiece != null)
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
443 {
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
444 // Hit center starting piece, game over
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
445 flagGameOver = true;
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
446 return true;
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
447 }
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
448 else
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
449 {
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
450 // Start piece as first piece means game is starting
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
451 pieceMoveTo(currPoint);
54
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
452 pieceCreateNew();
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
453 board[currX][currY] = currPiece;
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
454 return true;
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
455 }
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
456 }
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
457
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
458 // Mark the current piece as locked
53
6bf4675e2d96 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 52
diff changeset
459 piece.setType(PieceType.LOCKED);
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
460
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
461 // Solve connection (with rotations) through the piece
53
6bf4675e2d96 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 52
diff changeset
462 currPoint = piece.getRotatedPoint(piece.getMatchingPoint(currPoint));
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
463
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
464 // Mark connection as active
53
6bf4675e2d96 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 52
diff changeset
465 piece.setConnectionState(currPoint, true);
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
466
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
467 // Solve exit point (with rotations)
53
6bf4675e2d96 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 52
diff changeset
468 currPoint = piece.getAntiRotatedPoint(piece.getConnection(currPoint));
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
469
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
470 // Move to next position accordingly
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
471 pieceMoveTo(currPoint);
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
472 return false;
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
473 }
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
474
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
475 // Finish one move/turn of the game, resolve path and find placement
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
476 // of the next piece, or set "game over" state if required.
42
951a4d669af0 Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
477 public void pieceFinishTurn()
951a4d669af0 Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
478 {
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
479 boolean finished = false;
55
974ec36c562e Updates.
Matti Hamalainen <ccr@tnsp.org>
parents: 54
diff changeset
480 int connections = 0;
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
481
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
482 if (currPiece != null)
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
483 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
484 G.smgr.play(sndPlaced);
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
485 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
486
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
487 while (!finished)
7
70714c229e23 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
488 {
42
951a4d669af0 Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
489 if (currX >= 0 && currX < boardSize && currY >= 0 && currY < boardSize)
27
26adc2827983 More work on the internals.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
490 {
135
a33fdb1de11c Fix where the animated point elements appear initially.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
491 int oldX = currX, oldY = currY;
55
974ec36c562e Updates.
Matti Hamalainen <ccr@tnsp.org>
parents: 54
diff changeset
492 connections++;
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
493 finished = pieceCheck(board[currX][currY]);
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
494
131
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
495 if (!finished)
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
496 {
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
497 Lock write = pointLock.writeLock();
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
498 write.lock();
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
499 try
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
500 {
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
501 pointElems.add(new AnimatedPointElement(
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
502 new IDMPoint(
135
a33fdb1de11c Fix where the animated point elements appear initially.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
503 getScaledX() + ((oldX + 0.5f) * pscale),
a33fdb1de11c Fix where the animated point elements appear initially.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
504 getScaledY() + ((oldY + 0.5f) * pscale)),
131
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
505 "" + connections));
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
506 }
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
507 finally
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
508 {
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
509 write.unlock();
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
510 }
67b2322fda91 Add spawning of animated score elements when player finishes a turn.
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
511 }
135
a33fdb1de11c Fix where the animated point elements appear initially.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
512
27
26adc2827983 More work on the internals.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
513 }
26adc2827983 More work on the internals.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
514 else
26adc2827983 More work on the internals.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
515 {
46
3e8d1c30f573 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
516 // Outside of the board, game over
48
f13bab4cccd3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
517 finished = true;
42
951a4d669af0 Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
518 flagGameOver = true;
7
70714c229e23 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
519 }
70714c229e23 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
520 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
521
66
d406e14b870d Add comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 65
diff changeset
522 // Compute and add score
55
974ec36c562e Updates.
Matti Hamalainen <ccr@tnsp.org>
parents: 54
diff changeset
523 gameScore += connections * connections;
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
524
66
d406e14b870d Add comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 65
diff changeset
525 // If game over, clear the game
53
6bf4675e2d96 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 52
diff changeset
526 if (flagGameOver)
6bf4675e2d96 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 52
diff changeset
527 {
6bf4675e2d96 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 52
diff changeset
528 currPiece = null;
6bf4675e2d96 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 52
diff changeset
529 }
42
951a4d669af0 Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
530 }
66
d406e14b870d Add comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 65
diff changeset
531
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
532 public boolean mouseWheelMoved(MouseWheelEvent e)
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
533 {
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
534 int notches = e.getWheelRotation();
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
535
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
536 if (notches < 0)
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
537 pieceRotate(Piece.RotateDir.LEFT);
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
538 else
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
539 pieceRotate(Piece.RotateDir.RIGHT);
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
540
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
541 return true;
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
542 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
543
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
544 public void clicked()
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
545 {
77
d17db72ac770 Fix the game continuing after gameover bug again due to refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 76
diff changeset
546 if (!flagGameOver)
d17db72ac770 Fix the game continuing after gameover bug again due to refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 76
diff changeset
547 pieceFinishTurn();
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
548 }
47
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
549
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
550 public boolean keyPressed(KeyEvent e)
47
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
551 {
54
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
552 if (flagGameOver)
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
553 return false;
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
554
47
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
555 switch (e.getKeyCode())
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
556 {
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
557 case KeyEvent.VK_LEFT:
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
558 case KeyEvent.VK_UP:
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
559 pieceRotate(Piece.RotateDir.LEFT);
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
560 return true;
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
561
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
562 case KeyEvent.VK_RIGHT:
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
563 case KeyEvent.VK_DOWN:
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
564 pieceRotate(Piece.RotateDir.RIGHT);
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
565 return true;
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
566
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
567 case KeyEvent.VK_ENTER:
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
568 pieceFinishTurn();
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
569 return true;
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
570 }
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
571 return false;
695cf13c103a Move some code.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
572 }
1
44f1e7b47fcf Preliminary work ... puuh.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
573 }
44f1e7b47fcf Preliminary work ... puuh.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
574
44f1e7b47fcf Preliminary work ... puuh.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
575
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
576 public class Engine extends JPanel
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
577 implements Runnable, KeyListener,
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
578 MouseListener, MouseWheelListener
1
44f1e7b47fcf Preliminary work ... puuh.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
579 {
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
580 long startTime;
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
581 float gameClock, gameFrames;
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
582
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
583 Thread animThread;
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
584 boolean animEnable = false;
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
585
4
e0e8fd08331e Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
586 GameBoard lauta = null;
69
163232ec225b Stream music data instead of loading to memory.
Matti Hamalainen <ccr@tnsp.org>
parents: 68
diff changeset
587 InputStream musa;
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
588 IDMContainer widgets;
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
589 AboutBox aboutBox;
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
590
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
591 public Engine()
2
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
592 {
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
593 // Initialize globals
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
594 System.out.print("Engine() constructor\n");
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
595
37
3dc5ae9f1c80 Work on game logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
596 // Sound system
133
881deac2daf8 Some more work on scaling widgets, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
597 G.smgr = new SoundManager(new AudioFormat(22050, 16, 1, true, false), 1);
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
598
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
599 // Load resources
4
e0e8fd08331e Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
600 try
e0e8fd08331e Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
601 {
24
1be98362e5e9 FPS measurement.
Matti Hamalainen <ccr@tnsp.org>
parents: 23
diff changeset
602 ResourceLoader res = new ResourceLoader("graphics/board.jpg");
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
603 G.lautaBG = ImageIO.read(res.getStream());
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
604
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
605 try {
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
606 res = new ResourceLoader("graphics/font.ttf");
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
607
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
608 G.fonts = new Font[G.numFonts];
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
609 G.fonts[0] = Font.createFont(Font.TRUETYPE_FONT, res.getStream());
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
610 G.fonts[1] = G.fonts[0].deriveFont(24f);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
611 G.fonts[2] = G.fonts[0].deriveFont(64f);
76
43f68fe605de More cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
612 G.fonts[3] = G.fonts[0].deriveFont(32f);
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
613 }
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
614 catch (FontFormatException e)
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
615 {
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
616 System.out.print("Could not initialize fonts.\n");
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
617 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
618
69
163232ec225b Stream music data instead of loading to memory.
Matti Hamalainen <ccr@tnsp.org>
parents: 68
diff changeset
619 res = new ResourceLoader("sounds/gamemusic.wav");
163232ec225b Stream music data instead of loading to memory.
Matti Hamalainen <ccr@tnsp.org>
parents: 68
diff changeset
620 musa = res.getStream();
4
e0e8fd08331e Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
621 }
e0e8fd08331e Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
622 catch (IOException e)
e0e8fd08331e Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
623 {
e0e8fd08331e Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
624 JOptionPane.showMessageDialog(null,
21
df494a65bf8c More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
625 e.getMessage(),
4
e0e8fd08331e Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
626 "Initialization error",
e0e8fd08331e Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
627 JOptionPane.ERROR_MESSAGE);
37
3dc5ae9f1c80 Work on game logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
628
21
df494a65bf8c More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
629 System.out.print(e.getMessage());
18
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
630 }
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
631
52
01851bae3da3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 51
diff changeset
632 // Create IDM GUI widgets
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
633 widgets = new IDMContainer();
52
01851bae3da3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 51
diff changeset
634
117
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
635 lauta = new GameBoard(new IDMPoint(95, 130), 63);
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
636 widgets.add(lauta);
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
637
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
638 widgets.add(new BtnSwapPiece(767f, 450f));
124
fa1b86b632aa Slight changes in UI buttons placement to match the graphics changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 119
diff changeset
639 widgets.add(new BtnAbout (767f, 550f));
fa1b86b632aa Slight changes in UI buttons placement to match the graphics changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 119
diff changeset
640 widgets.add(new BtnNewGame (767f, 630f));
50
496e616ff09d More work on IDMgui.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
641
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
642 aboutBox = new AboutBox();
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
643
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
644 // Game
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
645 startNewGame();
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
646
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
647 // Initialize event listeners
18
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
648 addKeyListener(this);
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
649 addMouseListener(this);
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
650 addMouseWheelListener(this);
18
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
651
93
e1d657e6c25b Work on audio code.
Matti Hamalainen <ccr@tnsp.org>
parents: 88
diff changeset
652 // Start playing background music
e1d657e6c25b Work on audio code.
Matti Hamalainen <ccr@tnsp.org>
parents: 88
diff changeset
653 G.smgr.play(musa);
e1d657e6c25b Work on audio code.
Matti Hamalainen <ccr@tnsp.org>
parents: 88
diff changeset
654
18
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
655 // Get initial focus
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
656 if (!hasFocus())
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
657 {
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
658 System.out.print("Engine(): requesting focus\n");
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
659 requestFocus();
4
e0e8fd08331e Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
660 }
93
e1d657e6c25b Work on audio code.
Matti Hamalainen <ccr@tnsp.org>
parents: 88
diff changeset
661
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
662 }
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
663
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
664 public void startNewGame()
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
665 {
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
666 gameClock = 0;
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
667 gameFrames = 0;
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
668 startTime = new Date().getTime();
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
669 lauta.startNewGame();
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
670 }
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
671
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
672 public void paintComponent(Graphics g)
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
673 {
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
674 Graphics2D g2 = (Graphics2D) g;
138
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
675 boolean scaleChanged = false,
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
676 updateBoard = lauta.isBoardDirty();
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
677
52
01851bae3da3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 51
diff changeset
678 // Rescale if parent component size has changed
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
679 Dimension dim = getSize();
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
680 if (G.screenDim == null || !dim.equals(G.screenDim))
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
681 {
133
881deac2daf8 Some more work on scaling widgets, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
682 float dw = dim.width / 1024.0f,
881deac2daf8 Some more work on scaling widgets, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
683 dh = dim.height / 768.0f;
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
684
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
685 // Rescale IDM GUI widgets
133
881deac2daf8 Some more work on scaling widgets, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
686 widgets.setScale(dw, dh);
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
687 G.screenDim = dim;
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
688
52
01851bae3da3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 51
diff changeset
689 // Rescale background image
133
881deac2daf8 Some more work on scaling widgets, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
690 // Rescale fonts
881deac2daf8 Some more work on scaling widgets, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
691 G.fonts[1] = G.fonts[0].deriveFont(24f * dw);
881deac2daf8 Some more work on scaling widgets, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
692 G.fonts[2] = G.fonts[0].deriveFont(64f * dw);
881deac2daf8 Some more work on scaling widgets, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
693 G.fonts[3] = G.fonts[0].deriveFont(32f * dw);
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
694
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
695 System.out.print("scale changed\n");
133
881deac2daf8 Some more work on scaling widgets, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
696 scaleChanged = true;
138
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
697 updateBoard = true;
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
698 }
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
699
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
700 if (updateBoard)
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
701 {
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
702 System.out.print("updateBoard()\n");
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
703 G.lautaBGScaled = new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_INT_RGB);
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
704 Graphics2D gimg = G.lautaBGScaled.createGraphics();
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
705 gimg.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
706 RenderingHints.VALUE_INTERPOLATION_BICUBIC);
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
707
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
708 gimg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
709 RenderingHints.VALUE_ANTIALIAS_ON);
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
710
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
711 gimg.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
712 RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
713
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
714 gimg.drawImage(G.lautaBG, 0, 0, dim.width, dim.height, null);
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
715 lauta.paintBackPlate(gimg);
9eb791e2fa17 Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents: 135
diff changeset
716 lauta.paintBoard(gimg, false);
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
717 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
718
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
719 // Get font metrics against current Graphics2D context
133
881deac2daf8 Some more work on scaling widgets, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
720 if (G.metrics == null || scaleChanged)
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
721 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
722 G.metrics = new FontMetrics[G.numFonts];
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
723 for (int i = 0; i < G.numFonts; i++)
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
724 G.metrics[i] = g2.getFontMetrics(G.fonts[i]);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
725 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
726
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
727 // Draw background image, pieces, widgets
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
728 g2.drawImage(G.lautaBGScaled, 0, 0, null);
86
454a9fcd13ca Turn antialiasing rendering hints on only for the needed elements to improve rendering speed and CPU usage.
Matti Hamalainen <ccr@tnsp.org>
parents: 82
diff changeset
729
454a9fcd13ca Turn antialiasing rendering hints on only for the needed elements to improve rendering speed and CPU usage.
Matti Hamalainen <ccr@tnsp.org>
parents: 82
diff changeset
730 // Use antialiasing when rendering the game elements
454a9fcd13ca Turn antialiasing rendering hints on only for the needed elements to improve rendering speed and CPU usage.
Matti Hamalainen <ccr@tnsp.org>
parents: 82
diff changeset
731 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
454a9fcd13ca Turn antialiasing rendering hints on only for the needed elements to improve rendering speed and CPU usage.
Matti Hamalainen <ccr@tnsp.org>
parents: 82
diff changeset
732 RenderingHints.VALUE_ANTIALIAS_ON);
454a9fcd13ca Turn antialiasing rendering hints on only for the needed elements to improve rendering speed and CPU usage.
Matti Hamalainen <ccr@tnsp.org>
parents: 82
diff changeset
733
454a9fcd13ca Turn antialiasing rendering hints on only for the needed elements to improve rendering speed and CPU usage.
Matti Hamalainen <ccr@tnsp.org>
parents: 82
diff changeset
734 g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
454a9fcd13ca Turn antialiasing rendering hints on only for the needed elements to improve rendering speed and CPU usage.
Matti Hamalainen <ccr@tnsp.org>
parents: 82
diff changeset
735 RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
454a9fcd13ca Turn antialiasing rendering hints on only for the needed elements to improve rendering speed and CPU usage.
Matti Hamalainen <ccr@tnsp.org>
parents: 82
diff changeset
736
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
737 widgets.paint(g2);
55
974ec36c562e Updates.
Matti Hamalainen <ccr@tnsp.org>
parents: 54
diff changeset
738
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
739
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
740 // Frames per second counter
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
741 g2.setFont(G.fonts[1]);
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
742 long currTime = new Date().getTime();
117
973f567c7b9d Change how gameboard is rendered, make it more OO-sensible.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
743 g2.drawString("fps = "+ ((gameFrames * 1000) / (currTime - startTime)), G.screenDim.width - 120, 20);
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
744
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
745 gameFrames++;
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
746 }
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
747
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
748 public void startThreads()
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
749 {
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
750 System.out.print("startThreads()\n");
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
751 if (animThread == null)
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
752 {
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
753 animThread = new Thread(this);
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
754 animEnable = true;
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
755 animThread.start();
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
756 }
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
757 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
758
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
759 public void stopThreads()
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
760 {
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
761 System.out.print("stopThreads()\n");
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
762
37
3dc5ae9f1c80 Work on game logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
763 // Stop animations
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
764 if (animThread != null)
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
765 {
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
766 animThread.interrupt();
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
767 animEnable = false;
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
768 animThread = null;
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
769 }
22
afde253ec705 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
770
37
3dc5ae9f1c80 Work on game logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
771 // Shut down sound manager
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
772 G.smgr.close();
2
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
773 }
0
f930f72ed0f5 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
774
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
775 public void mouseEntered(MouseEvent e)
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
776 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
777 widgets.mouseEntered(e);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
778 }
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
779 public void mouseExited(MouseEvent e)
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
780 {
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
781 widgets.mouseExited(e);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
782 }
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
783
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
784 public void mousePressed(MouseEvent e)
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
785 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
786 if (widgets.containsObject(aboutBox))
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
787 aboutBox.mousePressed(e);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
788 else
60
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
789 widgets.mousePressed(e);
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
790 }
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
791
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
792 public void mouseReleased(MouseEvent e)
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
793 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
794 if (widgets.containsObject(aboutBox))
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
795 aboutBox.mouseReleased(e);
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
796 else
60
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
797 widgets.mouseReleased(e);
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
798 }
18
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
799
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
800 public void mouseClicked(MouseEvent e)
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
801 {
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
802 if (!hasFocus())
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
803 {
60
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
804 System.out.print("Requesting focus\n");
18
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
805 requestFocus();
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
806 }
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
807 }
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
808
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
809 public void mouseWheelMoved(MouseWheelEvent e)
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
810 {
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
811 lauta.mouseWheelMoved(e);
18
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
812 }
4507a431b410 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
813
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
814 public void keyTyped(KeyEvent e) { }
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
815 public void keyReleased(KeyEvent e) { }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
816
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
817 public void keyPressed(KeyEvent e)
2
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
818 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
819 // Handle keyboard input
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
820 if (widgets.containsObject(aboutBox))
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
821 aboutBox.keyPressed(e);
60
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
822 else
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
823 widgets.keyPressed(e);
2
1785f66a7beb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
824 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
825
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
826 public void run()
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
827 {
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
828 while (animEnable)
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
829 {
26
3d4cc47df31a Cleanups, fix piece rendering and rotation.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
830 // Progress game animation clock
25
bbac3e4a4b9b Cleanups, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
831 gameClock++;
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
832
26
3d4cc47df31a Cleanups, fix piece rendering and rotation.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
833 // Animate components
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
834 lauta.animate(gameClock);
62
caf67c7e0814 Fix a possible null pointer exception under certain circumstances.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
835 if (lauta.nextPiece != null)
caf67c7e0814 Fix a possible null pointer exception under certain circumstances.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
836 lauta.nextPiece.animate(gameClock);
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
837
26
3d4cc47df31a Cleanups, fix piece rendering and rotation.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
838 // Repaint with a frame limiter
59
fd10a9422b60 Cleanups, bugfixes, etc etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
839 if (gameClock % 4 == 1)
10
4bacc98973f5 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
840 repaint();
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
841
26
3d4cc47df31a Cleanups, fix piece rendering and rotation.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
842 // Sleep for a moment
9
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
843 try {
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
844 Thread.sleep(10);
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
845 }
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
846 catch (InterruptedException x) {
a7751971c2a3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
847 }
8
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
848 }
d8e7fd8f3ccf Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
849 }
134
4c0dec72e2f0 Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 133
diff changeset
850
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
851 class BtnNewGame extends IDMButton
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
852 {
51
f81f76458b92 Work on widgets.
Matti Hamalainen <ccr@tnsp.org>
parents: 50
diff changeset
853 public BtnNewGame(float x, float y)
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
854 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
855 super(x, y, KeyEvent.VK_ESCAPE, G.fonts[1], "New Game");
49
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
856 }
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
857
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
858 public void clicked()
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
859 {
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
860 startNewGame();
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
861 }
e6da5c71be28 Add more code to IDM widgets, do preliminary work for integrating them.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
862 }
50
496e616ff09d More work on IDMgui.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
863
496e616ff09d More work on IDMgui.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
864 class BtnSwapPiece extends IDMButton
496e616ff09d More work on IDMgui.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
865 {
51
f81f76458b92 Work on widgets.
Matti Hamalainen <ccr@tnsp.org>
parents: 50
diff changeset
866 public BtnSwapPiece(float x, float y)
50
496e616ff09d More work on IDMgui.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
867 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
868 super(x, y, KeyEvent.VK_SPACE, G.fonts[1], "Swap");
50
496e616ff09d More work on IDMgui.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
869 }
496e616ff09d More work on IDMgui.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
870
496e616ff09d More work on IDMgui.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
871 public void clicked()
496e616ff09d More work on IDMgui.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
872 {
54
cc7943cd7f2d Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
873 lauta.pieceSwapCurrent();
50
496e616ff09d More work on IDMgui.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
874 }
496e616ff09d More work on IDMgui.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
875 }
60
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
876
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
877 class BtnAbout extends IDMButton
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
878 {
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
879 public BtnAbout(float x, float y)
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
880 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
881 super(x, y, KeyEvent.VK_A, G.fonts[1], "About");
60
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
882 }
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
883
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
884 public void clicked()
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
885 {
75
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
886 if (!widgets.containsObject(aboutBox))
b586ce4f6d97 Large GUI code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 71
diff changeset
887 widgets.add(aboutBox);
60
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
888 }
4a984e3b27d2 Cleanups. Add a ad-hoc about box, it's ugly.
Matti Hamalainen <ccr@tnsp.org>
parents: 59
diff changeset
889 }
0
f930f72ed0f5 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
890 }