/*******************************************************************************
* 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.game.world;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.io.IOException;
import de.dakror.arise.game.Game;
import de.dakror.arise.layer.CityHUDLayer;
import de.dakror.arise.layer.CityLayer;
import de.dakror.arise.layer.WorldHUDLayer;
import de.dakror.arise.net.packet.Packet04City;
import de.dakror.arise.net.packet.Packet05Resources;
import de.dakror.arise.net.packet.Packet06Building;
import de.dakror.arise.net.packet.Packet10Attribute;
import de.dakror.arise.net.packet.Packet10Attribute.Key;
import de.dakror.arise.settings.Const;
import de.dakror.arise.util.Assistant;
import de.dakror.gamesetup.ui.ClickEvent;
import de.dakror.gamesetup.ui.ClickableComponent;
import de.dakror.gamesetup.util.Helper;
/**
* @author Dakror
*/
public class City extends ClickableComponent {
public static int SIZE = 96;
public static int[][] levels = { { 320, 352, 32, 32 }, { 352, 352, 32, 32 }, { 448, 320, 32, 32 }, { 256, 352, 32, 32 }, { 320, 416, 32, 32 }, { 448, 192, 64, 64 },
{ 256, 192, 64, 64 } };
String name;
String username;
int id;
int level;
int userId;
int takeoverStage;
int timeleft;
public Packet05Resources resourcePacket;
public City(int x, int y, Packet04City data) {
super(x, y, SIZE, SIZE);
name = data.getCityName();
username = data.getUsername();
userId = data.getUserId();
id = data.getCityId();
level = data.getLevel();
addClickEvent(new ClickEvent() {
@Override
public void trigger() {
WorldHUDLayer.selectedCity = City.this;
}
});
}
@Override
public void draw(Graphics2D g) {
try {
if (state != 0 || (WorldHUDLayer.selectedCity != null && WorldHUDLayer.selectedCity.equals(this))) {
Color c = g.getColor();
g.setColor(Color.black);
g.drawRect(x, y, width, height);
g.setColor(c);
}
Helper.setRenderingHints(g, false);
Helper.drawImage2(Game.getImage("world/TileB.png"), x + 16, y + 16, 64, 64, levels[level][0], levels[level][1], levels[level][2], levels[level][3], g);
Helper.setRenderingHints(g, true);
int y1 = y + height - 15;
y1 = y1 < Game.world.getHeight() ? y1 : Game.world.getHeight() - 25;
Color c = g.getColor();
g.setColor(userId == Game.userID ? Color.decode("#007eff") : Color.white);
Helper.drawHorizontallyCenteredString(name, x, width, y1, g, 20);
Helper.drawHorizontallyCenteredString(username, x, width, y1 + 15, g, 17);
g.setColor(c);
if (timeleft > 0 || takeoverStage > 0) {
int[] i = Helper.drawHorizontallyCenteredString(Assistant.formatSeconds(timeleft), x, width, y + 30, g, 26);
int s = 32;
Helper.setRenderingHints(g, false);
Helper.drawImage2(Game.getImage("system/icons.png"), i[0] - s, y, s, s, 0, 48, 24, 24, g);
int height = (int) ((takeoverStage / (float) Const.CITY_TAKEOVERS) * s);
int sh = (int) ((takeoverStage / (float) Const.CITY_TAKEOVERS) * 24);
Helper.drawImage2(Game.getImage("system/icons.png"), i[0] - s, y + (s - height), s, height, 24, 48 + (24 - sh), 24, sh, g);
Helper.setRenderingHints(g, true);
}
} catch (NullPointerException e) {}
}
@Override
public void update(int tick) {
if (Game.currentGame.alpha == 1 && resourcePacket != null) {
CityLayer cl = new CityLayer(City.this);
CityHUDLayer.cl = cl;
Game.currentGame.addLayer(cl);
Game.currentGame.addLayer(new CityHUDLayer());
Game.currentGame.fadeTo(0, 0.05f);
Game.world.gotoCity = null;
resourcePacket = null;
try {
Game.client.sendPacket(new Packet06Building(id));
} catch (IOException e) {
e.printStackTrace();
}
}
if (timeleft > 0 && tick % Game.currentGame.getUPS() == 0) timeleft--;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public String getUsername() {
return username;
}
public int getId() {
return id;
}
public int getUserId() {
return userId;
}
public void setUser(int userId, String username) {
this.userId = userId;
this.username = username;
}
public boolean isInTakeoverCooldown() {
return timeleft > 0;
}
public void updateTakeoverStage(int takeoverStage, int timeleft) {
this.takeoverStage = takeoverStage;
this.timeleft = timeleft;
}
@Override
public void mousePressed(MouseEvent e) {
super.mousePressed(e);
if (state == 1 && e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1 && userId == Game.userID) {
Game.world.gotoCity = this;
try {
Game.client.sendPacket(new Packet05Resources(id));
Game.client.sendPacket(new Packet10Attribute(Key.city, id));
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}