source: lost-perception/utils/Utils.java@ ebd3538

Last change on this file since ebd3538 was ebd3538, checked in by Dmitry Portnoy <dmitry.portnoy@…>, 6 years ago

Initial commit. This codebase for the Lost Perception game was created by decompiling code from a jar file.

  • Property mode set to 100644
File size: 10.7 KB
Line 
1package utils;
2
3import java.awt.Rectangle;
4import java.awt.Shape;
5import collision.Bound;
6import java.awt.geom.Ellipse2D;
7import main.Enemy;
8import java.util.ArrayList;
9import main.Creature;
10import java.util.HashMap;
11import java.awt.Graphics2D;
12import java.awt.image.BufferedImageOp;
13import java.awt.Composite;
14import java.awt.AlphaComposite;
15import java.awt.Color;
16import java.awt.image.ImageObserver;
17import java.awt.Image;
18import javax.imageio.ImageIO;
19import java.awt.image.BufferedImage;
20import java.awt.FontFormatException;
21import java.io.File;
22import java.awt.Font;
23import java.io.IOException;
24import java.io.FileReader;
25import java.io.Reader;
26import java.io.InputStreamReader;
27import java.io.BufferedReader;
28import java.awt.DisplayMode;
29import java.awt.GraphicsDevice;
30import java.util.Date;
31import java.text.SimpleDateFormat;
32import main.Direction;
33import java.awt.GraphicsConfiguration;
34
35public class Utils
36{
37 private static boolean RUNNING_FROM_JAR;
38 private static Utils classLoaderReference;
39 public static GraphicsConfiguration gc;
40
41 static {
42 Utils.classLoaderReference = null;
43 }
44
45 public static void init(final GraphicsConfiguration gc, final boolean jar) {
46 Utils.gc = gc;
47 Utils.RUNNING_FROM_JAR = jar;
48 }
49
50 public static String shortString(final Direction dir) {
51 switch (dir) {
52 case North: {
53 return "n";
54 }
55 case NorthEast: {
56 return "ne";
57 }
58 case East: {
59 return "e";
60 }
61 case SouthEast: {
62 return "se";
63 }
64 case South: {
65 return "s";
66 }
67 case SouthWest: {
68 return "sw";
69 }
70 case West: {
71 return "w";
72 }
73 case NorthWest: {
74 return "nw";
75 }
76 default: {
77 return "";
78 }
79 }
80 }
81
82 public static String dateString() {
83 return new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new Date());
84 }
85
86 private static DisplayMode getBestDisplayMode(final GraphicsDevice device, final int xRes, final int yRes) {
87 final DisplayMode[] BEST_DISPLAY_MODES = { new DisplayMode(xRes, yRes, 32, 0), new DisplayMode(xRes, yRes, 16, 0), new DisplayMode(xRes, yRes, 8, 0) };
88 for (int x = 0; x < BEST_DISPLAY_MODES.length; ++x) {
89 final DisplayMode[] modes = device.getDisplayModes();
90 for (int i = 0; i < modes.length; ++i) {
91 if (modes[i].getWidth() == BEST_DISPLAY_MODES[x].getWidth() && modes[i].getHeight() == BEST_DISPLAY_MODES[x].getHeight() && modes[i].getBitDepth() == BEST_DISPLAY_MODES[x].getBitDepth()) {
92 return BEST_DISPLAY_MODES[x];
93 }
94 }
95 }
96 return null;
97 }
98
99 public static void chooseBestDisplayMode(final GraphicsDevice device, final int xRes, final int yRes) {
100 final DisplayMode best = getBestDisplayMode(device, xRes, yRes);
101 if (best != null) {
102 device.setDisplayMode(best);
103 }
104 }
105
106 public static BufferedReader loadTextFile(final String fileName) throws IOException {
107 if (Utils.RUNNING_FROM_JAR) {
108 if (Utils.classLoaderReference == null) {
109 Utils.classLoaderReference = new Utils();
110 }
111 return new BufferedReader(new InputStreamReader(Utils.classLoaderReference.getClass().getResourceAsStream("/" + fileName)));
112 }
113 return new BufferedReader(new FileReader(fileName));
114 }
115
116 public static Font loadFont(final String fileName) {
117 try {
118 if (Utils.RUNNING_FROM_JAR) {
119 if (Utils.classLoaderReference == null) {
120 Utils.classLoaderReference = new Utils();
121 }
122 return Font.createFont(0, Utils.classLoaderReference.getClass().getResourceAsStream("/" + fileName));
123 }
124 return Font.createFont(0, new File(fileName));
125 }
126 catch (FontFormatException ffe) {
127 ffe.printStackTrace();
128 }
129 catch (IOException ioe) {
130 ioe.printStackTrace();
131 }
132 return null;
133 }
134
135 public static BufferedImage loadImg(final String fileName) {
136 try {
137 BufferedImage init;
138 if (Utils.RUNNING_FROM_JAR) {
139 if (Utils.classLoaderReference == null) {
140 Utils.classLoaderReference = new Utils();
141 }
142 init = ImageIO.read(Utils.classLoaderReference.getClass().getResource("/images/" + fileName));
143 } else {
144 init = ImageIO.read(new File("images/" + fileName));
145 }
146 final BufferedImage accelerated = Utils.gc.createCompatibleImage(init.getWidth(), init.getHeight(), 3);
147 accelerated.getGraphics().drawImage(init, 0, 0, null);
148 return accelerated;
149 } catch (IOException ioe) {
150 ioe.printStackTrace();
151 return null;
152 }
153 }
154
155 public static BufferedImage loadTransImg(final String fileName, final Color bgColor, final Color shadowColor) {
156 try {
157 BufferedImage init;
158 if (Utils.RUNNING_FROM_JAR) {
159 init = ImageIO.read(Utils.classLoaderReference.getClass().getResource("/images/" + fileName));
160 }
161 else {
162 init = ImageIO.read(new File("images/" + fileName));
163 }
164 init = makeColorTransparent(init, bgColor, 0);
165 init = makeColorTransparent(init, shadowColor, -1593835520);
166 final BufferedImage accelerated = Utils.gc.createCompatibleImage(init.getWidth(), init.getHeight(), 3);
167 accelerated.getGraphics().drawImage(init, 0, 0, null);
168 return accelerated;
169 }
170 catch (IOException ioe) {
171 ioe.printStackTrace();
172 return null;
173 }
174 }
175
176 public static BufferedImage makeColorTransparent(final BufferedImage image, final Color color, final int newColor) {
177 final BufferedImage dimg = new BufferedImage(image.getWidth(), image.getHeight(), 2);
178 final Graphics2D g = dimg.createGraphics();
179 g.setComposite(AlphaComposite.Src);
180 g.drawImage(image, null, 0, 0);
181 g.dispose();
182 for (int i = 0; i < dimg.getHeight(); ++i) {
183 for (int j = 0; j < dimg.getWidth(); ++j) {
184 if (dimg.getRGB(j, i) == color.getRGB()) {
185 dimg.setRGB(j, i, newColor);
186 }
187 }
188 }
189 return dimg;
190 }
191
192 public static void loadCreatures(final HashMap<Integer, Creature> crMap, final ArrayList<Creature> crSet) {
193 final int[][] numFramesArr = { { 8, 1, 13, 9, 9 }, { 9, 1, 9, 7, 9 }, { 8, 1, 13, 9, 11 }, { 9, 1, 13, 7, 9 }, { 8, 1, 9, 7, 11 }, { 8, 1, 13, 9, 13 }, { 8, 1, 13, 9, 13 } };
194 Enemy cr = new Enemy("Black Guard", 0, 22, 400);
195 cr.loadModel("black-knight", new Color(111, 79, 51), new Color(41, 29, 18), numFramesArr[0]);
196 cr.setBound(new Bound(new Ellipse2D.Double(-16.0, -16.0, 32.0, 32.0)));
197 cr.setSelectionBound(new Bound(new Rectangle(-20, -53, 40, 63)));
198 cr.strikeFrame = 9;
199 cr.spotRadius = 240;
200 cr.patrolRadius = 400;
201 cr.setAttack(10, 0, 32, 60);
202 cr.setStats(0, 0, 10, 10);
203 if (crSet != null) {
204 crSet.add(cr);
205 }
206 crMap.put(cr.id, cr);
207 cr = new Enemy("Rogue", 0, 30, 300);
208 cr.loadModel("burra", new Color(106, 76, 48), new Color(39, 27, 17), numFramesArr[1]);
209 cr.setBound(new Bound(new Ellipse2D.Double(-13.0, -13.0, 26.0, 26.0)));
210 cr.setSelectionBound(new Bound(new Rectangle(-16, -50, 32, 60)));
211 cr.strikeFrame = 6;
212 cr.spotRadius = 300;
213 cr.patrolRadius = 500;
214 cr.setAttack(5, 0, 32, 60);
215 cr.setStats(0, 0, 7, 7);
216 if (crSet != null) {
217 crSet.add(cr);
218 }
219 crMap.put(cr.id, cr);
220 cr = new Enemy("Ninja", 0, 22, 500);
221 cr.loadModel("black-ninja", new Color(106, 76, 48), new Color(39, 27, 17), numFramesArr[2]);
222 cr.setBound(new Bound(new Ellipse2D.Double(-13.0, -13.0, 26.0, 26.0)));
223 cr.setSelectionBound(new Bound(new Rectangle(-16, -54, 32, 60)));
224 cr.strikeFrame = 9;
225 cr.spotRadius = 300;
226 cr.patrolRadius = 500;
227 cr.setAttack(20, 0, 32, 60);
228 cr.setStats(0, 0, 15, 15);
229 if (crSet != null) {
230 crSet.add(cr);
231 }
232 crMap.put(cr.id, cr);
233 cr = new Enemy("Ranger", 0, 30, 350);
234 cr.loadModel("swordstan", new Color(106, 76, 48), new Color(39, 27, 17), numFramesArr[3]);
235 cr.setBound(new Bound(new Ellipse2D.Double(-13.0, -13.0, 26.0, 26.0)));
236 cr.setSelectionBound(new Bound(new Rectangle(-16, -47, 32, 57)));
237 cr.strikeFrame = 9;
238 cr.spotRadius = 450;
239 cr.patrolRadius = 700;
240 cr.setAttack(6, 0, 32, 60);
241 cr.setStats(0, 0, 8, 8);
242 if (crSet != null) {
243 crSet.add(cr);
244 }
245 crMap.put(cr.id, cr);
246 cr = new Enemy("White Dragon", 0, 52, 1000);
247 cr.loadModel("airdragon", new Color(106, 76, 48), new Color(39, 27, 17), numFramesArr[4]);
248 cr.setBound(new Bound(new Ellipse2D.Double(-20.0, -20.0, 40.0, 40.0)));
249 cr.setSelectionBound(new Bound(new Rectangle(-24, -53, 48, 63)));
250 cr.strikeFrame = 5;
251 cr.spotRadius = 240;
252 cr.patrolRadius = 400;
253 cr.setAttack(50, 0, 45, 70);
254 cr.setStats(0, 0, 120, 120);
255 if (crSet != null) {
256 crSet.add(cr);
257 }
258 crMap.put(cr.id, cr);
259 cr = new Enemy("White Mage", 0, 30, 400);
260 cr.loadModel("white-mage", new Color(105, 74, 46), new Color(33, 23, 14), numFramesArr[6]);
261 cr.setBound(new Bound(new Ellipse2D.Double(-16.0, -16.0, 32.0, 32.0)));
262 cr.setSelectionBound(new Bound(new Rectangle(-16, -47, 32, 57)));
263 cr.strikeFrame = 9;
264 cr.spotRadius = 240;
265 cr.patrolRadius = 400;
266 cr.setAttack(10, 0, 45, 70);
267 cr.setStats(0, 0, 5, 5);
268 if (crSet != null) {
269 crSet.add(cr);
270 }
271 crMap.put(cr.id, cr);
272 cr = new Enemy("Orc", 0, 22, 250);
273 cr.loadModel("orc", new Color(105, 74, 46), new Color(33, 23, 14), numFramesArr[5]);
274 cr.setBound(new Bound(new Ellipse2D.Double(-13.0, -13.0, 26.0, 26.0)));
275 cr.setSelectionBound(new Bound(new Rectangle(-18, -57, 36, 67)));
276 cr.strikeFrame = 9;
277 cr.spotRadius = 240;
278 cr.patrolRadius = 400;
279 cr.setAttack(30, 0, 45, 70);
280 cr.setStats(0, 0, 40, 40);
281 if (crSet != null) {
282 crSet.add(cr);
283 }
284 crMap.put(cr.id, cr);
285 }
286}
Note: See TracBrowser for help on using the repository browser.