/*******************************************************************************
* Copyright 2015 Maximilian Stark | Dakror <mail@dakror.de>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package de.dakror.arise.util;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
import de.dakror.arise.game.Game;
import de.dakror.arise.game.building.Building;
import de.dakror.arise.settings.Resources;
import de.dakror.arise.settings.Resources.Resource;
import de.dakror.gamesetup.GameFrame;
import de.dakror.gamesetup.util.Helper;
/**
* @author Dakror
*/
public class Assistant {
public static void drawResource(Resources resources, Resource r, int x, int y, int size, int space, Graphics2D g) {
drawLabelWithIcon(x, y, size, new Point(r.getIconX(), r.getIconY()), resources.get(r) + "", space, g);
}
public static void drawResource(Resources resources, Resource r, int amount, int x, int y, int size, int space, Graphics2D g) {
drawLabelWithIcon(x, y, size, new Point(r.getIconX(), r.getIconY()), amount + "", space, g);
}
public static void drawLabelWithIcon(int x, int y, int size, Point icon, String text, int space, Graphics2D g) {
Helper.drawImage(Game.getImage("system/icons.png"), x, y, 24, 24, icon.x * 24, icon.y * 24, 24, 24, g);
Font old = g.getFont();
g.setFont(g.getFont().deriveFont((float) size));
FontMetrics fm = g.getFontMetrics();
g.drawString(text, x + space, y + fm.getAscent() + 2);
g.setFont(old);
}
public static void drawBuildingStage(int x, int y, Building b, Graphics2D g) {
BufferedImage tile = GameFrame.getImage("world/buildingStage.png");
int width = b.bw * 32;
int height = b.bh * 32;
int size = 32;
Helper.drawImage(tile, x, y, size, size, 0, 0, size, size, g); // lt
Helper.drawImage(tile, x + width - size, y, size, size, size * 2, 0, size, size, g); // rt
Helper.drawImage(tile, x, y + height - size, size, size, 0, size * 2, size, size, g); // lb
Helper.drawImage(tile, x + width - size, y + height - size, size, size, size * 2, size * 2, size, size, g); // rb
for (int i = size; i <= width - size * 2; i += size)
Helper.drawImage(tile, x + i, y, size, size, size, 0, size, size, g);// t
for (int i = size; i <= width - size * 2; i += size)
Helper.drawImage(tile, x + i, y + height - size, size, size, size, size * 2, size, size, g); // b
for (int i = size; i <= height - size * 2; i += size)
Helper.drawImage(tile, x, y + i, size, size, 0, size, size, size, g); // l
for (int i = size; i <= height - size * 2; i += size)
Helper.drawImage(tile, x + width - size, y + i, size, size, size * 2, size, size, size, g); // r
for (int i = size; i <= width - size * 2; i += size)
for (int j = size; j <= height - size * 2; j += size)
Helper.drawImage(tile, x + i, y + j, size, size, size, size, size, size, g); // m
}
public static String formatSeconds(long s) {
String seconds = s % 60 + "";
seconds = seconds.length() == 1 ? "0" + seconds : seconds;
String minutes = (s / 60) % 60 + "";
minutes = minutes.length() == 1 ? "0" + minutes : minutes;
String hours = (s / 3600) % 24 + "";
hours = hours.length() == 1 ? "0" + hours : hours;
String days = s / (3600 * 24) + "";
return (days.equals("0") ? "" : days + ":") + (hours.equals("00") ? "" : hours + ":") + minutes + ":" + seconds;
}
public static InetAddress getBroadcastAddress() {
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface networkInterface = interfaces.nextElement();
if (networkInterface.isLoopback()) continue;
for (InterfaceAddress interfaceAddress : networkInterface.getInterfaceAddresses()) {
InetAddress broadcast = interfaceAddress.getBroadcast();
if (broadcast != null) return broadcast;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String formatNumber(double n, int iteration) {
if (n < 1000) return (int) n + "";
char[] c = new char[] { 'k', 'm', 'b', 't' };
double d = ((long) n / 100) / 10.0;
boolean isRound = (d * 10) % 10 == 0;
return (d < 1000 ? ((d > 99.9 || isRound || (!isRound && d > 9.99) ? (int) d * 10 / 10 : d + "") + "" + c[iteration]) : formatNumber(d, iteration + 1));
}
public static String readConsoleInput() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
return br.readLine();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}