import java.awt.*;
import java.util.*;
import java.Math.*;

public class Welt extends Frame implements Runnable
{
static Thread th;

Vector Select = new Vector();
Point SelectPoint[];
boolean bSelectKlicked = false;

Image BackgroundImage;
boolean bPause = false;
boolean bWindrose = false;
boolean bZeit = false;
boolean bKarte = false;
boolean bGitter = true;
boolean bObere_Infozeile = true;
boolean bUntere_Infozeile = true;
boolean bFocusOnSelect = false;
boolean bWeltall = true;
boolean bControl = false;

int nDay = 1;
int nBeat = 0;
int nBeat_Day = 1000;
/*
int nPauseCounter = 0;
int nPauseCounterRichtung = 0;
int nPauseCounterAlt = 1;
*/

String Text = "Welt";
int SCHRIFTGROESSE_BEI_ZOOM_100 = 0;
int SPURENLAENGE = 10;
int RASTER_SIZE = 10;
// boolean bSpurenzeichnen = true;
// double Wert_x[][];
// double Wert_y[][];

// double dUserView = 0;
double dAngle = 10;
double GRAD_PI = 180 * Math.PI;
Image scr = null;
Image scr2 = null;
int nOrigin_x = 0;
int nOrigin_y = 0;
int nUser_x = 0;
int nUser_y = 0;
int nZoom = 100;
Font Fon;
Choice Choi = new Choice();
// Checkbox Checkbo = new Checkbox("Spuren");
TextField TextFi = new TextField(10);
Checkbox Checkbo2 = new Checkbox("Windrose");
Checkbox Checkbo3 = new Checkbox("Zeit");
Checkbox Checkbo4 = new Checkbox("Karte");
Checkbox Checkbo5 = new Checkbox("Gitter");
Checkbox Checkbo6 = new Checkbox("Focus Select");
Checkbox Checkbo7 = new Checkbox("Weltall");
TextField Message = new TextField("A new ship has reached the system (1:245)", 30);
TextArea TextAre = new TextArea("", 20, 15, TextArea.SCROLLBARS_NONE);
Button Butt = new Button("Ende");
Button Butt2 = new Button("GeheZentrum");
Button Butt3 = new Button("Map");
Button Butt4 = new Button("DefaultView");
Button Butt5 = new Button("+");
Button Butt6 = new Button("-");
Button Butt7 = new Button("Hyperspace");
Button Butt8 = new Button("Damage");
Button Butt9 = new Button("Enter Planet");

Panel PANEL_oben = new Panel(new FlowLayout(FlowLayout.LEFT));
Panel PANEL_unten = new Panel(new FlowLayout(FlowLayout.LEFT));
Panel PANEL_links = new Panel(new GridLayout(1, 1));
Panel PANEL_rechts = new Panel(new GridLayout(2, 1));
Panel PANEL_rechts_unten = new Panel(new GridLayout(10, 1));

Ship Shi[];
Planet Pla[];
Mine Min[];

PopupMenu PopupMe = new PopupMenu();

MenuBar mainMenuBar;
Menu menu1;
CheckboxMenuItem pause;
MenuItem neu;
MenuItem laden;
MenuItem speichern;
MenuItem beenden;
Menu menu2;
Menu innenpolitik;
MenuItem steuern;
MenuItem gesetze;
Menu aussenpolitik;
Menu vertraege;
MenuItem freundschaftsvertrag;
MenuItem friedensvertrag;
MenuItem handelsvertrag;
MenuItem kriegserklaerung;
MenuItem militaerbuendnis;
MenuItem nichtangriffspakt;
MenuItem vereinigunsvertrag;
MenuItem unabhaengigkeitsvertrag;
MenuItem waffenstillstand;
MenuItem wirtschaftsvertrag;
MenuItem wissenschaftsvertrag;
Menu menu3;
MenuItem boerse;
MenuItem weltatlas;
Menu menu4;
CheckboxMenuItem oben;
CheckboxMenuItem unten;
Menu menu99;
MenuItem java_proberties;

public Welt()
{

//{{INIT_CONTROLS
// setLayout(null);
setVisible(false);
// setSize(insets().left + insets().right + 271,insets().top + insets().bottom + 173);
// openFileDialog1 = new java.awt.FileDialog(this);
// openFileDialog1.setMode(FileDialog.LOAD);
// openFileDialog1.setTitle("Open");
//$$ openFileDialog1.move(40,277);
Global.nTest = 20;
setTitle(" Welt - eine neue Zeit ");
//}}

//{{INIT_MENUS
/*
mainMenuBar = new java.awt.MenuBar();
menu1 = new java.awt.Menu("File");
miNew = new java.awt.MenuItem("New");
menu1.add(miNew);
miOpen = new java.awt.MenuItem("Open...");
menu1.add(miOpen);
miSave = new java.awt.MenuItem("Save");
menu1.add(miSave);
miSaveAs = new java.awt.MenuItem("Save As...");
menu1.add(miSaveAs);
menu1.addSeparator();
miExit = new java.awt.MenuItem("Exit");
menu1.add(miExit);
mainMenuBar.add(menu1);
menu2 = new java.awt.Menu("Edit");
miCut = new java.awt.MenuItem("Cut");
menu2.add(miCut);
miCopy = new java.awt.MenuItem("Copy");
menu2.add(miCopy);
miPaste = new java.awt.MenuItem("Paste");
menu2.add(miPaste);
mainMenuBar.add(menu2);
menu3 = new java.awt.Menu("Help");
mainMenuBar.setHelpMenu(menu3);
miAbout = new java.awt.MenuItem("About..");
menu3.add(miAbout);
mainMenuBar.add(menu3);
setMenuBar(mainMenuBar);
*/

//$$ mainMenuBar.move(4,277);
//}}

//{{REGISTER_LISTENERS
SymWindow aSymWindow = new SymWindow();
this.addWindowListener(aSymWindow);

SymAction lSymAction = new SymAction();
SymItem lSymItem = new SymItem();
SymKey lSymKey = new SymKey();
SymMouse lSymMouse = new SymMouse();
SymMouseMotion lSymMouseMotion = new SymMouseMotion();

//
mainMenuBar = new MenuBar();

menu1 = new Menu("Spiel");
mainMenuBar.add(menu1);

neu = new MenuItem("Neu", new MenuShortcut('N'));
neu .addActionListener(lSymAction);
menu1.add(neu);

laden = new MenuItem("Laden", new MenuShortcut('L'));
laden .addActionListener(lSymAction);
menu1.add(laden);

speichern = new MenuItem("Speichern", new MenuShortcut('S'));
speichern .addActionListener(lSymAction);
menu1.add(speichern);

menu1.addSeparator();

pause = new CheckboxMenuItem("Pause");
pause .addItemListener(lSymItem);
menu1.add(pause);

menu1.addSeparator();

beenden = new MenuItem("Beenden", new MenuShortcut('B'));
beenden .addActionListener(lSymAction);
menu1.add(beenden);

menu2 = new Menu("Politik");
mainMenuBar.add(menu2);

innenpolitik = new Menu("Innenpolitik");
menu2.add(innenpolitik);

steuern = new MenuItem("Steuern", new MenuShortcut('N'));
steuern .addActionListener(lSymAction);
innenpolitik.add(steuern);

gesetze = new MenuItem("Gesetze", new MenuShortcut('N'));
gesetze .addActionListener(lSymAction);
innenpolitik.add(gesetze);

aussenpolitik = new Menu("Außenpolitik");
menu2.add(aussenpolitik);

vertraege = new Menu("Verträge");
aussenpolitik.add(vertraege);

freundschaftsvertrag = new MenuItem("Freundschaftsvertrag", new MenuShortcut('N'));
freundschaftsvertrag .addActionListener(lSymAction);
vertraege.add(freundschaftsvertrag);

friedensvertrag = new MenuItem("Friedensvertrag", new MenuShortcut('N'));
friedensvertrag .addActionListener(lSymAction);
vertraege.add(friedensvertrag);

handelsvertrag = new MenuItem("Handelsvertrag", new MenuShortcut('N'));
handelsvertrag .addActionListener(lSymAction);
vertraege.add(handelsvertrag);

kriegserklaerung = new MenuItem("Kriegserklärung", new MenuShortcut('N'));
kriegserklaerung .addActionListener(lSymAction);
vertraege.add(kriegserklaerung);

militaerbuendnis = new MenuItem("Militärbündnis", new MenuShortcut('N'));
militaerbuendnis .addActionListener(lSymAction);
vertraege.add(militaerbuendnis);

nichtangriffspakt = new MenuItem("Nichtangriffspakt", new MenuShortcut('N'));
nichtangriffspakt .addActionListener(lSymAction);
vertraege.add(nichtangriffspakt);

vereinigunsvertrag = new MenuItem("Vereinigunsvertrag", new MenuShortcut('N'));
vereinigunsvertrag .addActionListener(lSymAction);
vertraege.add(vereinigunsvertrag);

unabhaengigkeitsvertrag = new MenuItem("Unabhängigkeitsvertrag", new MenuShortcut('N'));
unabhaengigkeitsvertrag .addActionListener(lSymAction);
vertraege.add(unabhaengigkeitsvertrag);

waffenstillstand = new MenuItem("Waffenstillstand", new MenuShortcut('N'));
waffenstillstand .addActionListener(lSymAction);
vertraege.add(waffenstillstand);

wirtschaftsvertrag = new MenuItem("Wirtschaftsvertrag", new MenuShortcut('N'));
wirtschaftsvertrag .addActionListener(lSymAction);
vertraege.add(wirtschaftsvertrag);

wissenschaftsvertrag = new MenuItem("Wissenschaftsvertrag", new MenuShortcut('N'));
wissenschaftsvertrag .addActionListener(lSymAction);
vertraege.add(wissenschaftsvertrag);

menu3 = new Menu("Sonstiges");
mainMenuBar.add(menu3);

boerse = new MenuItem("Börse", new MenuShortcut('N'));
boerse .addActionListener(lSymAction);
menu3.add(boerse);

weltatlas = new MenuItem("Weltatlas", new MenuShortcut('N'));
weltatlas .addActionListener(lSymAction);
menu3.add(weltatlas);

menu4 = new Menu("Fenster");
mainMenuBar.add(menu4);

oben = new CheckboxMenuItem("Obere Schaltleiste");
oben .addItemListener(lSymItem);
menu4.add(oben);
oben.setState(bObere_Infozeile);

unten = new CheckboxMenuItem("Untere Schaltleiste");
unten .addItemListener(lSymItem);
menu4.add(unten);
unten.setState(bUntere_Infozeile);

menu99 = new Menu("Hilfe");
mainMenuBar.add(menu99);

java_proberties = new MenuItem("Java Umgebung", new MenuShortcut('N'));
java_proberties .addActionListener(lSymAction);
menu99.add(java_proberties);

setMenuBar(mainMenuBar);

// PopupMe.add(oben);
// oben .addItemListener(lSymItem);
PopupMe.addSeparator();
// PopupMe.add(unten);
this. add(PopupMe);

//

Butt .addActionListener(lSymAction);
Butt2 .addActionListener(lSymAction);
Butt3 .addActionListener(lSymAction);
Butt4 .addActionListener(lSymAction);
Butt5 .addActionListener(lSymAction);
Butt6 .addActionListener(lSymAction);
Butt7 .addActionListener(lSymAction);
Butt8 .addActionListener(lSymAction);
Butt9 .addActionListener(lSymAction);

//miAbout .addActionListener(lSymAction);
//miExit .addActionListener(lSymAction);
Choi .addItemListener(lSymItem);
//Checkbo .addItemListener(lSymItem);
Checkbo2.addItemListener(lSymItem);
Checkbo3.addItemListener(lSymItem);
Checkbo4.addItemListener(lSymItem);
Checkbo5.addItemListener(lSymItem);
Checkbo6.addItemListener(lSymItem);
Checkbo7.addItemListener(lSymItem);

this .addKeyListener(lSymKey);
Choi .addKeyListener(lSymKey);
//Checkbo .addKeyListener(lSymKey);
Checkbo2.addKeyListener(lSymKey);
Checkbo3.addKeyListener(lSymKey);
Checkbo4.addKeyListener(lSymKey);
Checkbo5.addKeyListener(lSymKey);
Checkbo6.addKeyListener(lSymKey);
Checkbo7.addKeyListener(lSymKey);
TextFi .addKeyListener(lSymKey);
Message .addKeyListener(lSymKey);
TextAre .addKeyListener(lSymKey);
Butt .addKeyListener(lSymKey);
Butt2 .addKeyListener(lSymKey);
Butt3 .addKeyListener(lSymKey);
Butt4 .addKeyListener(lSymKey);
Butt5 .addKeyListener(lSymKey);
Butt6 .addKeyListener(lSymKey);
Butt7 .addKeyListener(lSymKey);
Butt8 .addKeyListener(lSymKey);
Butt9 .addKeyListener(lSymKey);

this .addMouseListener(lSymMouse);
this .addMouseMotionListener(lSymMouseMotion);

//}}

//Checkbo.setState(bSpurenzeichnen);
Checkbo2.setState(bWindrose);
Checkbo3.setState(bZeit);
Checkbo4.setState(bKarte);
Checkbo5.setState(bGitter);
Checkbo6.setState(bFocusOnSelect);
Checkbo7.setState(bWeltall);
pause.setState(bPause);
speichern.setEnabled(false);

TextAre.setEditable(false);
TextFi.setEditable(false);
Message.setEditable(false);

SCHRIFTGROESSE_BEI_ZOOM_100 = 12;

this.setBackground(Color.lightGray);
{
int nBreite = getToolkit().getScreenSize().width;
int nHoehe = getToolkit().getScreenSize().height;

this.setSize(nBreite, nHoehe);
nOrigin_x = nBreite / 2;
nOrigin_y = nHoehe / 2;
}
this.setIconImage(getToolkit().getImage("welt.gif"));

this.setLayout(new BorderLayout());

Choi.addItem("012 %");
Choi.addItem("025 %");
Choi.addItem("050 %");
Choi.addItem("075 %");
Choi.addItem("100 %");
Choi.addItem("200 %");
Choi.addItem("400 %");
Choi.addItem("600 %");
Choi.select(4);

PANEL_oben.add(Butt);
PANEL_oben.add(TextFi);
PANEL_oben.add(Choi);
PANEL_oben.add(Butt5);
PANEL_oben.add(Butt6);
PANEL_oben.add(Butt2);
PANEL_oben.add(Butt3);
PANEL_oben.add(Butt4);

PANEL_unten.add(Message);
//PANEL_unten.add(Checkbo);
PANEL_unten.add(Checkbo2);
PANEL_unten.add(Checkbo3);
PANEL_unten.add(Checkbo4);
PANEL_unten.add(Checkbo5);
PANEL_unten.add(Checkbo6);
PANEL_unten.add(Checkbo7);

// PANEL_links.add(Butt);

PANEL_rechts.add(TextAre);
PANEL_rechts.add(PANEL_rechts_unten);
PANEL_rechts_unten.add(Butt7);
PANEL_rechts_unten.add(Butt8);
PANEL_rechts_unten.add(Butt9);
/*
PANEL_rechts.add(Butt7);
PANEL_rechts.add(Butt8);
PANEL_rechts.add(Butt9);
*/

if(bObere_Infozeile == true){
this.add("North", PANEL_oben);
}

if(bUntere_Infozeile == true){
this.add("South", PANEL_unten);
}

this.add("East", PANEL_rechts);

// this.add("West", PANEL_links);

// this.add("Center", PANEL_rechts);

// this.setCursor(Cursor.CROSSHAIR_CURSOR);
Schriftgroesse_setzen();
/*
int nWert = 0;
Wert_x = new double[SPURENLAENGE][Text.length()];
Wert_y = new double[SPURENLAENGE][Text.length()];
for(int i2=0; i2<SPURENLAENGE;i2++){
for(int i=0; i<Text.length();i++){

char c[] = new char[1];
c[0] = Text.charAt(i);
Wert_x[i2][i] = 100 + i * 12;
// nWert += (this.getFontMetrics(Fon).stringWidth(new String(c)));
// Wert_x[i2][i] = 10 + nWert + i * 2;
Wert_y[i2][i] = 10;
}
}
*/
Shi = new Ship[10];
for(int i=0; i<10;i++){
Shi[i] = new Ship("St. Clara [" + i + "]", new Point((i + 1) * 34, (i + 1) * 44), 2, "X");
Shi[i].setZiel(new Point((i + 1) * 340, (i + 1) * 440));
switch(i){
case 0:
// Shi[i].bBlinken = true;
// Shi[i].nBlinkIntensity = Shi[i].BLINK_INTENSITY_FAST;
break;
}
}

Pla = new Planet[10];
for(int i=0; i<10;i++){
Pla[i] = new Planet("Erde [" + i + "]", new Point((i + 3) * 50, (i + 3) * 50), 5 - i / 5, 2 + i * 2);
// Pla[i] = new Planet("Erde [" + i + "]", new Point((i + 3) * 50, (i + 3) * 50), 0, 15 + i * 2);
}

Min = new Mine[10];
for(int i=0; i<10;i++){
Min[i] = new Mine("Death Point [" + i + "]", new Point((i + 1) * 134, (i + 1) * 244), 0, "#");
Min[i].setZiel(new Point((i + 1) * 340, (i + 1) * 440));
}


berech();

}

public Welt(String title)
{
this();
setTitle(title);
}

public synchronized void show()
{
move(0, 0);
super.show();
}

public void Schriftgroesse_setzen()
{
{
double x;
Integer Integ;
String Stri;

Stri = Choi.getSelectedItem();
Stri = Stri.substring(0, 3);
Integ = new Integer(Stri);
nZoom = Integ.intValue();
x = (SCHRIFTGROESSE_BEI_ZOOM_100 * ((double) nZoom / 100));
Fon = (new Font("Helvetica", Font.PLAIN, (int) Math.round(x)));
}
}

public void berech()
{
if(bPause == false){
/*
for(int i2=SPURENLAENGE - 1; i2>0;i2--){
for(int i=0; i<Text.length();i++){
Wert_x[i2][i] = Wert_x[i2 - 1][i];
Wert_y[i2][i] = Wert_y[i2 - 1][i];
}
}
for(int i=0; i<Text.length();i++){
double dx = Math.cos(dAngle / GRAD_PI) * Wert_x[0][i] - Math.sin(dAngle / GRAD_PI) * Wert_y[0][i];
double dy = Math.sin(dAngle / GRAD_PI) * Wert_x[0][i] + Math.cos(dAngle / GRAD_PI) * Wert_y[0][i];
Wert_x[0][i] = dx;
Wert_y[0][i] = dy;
}
*/
for(int i=0; i<10;i++){
Shi[i].doBefehl();
Pla[i].doBefehl();
Min[i].doBefehl();
}
}
}

public void run()
{
while(true){
berech();
repaint();
// System.out.println("running");
try {
th.sleep(100);
} catch (InterruptedException e){
System.out.println(e);
}
}
}

public void update(Graphics g)
{
paint(g);
}

public void paint(Graphics g)
{
// Hintergrund-Bild
if(BackgroundImage == null){

Image Imag = getToolkit().getImage("BackgroundImage.gif");
BackgroundImage = createImage(nOrigin_x * 2, nOrigin_y * 2);

MediaTracker Media = new MediaTracker(this);
Media.addImage(Imag, 0);
try {
Media.waitForID(0);
} catch (InterruptedException e) {
}
Graphics g2 = BackgroundImage.getGraphics();
g2.drawImage(Imag, 0, 0, nOrigin_x * 2, nOrigin_y * 2, null);
}
if(scr == null){
scr = createImage(nOrigin_x * 2, nOrigin_y * 2);
}
Graphics g2 = scr.getGraphics();
char[] c;
int nAdd_x = 0;
int nAdd_y = 0;

if(bFocusOnSelect == true){
if(Select.isEmpty() == false){
for(int i = 0; i < Select.size(); i++){
if(Select.elementAt(i) instanceof Ship){
if(Shi[i].bInHyperspace == false){
Ship Sh;

Sh = (Ship) Select.elementAt(i);
nAdd_x = -Sh.getPosition().x;
nAdd_y = -Sh.getPosition().y;

nUser_x = nAdd_x; // Positionscursor auf FocusShip
nUser_y = nAdd_y; // Positionscursor auf FocusShip
} else {
nAdd_x = nUser_x;
nAdd_y = nUser_y;
bFocusOnSelect = false;
Checkbo6.setState(bFocusOnSelect);
}
} else if(Select.elementAt(i) instanceof Planet){
Planet Pl;
Pl = (Planet) Select.elementAt(i);
nAdd_x = -Pl.getPosition().x;
nAdd_y = -Pl.getPosition().y;
} else if(Select.elementAt(i) instanceof Mine){
Mine Mi;
Mi = (Mine) Select.elementAt(i);
nAdd_x = -Mi.getPosition().x;
nAdd_y = -Mi.getPosition().y;
}
}
}
} else if(bFocusOnSelect == false){
nAdd_x = nUser_x;
nAdd_y = nUser_y;
}
g2.setFont(Fon);
g2.setColor(Color.black);
g2.fillRect(0, 0, nOrigin_x * 2, nOrigin_y * 2);

if(BackgroundImage != null){
if(bWeltall == true){
g2.drawImage(BackgroundImage, 0, 0, nOrigin_x * 2, nOrigin_y * 2, null);
}
}

// Koordinaten-Netz
if(bGitter == true){
int nSize = SCHRIFTGROESSE_BEI_ZOOM_100 * 10;
int nSize2;
double x;
double x2;
double y;
double y2;

g2.setColor(new Color(0x00, 0x00, 80));

nSize2 = (RASTER_SIZE) * nOrigin_x / (int) (nSize);
for(int i=0; i<nSize2 + 1;i++){
x = (i - nSize2 / 2) * nSize + nAdd_x;
x = x * ((double) nZoom / 100) + nOrigin_x;
y = (0 - nSize2 / 2) * nSize + nAdd_y;
y = y * ((double) nZoom / 100) + nOrigin_y;
y2 = (nSize2 - nSize2 / 2) * nSize + nAdd_y;
y2 = y2 * ((double) nZoom / 100) + nOrigin_y;
g2.drawLine((int) Math.round(x), (int) Math.round(y), (int) Math.round(x), (int) Math.round(y2));
}

nSize2 = (3 + RASTER_SIZE) * nOrigin_y / (int) (nSize);
for(int i=-1; i<nSize2 + 1;i++){
y = (i - nSize2 / 2) * nSize + nAdd_y;
y = y * ((double) nZoom / 100) + nOrigin_y;
x = (-1 - nSize2 / 2) * nSize + nAdd_x;
x = x * ((double) nZoom / 100) + nOrigin_x;
x2 = (nSize2 - nSize2 / 2) * nSize + nAdd_x;
x2 = x2 * ((double) nZoom / 100) + nOrigin_x;
g2.drawLine((int) Math.round(x), (int) Math.round(y), (int) Math.round(x2), (int) Math.round(y));
}
/*
nSize2 = 4 * nOrigin_y / (int) (nSize * ((double) nZoom / 100));
for(int i=0; i<nSize2;i++){
y = (i - nSize2 / 2) * nSize + nAdd_y;
y = y * ((double) nZoom / 100) + nOrigin_y;
g2.drawLine(0, (int) Math.round(y), nOrigin_x * 2, (int) Math.round(y));
}
*/
// Koordinaten-Mittelpunkt
nSize = (int) (nSize * ((double) nZoom / 100));
g2.setColor(Color.lightGray);
x = nAdd_x;
y = nAdd_y;
x = x * ((double) nZoom / 100) + nOrigin_x;
y = y * ((double) nZoom / 100) + nOrigin_y;

g2.drawLine((int) Math.round(x), (int) Math.round(y), (int) Math.round(x), (int) Math.round(y) - nSize / 2);
g2.drawLine((int) Math.round(x), (int) Math.round(y), (int) Math.round(x), (int) Math.round(y) + nSize / 2);
g2.drawLine((int) Math.round(x), (int) Math.round(y), (int) Math.round(x) - nSize / 2, (int) Math.round(y));
g2.drawLine((int) Math.round(x), (int) Math.round(y), (int) Math.round(x) + nSize / 2, (int) Math.round(y));
}

// aktueller View
{
int nSize = SCHRIFTGROESSE_BEI_ZOOM_100 * 10;
double x;
double y;

nSize = (int) (nSize * ((double) nZoom / 100));
g2.setColor(Color.orange);
x = nOrigin_x;
y = nOrigin_y;
g2.drawLine((int) Math.round(x), (int) Math.round(y), (int) Math.round(x), (int) Math.round(y) - nSize / 2);
g2.drawLine((int) Math.round(x), (int) Math.round(y), (int) Math.round(x), (int) Math.round(y) + nSize / 2);
g2.drawLine((int) Math.round(x), (int) Math.round(y), (int) Math.round(x) - nSize / 2, (int) Math.round(y));
g2.drawLine((int) Math.round(x), (int) Math.round(y), (int) Math.round(x) + nSize / 2, (int) Math.round(y));

}

// Sonne zeichnen
{
double x;
double y;
int nSize = SCHRIFTGROESSE_BEI_ZOOM_100 * 10;

g2.setColor(Color.yellow);
x = -nSize / 2 + nAdd_x;
y = -nSize / 2 + nAdd_y;
nSize = (int) (nSize * ((double) nZoom / 100));
x = x * ((double) nZoom / 100) + nOrigin_x;
y = y * ((double) nZoom / 100) + nOrigin_y;
g2.fillArc((int) Math.round(x), (int) Math.round(y), nSize, nSize, 0, 360);
}

// Planeten zeichnen
for(int i=0; i<10;i++){
double x;
double y;
int nSize = Pla[i].getSize();

nSize = (int) (nSize * ((double) nZoom / 100));
g2.setColor(Color.blue);
x = Pla[i].getPosition().x + nAdd_x - (nSize / 2);
y = Pla[i].getPosition().y + nAdd_y - (nSize / 2);
x = x * ((double) nZoom / 100) + nOrigin_x;
y = y * ((double) nZoom / 100) + nOrigin_y;
//if(i == 9){
// g2.drawArc((nOrigin_x + nAdd_x) - (int) Math.round(x) / 2, (nOrigin_y + nAdd_y) - (int) Math.round(y) / 2, (int) Math.round(x), (int) Math.round(x), 0, 360);
//}
g2.fillArc((int) Math.round(x), (int) Math.round(y), nSize, nSize, 0, 360);
if(Select.isEmpty() == false){
// nSize = (int) (nSize * ((double) nZoom / 100));
g2.setColor(Color.white);
for(int i2 = 0; i2 < Select.size(); i2++){
Planet Pl;

if(Select.elementAt(i2) instanceof Planet){
Pl = (Planet) Select.elementAt(i2);
if(Pl == Pla[i]){
g2.drawArc((int) Math.round(x), (int) Math.round(y), nSize + 1, nSize + 1, 0, 360);

}
}
}
}
g2.setColor(Color.blue);
g2.drawString(Pla[i].getName(), (int) Math.round(x), (int) Math.round(y) - 1);
}
/*
// Spuren zeichnen
{
double x;
double y;

if(bSpurenzeichnen == true){
for(int i=0; i<Text.length();i++){
for(int i2=1; i2<SPURENLAENGE;i2++){
g2.setColor(new Color((SPURENLAENGE - i2) * (0xFF / SPURENLAENGE), (SPURENLAENGE - i2) * (0xFF / SPURENLAENGE), 0xFF));
x = Wert_x[i2][i] + nAdd_x;
y = Wert_y[i2][i] + nAdd_y;
// User-View berücksichtigen
// x = Math.cos(dUserView / GRAD_PI) * x - Math.sin(dUserView / GRAD_PI) * y;
// y = Math.sin(dUserView / GRAD_PI) * x + Math.cos(dUserView / GRAD_PI) * y;
x = (x * ((double) nZoom / 100) + nOrigin_x);
y = (y * ((double) nZoom / 100) + nOrigin_y);
g2.drawLine((int) Math.round(x), (int) Math.round(y), (int) Math.round(x), (int) Math.round(y));
}
}
}
}
*/
/*
// Text zeichnen
{
double x;
double y;

for(int i=0; i<Text.length();i++){
g2.setColor(Color.orange);
c = new char[1];
c[0] = Text.charAt(i);
x = Wert_x[0][i] + nAdd_x;
y = Wert_y[0][i] + nAdd_y;
// User-View berücksichtigen
// x = Math.cos(dUserView / GRAD_PI) * x - Math.sin(dUserView / GRAD_PI) * y;
// y = Math.sin(dUserView / GRAD_PI) * x + Math.cos(dUserView / GRAD_PI) * y;
x = x * ((double) nZoom / 100) + nOrigin_x;
y = y * ((double) nZoom / 100) + nOrigin_y;
g2.drawString(new String(c), (int) Math.round(x), (int) Math.round(y));
}
}
*/

// Minen zeichnen
for(int i=0; i<10;i++){
if(Min[i].bInHyperspace == false){
int nSize = SCHRIFTGROESSE_BEI_ZOOM_100 * 2;
double x;
double y;
double dBreite;
double dHoehe;

x = Min[i].getPosition().x + nAdd_x;
y = Min[i].getPosition().y + nAdd_y;
x = x * ((double) nZoom / 100) + nOrigin_x;
y = y * ((double) nZoom / 100) + nOrigin_y;
dBreite = (this.getFontMetrics(g2.getFont()).stringWidth(Min[i].getSymbol()));
x = x - dBreite / 2;
dHoehe = (this.getFontMetrics(g2.getFont()).getHeight());
y = y + dHoehe / 4;

if(Select.isEmpty() == false){
nSize = (int) (nSize * ((double) nZoom / 100));
g2.setColor(Color.white);
for(int i2 = 0; i2 < Select.size(); i2++){
Mine Mi;

if(Select.elementAt(i2) instanceof Mine){
Mi = (Mine) Select.elementAt(i2);
if(Mi == Min[i]){
g2.drawArc((int) Math.round(x - dBreite - 2), (int) Math.round(y - dHoehe - 2), nSize, nSize, 0, 360);

}
}
}
}
g2.setColor(Color.green);

g2.drawString(Min[i].getSymbol(), (int) Math.round(x), (int) Math.round(y));

x = Min[i].getPosition().x + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_x;
y = Min[i].getPosition().y + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_y;
x = x * ((double) nZoom / 100) + nOrigin_x;
y = y * ((double) nZoom / 100) + nOrigin_y;

if(Choi.getSelectedIndex() != 1){ // nur != 25 %, Name anzeigen
g2.setColor(Color.green);
g2.drawString(Min[i].getName(), (int) Math.round(x), (int) Math.round(y));
}

if(Choi.getSelectedIndex() > 2){ // nur >= 75 %, Health anzeigen
g2.setColor(Color.green);
g2.setColor(g2.getColor().brighter());

String Stri = new String();
Stri = "";
for(int z = 0; z < Min[i].nHealthy / 10; z++){
Stri += ".";
}

x = Min[i].getPosition().x + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_x;
// y = Min[i].getPosition().y + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_y - SCHRIFTGROESSE_BEI_ZOOM_100 + 2;
y = Min[i].getPosition().y + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_y + 2;
x = x * ((double) nZoom / 100) + nOrigin_x;
y = y * ((double) nZoom / 100) + nOrigin_y;
g2.drawString(Stri, (int) Math.round(x), (int) Math.round(y));
/*
x = Min[i].getPosition().x + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_x + (z * 2);
y = Min[i].getPosition().y + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_y + 4;
x = x * ((double) nZoom / 100) + nOrigin_x;
y = y * ((double) nZoom / 100) + nOrigin_y;
g2.drawString(".", (int) Math.round(x), (int) Math.round(y));
*/
// g2.setColor(g2.getColor().brighter());

// }
}


} else {
// unselectMinp(Shi[i]);
}
}

// Schiffe zeichnen
for(int i=0; i<10;i++){
if(Shi[i].bInHyperspace == false){
int nSize = SCHRIFTGROESSE_BEI_ZOOM_100 * 2;
double x;
double y;
double dBreite;
double dHoehe;

x = Shi[i].getPosition().x + nAdd_x;
y = Shi[i].getPosition().y + nAdd_y;
x = x * ((double) nZoom / 100) + nOrigin_x;
y = y * ((double) nZoom / 100) + nOrigin_y;
dBreite = (this.getFontMetrics(g2.getFont()).stringWidth(Shi[i].getSymbol()));
x = x - dBreite / 2;
dHoehe = (this.getFontMetrics(g2.getFont()).getHeight());
y = y + dHoehe / 4;

if(Select.isEmpty() == false){
nSize = (int) (nSize * ((double) nZoom / 100));
g2.setColor(Color.white);
for(int i2 = 0; i2 < Select.size(); i2++){
Ship Sh;

if(Select.elementAt(i2) instanceof Ship){
Sh = (Ship) Select.elementAt(i2);
if(Sh == Shi[i]){
g2.drawArc((int) Math.round(x - dBreite - 2), (int) Math.round(y - dHoehe - 2), nSize, nSize, 0, 360);

}
}
}
}
g2.setColor(Color.green);

g2.drawString(Shi[i].getSymbol(), (int) Math.round(x), (int) Math.round(y));

x = Shi[i].getPosition().x + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_x;
y = Shi[i].getPosition().y + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_y;
x = x * ((double) nZoom / 100) + nOrigin_x;
y = y * ((double) nZoom / 100) + nOrigin_y;

if(Choi.getSelectedIndex() != 1){ // nur != 25 %, Name anzeigen
boolean bDraw = true;

if(Shi[i].nHealthy<=10){
Shi[i].nBlinkIntensity = Shi[i].BLINK_INTENSITY_FAST;
Shi[i].bBlinken = true;
} else if(Shi[i].nHealthy<=20){
Shi[i].nBlinkIntensity = Shi[i].BLINK_INTENSITY_NORMAL;
Shi[i].bBlinken = true;
} else if(Shi[i].nHealthy<=30){
Shi[i].nBlinkIntensity = Shi[i].BLINK_INTENSITY_SLOW;
Shi[i].bBlinken = true;
} else {
Shi[i].bBlinken = false;
}
if(Shi[i].bBlinken == true){
Shi[i].nBlinkCounter++;
if(Shi[i].nBlinkCounter > Shi[i].nBlinkIntensity){
Shi[i].nBlinkCounter = 0;
bDraw = false;
}
}

if(bDraw == true){
g2.setColor(Color.green);
} else {
g2.setColor(g2.getColor().darker());
}
g2.drawString(Shi[i].getName(), (int) Math.round(x), (int) Math.round(y));
}

if(Choi.getSelectedIndex() > 2){ // nur >= 75 %, Health anzeigen
g2.setColor(Color.green);
g2.setColor(g2.getColor().brighter());

String Stri = new String();
Stri = "";
for(int z = 0; z < Shi[i].nHealthy / 10; z++){
Stri += ".";
}

x = Shi[i].getPosition().x + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_x;
// y = Shi[i].getPosition().y + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_y - SCHRIFTGROESSE_BEI_ZOOM_100 + 2;
y = Shi[i].getPosition().y + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_y + 2;
x = x * ((double) nZoom / 100) + nOrigin_x;
y = y * ((double) nZoom / 100) + nOrigin_y;
g2.drawString(Stri, (int) Math.round(x), (int) Math.round(y));
/*
x = Shi[i].getPosition().x + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_x + (z * 2);
y = Shi[i].getPosition().y + SCHRIFTGROESSE_BEI_ZOOM_100 / 2 + nAdd_y + 4;
x = x * ((double) nZoom / 100) + nOrigin_x;
y = y * ((double) nZoom / 100) + nOrigin_y;
g2.drawString(".", (int) Math.round(x), (int) Math.round(y));
*/
// g2.setColor(g2.getColor().brighter());

// }
}


} else {
unselectShip(Shi[i]);
}
}

// Windrose
{
double x;
double y;
double x2;
double y2;
int poly_x[] = new int [3];
int poly_y[] = new int [3];
int nSize = 10;

if(bWindrose == true){

// Pfeil nach oben
g2.setColor(Color.red);
poly_x[0] = nSize / 2;
poly_y[0] = 0;
poly_x[1] = nSize;
poly_y[1] = nSize;
poly_x[2] = 0;
poly_y[2] = nSize;
x = nOrigin_x - nSize * 2;
y = 80;
for(int i=0; i<3;i++){
poly_x[i] += x;
poly_y[i] += y;
// poly_x[i] = (int) (Math.cos(dUserView / GRAD_PI) * poly_x[i] - Math.sin(dUserView / GRAD_PI) * poly_y[i]);
// poly_y[i] = (int) (Math.sin(dUserView / GRAD_PI) * poly_x[i] + Math.cos(dUserView / GRAD_PI) * poly_y[i]);
}
g2.fillPolygon(poly_x, poly_y, 3);

// Linie
g2.setColor(Color.orange);
x = nOrigin_x - nSize * 2;
y = 80 + nSize + 1;
x2 = nOrigin_x - nSize * 2 + nSize;
y2 = 80 + nSize + 1;
// x = Math.cos(dUserView / GRAD_PI) * x - Math.sin(dUserView / GRAD_PI) * y;
// y = Math.sin(dUserView / GRAD_PI) * x + Math.cos(dUserView / GRAD_PI) * y;
// x2 = Math.cos(dUserView / GRAD_PI) * x2 - Math.sin(dUserView / GRAD_PI) * y2;
// y2 = Math.sin(dUserView / GRAD_PI) * x2 + Math.cos(dUserView / GRAD_PI) * y2;
g2.drawLine((int) Math.round(x), (int) Math.round(y), (int) Math.round(x2), (int) Math.round(y2));

// Pfeil nach unten
g2.setColor(Color.blue);
poly_x[0] = 0;
poly_y[0] = nSize + 3;
poly_x[1] = nSize;
poly_y[1] = nSize + 3;
poly_x[2] = nSize / 2;
poly_y[2] = nSize + nSize + 3;
x = nOrigin_x - nSize * 2;
y = 80;
for(int i=0; i<3;i++){
poly_x[i] += x;
poly_y[i] += y;
// poly_x[i] = (int) (Math.cos(dUserView / GRAD_PI) * poly_x[i] - Math.sin(dUserView / GRAD_PI) * poly_y[i]);
// poly_y[i] = (int) (Math.sin(dUserView / GRAD_PI) * poly_x[i] + Math.cos(dUserView / GRAD_PI) * poly_y[i]);
}
g2.fillPolygon(poly_x, poly_y, 3);

// N und S
g2.setColor(Color.lightGray);
g2.setFont(new Font("Helvetica", Font.PLAIN, SCHRIFTGROESSE_BEI_ZOOM_100 / 2));
// N
x = nOrigin_x - nSize * 2 + nSize / 2;
y = 80;
// x = Math.cos(dUserView / GRAD_PI) * x - Math.sin(dUserView / GRAD_PI) * y;
// y = Math.sin(dUserView / GRAD_PI) * x + Math.cos(dUserView / GRAD_PI) * y;
g2.drawString("N", (int) Math.round(x), (int) Math.round(y));
// S
x = nOrigin_x - nSize * 2 + nSize / 2;
y = 80 + nSize + 8 + nSize;
// x = Math.cos(dUserView / GRAD_PI) * x - Math.sin(dUserView / GRAD_PI) * y;
// y = Math.sin(dUserView / GRAD_PI) * x + Math.cos(dUserView / GRAD_PI) * y;
g2.drawString("S", (int) Math.round(x), (int) Math.round(y));
}
}

// Zeit
{
double x;
double y;
String Stri;
int nSize = 10;

if(bPause == false){
if(nBeat > nBeat_Day){
nBeat = 0;
nDay++;
}
nBeat++;
}
if(bZeit == true){
g2.setColor(Color.red);
g2.setFont(new Font("Helvetica", Font.PLAIN, SCHRIFTGROESSE_BEI_ZOOM_100));
x = nOrigin_x - nSize * 14;
y = 80 + nSize;
Stri = "Tag " + nDay + ", Beats " + nBeat;
g2.drawString(Stri, (int) Math.round(x), (int) Math.round(y));
}
}
/*
// WegErmitteln()
{
int dx1, dy1, xa, ya;
int n, maxn;
int x1, y1, x2, y2;
boolean bWeiter = false;

x1 = 100;
y1 = 100;
x2 = 200;
y2 = 200;

dx1 = x2 - x1;
dy1 = y2 - y1;
maxn = Math.abs(dx1);

if(maxn < Math.abs(dy1)){
maxn = Math.abs(dy1);
}
if(maxn == 0){
maxn = 1;
}
for(n=0;bWeiter == false && n < maxn + 1;n++){
xa = x1 + (dx1 * n) / maxn;
ya = y1 + (dy1 * n) / maxn;

if(xa!=x1 || ya!=y1){
// Position.x = xa;
// Position.y = ya;
bWeiter = true;
}

g2.setColor(Color.orange);
g2.drawRect(xa, ya, 1, 1);

}
} */

// SelectPoint
if(bPause == false){
if(SelectPoint != null){
if(SelectPoint[1].x == 0){
SelectPoint[1].x = SelectPoint[0].x;
}
if(SelectPoint[1].y == 0){
SelectPoint[1].y = SelectPoint[0].y;
}
int nBreite = Math.max(SelectPoint[0].x, SelectPoint[1].x) - Math.min(SelectPoint[0].x, SelectPoint[1].x);
int nHoehe = Math.max(SelectPoint[0].y, SelectPoint[1].y) - Math.min(SelectPoint[0].y, SelectPoint[1].y);

g2.setColor(Color.white);
g2.drawRect(Math.min(SelectPoint[0].x, SelectPoint[1].x), Math.min(SelectPoint[0].y, SelectPoint[1].y), nBreite, nHoehe);
}
}

// Pause
{
double x;
double y;

if(bPause == true){
// g2.setColor(new Color((int) (Math.random() * 0xFF) / 2 * 10, 0x00, 0x00));
// g2.setColor(new Color(nPauseCounter, 0x00, 0x00));
// g2.setColor(new Color(0x00, 0x00, 0x00));
g2.setColor(Color.red);
/*
if(nPauseCounterRichtung == 1){
nPauseCounter -= 10;
} else if(nPauseCounterRichtung == 0){
nPauseCounter += 10;
}

if(nPauseCounterAlt > 0xFF){
nPauseCounterRichtung = 1;
nPauseCounter = 0xFF;
} else if(nPauseCounterAlt < 0x00){
nPauseCounterRichtung = 0;
nPauseCounter = 0x00;
}
nPauseCounterAlt = nPauseCounter;
*/
g2.setFont(new Font("Helvetica", Font.PLAIN, SCHRIFTGROESSE_BEI_ZOOM_100 * 4));
x = nOrigin_x - (this.getFontMetrics(g2.getFont()).stringWidth("Pause")) / 2 - 0;
y = nOrigin_y + (this.getFontMetrics(g2.getFont()).getHeight()) / 4;
g2.drawString("Pause", (int) Math.round(x), (int) Math.round(y));
}
}

// Karte
if(bKarte == true){
int x = 40;
int y = 80;
{
if(scr2 == null){
scr2 = createImage(nOrigin_x * 2, nOrigin_y * 2);
}
Graphics g3 = scr2.getGraphics();
g3.drawImage(scr, 0, 0, null);

g3.drawImage(scr, x, y, x + 50, y + 50, null);
g3.setColor(Color.red);
g3.drawRect(x, y, x + 50, y + 50);
}
g.drawImage(scr2, 0, 0, null);
} else {
g.drawImage(scr, 0, 0, null);
}
TextFi.setText(nAdd_x + "/" + nAdd_y);
if(Select.isEmpty() == false){
for(int i = 0; i < Select.size(); i++){

if(Select.elementAt(i) instanceof Ship){
Ship Sh;

Sh = (Ship) Select.elementAt(i);
TextAre.setText(Sh.getInfo());
} else if(Select.elementAt(i) instanceof Planet){
Planet Pl;

Pl = (Planet) Select.elementAt(i);
TextAre.setText(Pl.getInfo());
} else if(Select.elementAt(i) instanceof Mine){
Mine Mi;

Mi = (Mine) Select.elementAt(i);
TextAre.setText(Mi.getInfo());
}
}
} else {
TextAre.setText("");
}
}
/*
static public void main(String args[])
{
Welt f;
f = new Welt();
f.show();
th = new Thread(f);
th.start();
}
*/
/*
public void addNotify()
{
// Record the size of the window prior to calling parents addNotify.
Dimension d = getSize();

super.addNotify();

if (fComponentsAdjusted)
return;

// Adjust components according to the insets
setSize(insets().left + insets().right + d.width, insets().top + insets().bottom + d.height);
Component components[] = getComponents();
for (int i = 0; i < components.length; i++)
{
Point p = components[i].getLocation();
p.translate(insets().left, insets().top);
components[i].setLocation(p);
}
fComponentsAdjusted = true;
}
*/
// Used for addNotify check.
// boolean fComponentsAdjusted = false;

//{{DECLARE_CONTROLS
//java.awt.FileDialog openFileDialog1;
//}}

//{{DECLARE_MENUS
/*
java.awt.MenuBar mainMenuBar;
java.awt.Menu menu1;
java.awt.MenuItem miNew;
java.awt.MenuItem miOpen;
java.awt.MenuItem miSave;
java.awt.MenuItem miSaveAs;
java.awt.MenuItem miExit;
java.awt.Menu menu2;
java.awt.MenuItem miCut;
java.awt.MenuItem miCopy;
java.awt.MenuItem miPaste;
java.awt.Menu menu3;
java.awt.MenuItem miAbout;
*/
//}}

void unselectShip(Ship Sh)
{
if(Select.isEmpty() == false){
Select.removeElement(Sh);
/*
for(int i = 0; i < Select.size(); i++){
if(Shi[i] == Sh){
Select.removeElementAt(i);
}
}
*/
}
}

void selectAction()
{
double x;
double y;
double x2;
double y2;
boolean bFind = false;
if(scr != null){
Graphics g2 = scr.getGraphics();

if(bPause == false && bControl == false && SelectPoint != null){
if(SelectPoint[1].x == 0){
SelectPoint[1].x = SelectPoint[0].x;
}
if(SelectPoint[1].y == 0){
SelectPoint[1].y = SelectPoint[0].y;
}
int nBreite = Math.max(SelectPoint[0].x, SelectPoint[1].x) - Math.min(SelectPoint[0].x, SelectPoint[1].x);
int nHoehe = Math.max(SelectPoint[0].y, SelectPoint[1].y) - Math.min(SelectPoint[0].y, SelectPoint[1].y);

x = Math.min(SelectPoint[0].x, SelectPoint[1].x) - nOrigin_x - (int) (nUser_x * ((double) nZoom / 100));
y = Math.min(SelectPoint[0].y, SelectPoint[1].y) - nOrigin_y - (int) (nUser_y * ((double) nZoom / 100));
x2 = x + nBreite;
y2 = y + nHoehe;

Select.removeAllElements();

// Ship selektiert?
for(int i = 0; i < 10; i++){

int nTx = (int) (Shi[i].getPosition().x * ((double) nZoom / 100));
int nTy = (int) (Shi[i].getPosition().y * ((double) nZoom / 100));

if((nTx >= x && nTx <= x2)
&& (nTy >= y && nTy <= y2))
{
if(Shi[i].bInHyperspace == false){
bFind = true;
Select.addElement(Shi[i]);
}
}
}

// Planet selektiert?
for(int i = 0; i < 10; i++){

int nTx = (int) (Pla[i].getPosition().x * ((double) nZoom / 100));
int nTy = (int) (Pla[i].getPosition().y * ((double) nZoom / 100));

if((nTx >= x && nTx <= x2)
&& (nTy >= y && nTy <= y2))
{
bFind = true;
Select.addElement(Pla[i]);
}
}

// Mine selektiert?
for(int i = 0; i < 10; i++){

int nTx = (int) (Min[i].getPosition().x * ((double) nZoom / 100));
int nTy = (int) (Min[i].getPosition().y * ((double) nZoom / 100));

if((nTx >= x && nTx <= x2)
&& (nTy >= y && nTy <= y2))
{
bFind = true;
Select.addElement(Min[i]);
}
}

SelectPoint = null;
bSelectKlicked = true;
}
}

}

void Welt_WindowClosing(java.awt.event.WindowEvent event)
{
hide(); // hide the Frame
dispose(); // free the system resources
System.exit(0); // close the application
}

class SymWindow extends java.awt.event.WindowAdapter
{
public void windowClosing(java.awt.event.WindowEvent event)
{
Object object = event.getSource();
if (object == Welt.this){
Welt_WindowClosing(event);
}
}
}

class SymAction implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent event)
{
Object object = event.getSource();
if (object == boerse){
bPause = true;
(new Boerse(Welt.this, true)).show();
bPause = false;
} else if (object == weltatlas){
bPause = true;
(new Weltatlas(Welt.this, true)).show();
bPause = false;
} else if (object == java_proberties){
bPause = true;
(new JavaProperties(Welt.this, true)).show();
bPause = false;
} else if (object == beenden){
Welt_WindowClosing(null);
} else if (object == Butt){
Welt_WindowClosing(null);
} else if (object == Butt2){
if(bFocusOnSelect == true){
/*
int x = 0;
int y = 0;
if(Select.isEmpty() == false){
for(int i = 0; i < Select.size(); i++){
Ship Sh;

Sh = (Ship) Select.elementAt(i);
Sh.setZiel(new Point((int) Math.round(x), (int) Math.round(y)));
}
}
*/
bFocusOnSelect = false;
Checkbo6.setState(bFocusOnSelect);
nUser_x = 0;
nUser_y = 0;
} else if(bFocusOnSelect == false){
nUser_x = 0;
nUser_y = 0;
}

} else if (object == Butt3){
Choi.select(1);
Schriftgroesse_setzen();
} else if (object == Butt4){
Choi.select(4);
Schriftgroesse_setzen();
} else if (object == Butt5){
int nMax = Choi.getItemCount();
int nNeu = Choi.getSelectedIndex() + 1;
if(nNeu<=nMax){
Choi.select(nNeu);
Schriftgroesse_setzen();
}
} else if (object == Butt6){
int nNeu = Choi.getSelectedIndex() - 1;
if(nNeu>=0){
Choi.select(nNeu);
Schriftgroesse_setzen();
}
} else if (object == Butt7){
if(Select.isEmpty() == false){
for(int i = 0; i < Select.size(); i++){
if(Select.elementAt(i) instanceof Ship){
Ship Sh;

Sh = (Ship) Select.elementAt(i);
Sh.jumpToHyperspace(new Point((int) (Math.random() * 10000), (int) (Math.random() * 10000)));
}
}
}
} else if (object == Butt8){
if(Select.isEmpty() == false){
for(int i = 0; i < Select.size(); i++){
if(Select.elementAt(i) instanceof Ship){
Ship Sh;

Sh = (Ship) Select.elementAt(i);
Sh.nHealthy -= 10;
if(Sh.nHealthy <= 0){
Sh.nHealthy = 100;
}
}
}
}
} else if (object == Butt9){
}
/*
if (object == miOpen)
miOpen_Action(event);
else if (object == miAbout)
miAbout_Action(event);
else if (object == miExit)
miExit_Action(event);
*/
}
}

class SymItem implements java.awt.event.ItemListener
{
public void itemStateChanged(java.awt.event.ItemEvent event)
{
Object object = event.getSource();
if (object == Choi){
Schriftgroesse_setzen();
// } else if (object == Checkbo){
// bSpurenzeichnen = Checkbo.getState();
} else if (object == Checkbo2){
bWindrose = Checkbo2.getState();
} else if (object == Checkbo3){
bZeit = Checkbo3.getState();
} else if (object == Checkbo4){
bKarte = Checkbo4.getState();
} else if (object == Checkbo5){
bGitter = Checkbo5.getState();
} else if (object == Checkbo6){
bFocusOnSelect = Checkbo6.getState();
} else if (object == Checkbo7){
bWeltall = Checkbo7.getState();
} else if (object == pause){
if(bPause == false){
bPause = true;
} else if(bPause == true){
bPause = false;
}
} else if (object == oben){
if(bObere_Infozeile == false){
bObere_Infozeile = true;
} else if(bObere_Infozeile == true){
bObere_Infozeile = false;
}
if(bObere_Infozeile == true){
add("North", PANEL_oben);
} else if(bObere_Infozeile == false){
remove(PANEL_oben);
}
} else if (object == unten){
if(bUntere_Infozeile == false){
bUntere_Infozeile = true;
} else if(bUntere_Infozeile == true){
bUntere_Infozeile = false;
}
if(bUntere_Infozeile == true){
add("South", PANEL_unten);
} else if(bUntere_Infozeile == false){
remove(PANEL_unten);
}
}
}
}

class SymKey implements java.awt.event.KeyListener
{
public void keyPressed(java.awt.event.KeyEvent event)
{
int nAdd_x = 0;
int nAdd_y = 0;

if (event.getKeyCode() == java.awt.event.KeyEvent.VK_LEFT){
nAdd_x += 10;
}
if (event.getKeyCode() == java.awt.event.KeyEvent.VK_RIGHT){
nAdd_x -= 10;
}
if (event.getKeyCode() == java.awt.event.KeyEvent.VK_UP){
nAdd_y += 10;
}
if (event.getKeyCode() == java.awt.event.KeyEvent.VK_DOWN){
nAdd_y -= 10;
}

if(bFocusOnSelect == false){
nUser_x += nAdd_x;
nUser_y += nAdd_y;
} else if(bFocusOnSelect == true){
if(Select.isEmpty() == false){
for(int i = 0; i < Select.size(); i++){
if(Select.elementAt(i) instanceof Ship){
Ship Sh;

Sh = (Ship) Select.elementAt(i);
int x = Sh.getPosition().x - nAdd_x;
int y = Sh.getPosition().y - nAdd_y;
Sh.setZiel(new Point(x, y));
}
}
}
}

if (event.getKeyCode() == java.awt.event.KeyEvent.VK_CONTROL){
bControl = true;
}

/*
if (event.getKeyCode() == java.awt.event.KeyEvent.VK_PAGE_DOWN){
dUserView -= 45;
if(dUserView < 0.0){
dUserView = 359.0;
}
}
if (event.getKeyCode() == java.awt.event.KeyEvent.VK_PAGE_UP){
dUserView += 45;
if(dUserView > 359.0){
dUserView = 0.0;
}
}
*/
}

public void keyReleased(java.awt.event.KeyEvent event)
{
if (event.getKeyCode() == java.awt.event.KeyEvent.VK_PAUSE){
if(bPause == false){
bPause = true;
} else if(bPause == true){
bPause = false;
}
pause.setState(bPause);
}
if(bControl == true){
bControl = false;
}
}

public void keyTyped(java.awt.event.KeyEvent event)
{
}
}

class SymMouse implements java.awt.event.MouseListener
{
/*
Frame1 Origin;

public SymMouse(Frame1 Origin){
this.Origin = Origin;
}
*/
public void mouseClicked(java.awt.event.MouseEvent event)
{
selectAction();
}

public void mouseEntered(java.awt.event.MouseEvent event)
{
selectAction();
}

public void mouseExited(java.awt.event.MouseEvent event)
{
selectAction();
}

public void mousePressed(java.awt.event.MouseEvent event)
{
selectAction();
}

public void mouseReleased(java.awt.event.MouseEvent event)
{
selectAction();
if(event.isPopupTrigger()){

/*
bPause = true;
PopupMe.show(event.getComponent(), event.getX(), event.getY());
// java.awt.event.ProcessMouseEvent(event);
bPause = false;
*/

double x;
double y;

if(bFocusOnSelect == true){
bFocusOnSelect = false;
Checkbo6.setState(bFocusOnSelect);
}
x = event.getPoint().x - nOrigin_x;
x = x - nUser_x * ((double) nZoom / 100);
y = event.getPoint().y - nOrigin_y;
y = y - nUser_y * ((double) nZoom / 100);
x = x * (1 / ((double) nZoom / 100));
y = y * (1 / ((double) nZoom / 100));
nUser_x = (int) Math.round(-x);
nUser_y = (int) Math.round(-y);
} else if(bPause == false){
double x;
double y;
Graphics g2 = scr.getGraphics();
boolean bFind = false;

x = event.getPoint().x - nOrigin_x;
x = x - nUser_x * ((double) nZoom / 100);
y = event.getPoint().y - nOrigin_y;
y = y - nUser_y * ((double) nZoom / 100);
x = x * (1 / ((double) nZoom / 100));
y = y * (1 / ((double) nZoom / 100));

if(bControl == false){ // nur neue Selektion bestimmen
// Ship selektiert?
for(int i = 0; bFind == false && i < 10; i++){

int x2 = - (Welt.this.getFontMetrics(g2.getFont()).stringWidth(Shi[i].getSymbol())) / 2;
int y2 = (Welt.this.getFontMetrics(g2.getFont()).getHeight()) / 2;
x2 *= 2;
y2 *= 2;

if(Shi[i].getPosition().x > (x + x2) && Shi[i].getPosition().x < (x - x2)
&& Shi[i].getPosition().y > (y - y2) && Shi[i].getPosition().y < (y + y2))
{
if(Shi[i].bInHyperspace == false){
Select.removeAllElements();
bFind = true;
Select.addElement(Shi[i]);
}
}
}

// Planet selektiert?
for(int i = 0; bFind == false && i < 10; i++){

int x2 = (int) (Pla[i].getSize() / 2 * ((double) nZoom / 100));
int y2 = (int) (Pla[i].getSize() / 2 * ((double) nZoom / 100));

//int nTx = (int) (Pla[i].getPosition().x * ((double) nZoom / 100));
//int nTy = (int) (Pla[i].getPosition().y * ((double) nZoom / 100));

int nTx = (int) (Pla[i].getPosition().x * (1 / ((double) nZoom / 100)));
int nTy = (int) (Pla[i].getPosition().y * (1 / ((double) nZoom / 100)));


if((nTx <= (x + x2) && nTx >= (x - x2))
&& (nTy <= (y + y2) && nTy >= (y - y2)))
{

// int nTx = (int) (Pla[i].getPosition().x);
// int nTy = (int) (Pla[i].getPosition().y);

// if(Pla[i].getPosition().x > (x + x2) && Pla[i].getPosition().x < (x - x2)
// && Pla[i].getPosition().y > (y - y2) && Pla[i].getPosition().y < (y + y2))
// {
Select.removeAllElements();
bFind = true;
Select.addElement(Pla[i]);
}
}

// Mine selektiert?
for(int i = 0; bFind == false && i < 10; i++){

int x2 = - (Welt.this.getFontMetrics(g2.getFont()).stringWidth(Min[i].getSymbol())) / 2;
int y2 = (Welt.this.getFontMetrics(g2.getFont()).getHeight()) / 2;
x2 *= 2;
y2 *= 2;

if(Min[i].getPosition().x > (x + x2) && Min[i].getPosition().x < (x - x2)
&& Min[i].getPosition().y > (y - y2) && Min[i].getPosition().y < (y + y2))
{
Select.removeAllElements();
bFind = true;
Select.addElement(Min[i]);
}
}
} else if(Select.isEmpty() == false && bControl == true){ // aktuelle Selektion anwenden, Ziel suchen
Vector ZielSelect = new Vector();

// Ship selektiert?
for(int i = 0; bFind == false && i < 10; i++){

int x2 = - (Welt.this.getFontMetrics(g2.getFont()).stringWidth(Shi[i].getSymbol())) / 2;
int y2 = (Welt.this.getFontMetrics(g2.getFont()).getHeight()) / 2;
x2 *= 2;
y2 *= 2;

if(Shi[i].getPosition().x > (x + x2) && Shi[i].getPosition().x < (x - x2)
&& Shi[i].getPosition().y > (y - y2) && Shi[i].getPosition().y < (y + y2))
{
if(Shi[i].bInHyperspace == false){
ZielSelect.removeAllElements();
bFind = true;
ZielSelect.addElement(Shi[i]);
}
}
}

// Planet selektiert?
for(int i = 0; bFind == false && i < 10; i++){

int x2 = (int) (Pla[i].getSize() / 2 * ((double) nZoom / 100));
int y2 = (int) (Pla[i].getSize() / 2 * ((double) nZoom / 100));

//int nTx = (int) (Pla[i].getPosition().x * ((double) nZoom / 100));
//int nTy = (int) (Pla[i].getPosition().y * ((double) nZoom / 100));

int nTx = (int) (Pla[i].getPosition().x * (1 / ((double) nZoom / 100)));
int nTy = (int) (Pla[i].getPosition().y * (1 / ((double) nZoom / 100)));


if((nTx <= (x + x2) && nTx >= (x - x2))
&& (nTy <= (y + y2) && nTy >= (y - y2)))
{

// int nTx = (int) (Pla[i].getPosition().x);
// int nTy = (int) (Pla[i].getPosition().y);

// if(Pla[i].getPosition().x > (x + x2) && Pla[i].getPosition().x < (x - x2)
// && Pla[i].getPosition().y > (y - y2) && Pla[i].getPosition().y < (y + y2))
// {
ZielSelect.removeAllElements();
bFind = true;
ZielSelect.addElement(Pla[i]);
}
}

// Mine selektiert?
for(int i = 0; bFind == false && i < 10; i++){

int x2 = - (Welt.this.getFontMetrics(g2.getFont()).stringWidth(Min[i].getSymbol())) / 2;
int y2 = (Welt.this.getFontMetrics(g2.getFont()).getHeight()) / 2;
x2 *= 2;
y2 *= 2;

if(Min[i].getPosition().x > (x + x2) && Min[i].getPosition().x < (x - x2)
&& Min[i].getPosition().y > (y - y2) && Min[i].getPosition().y < (y + y2))
{
ZielSelect.removeAllElements();
bFind = true;
ZielSelect.addElement(Min[i]);
}
}
if(ZielSelect.isEmpty() == false){
for(int i = 0; i < ZielSelect.size(); i++){
if(ZielSelect.elementAt(i) instanceof Planet){
Planet Pl;

Pl = (Planet) ZielSelect.elementAt(i);

for(int z = 0; z < Select.size(); z++){
if(Select.elementAt(z) instanceof Ship){
Ship Sh;

Sh = (Ship) Select.elementAt(z);
Sh.setEnterPlanet(Pl);
}
}

}
}
}
}


// Befehl setZiel
if(bControl == false && bFind == false){
if(bSelectKlicked == false){
if(Select.isEmpty() == false){
for(int i = 0; i < Select.size(); i++){
if(Select.elementAt(i) instanceof Ship){
Ship Sh;

Sh = (Ship) Select.elementAt(i);
Sh.setZiel(new Point((int) Math.round(x), (int) Math.round(y)));
} else if(Select.elementAt(i) instanceof Mine){
Mine Mi;

Mi = (Mine) Select.elementAt(i);
Mi.setZiel(new Point((int) Math.round(x), (int) Math.round(y)));
}
}
}
} else if(bSelectKlicked == true){
bSelectKlicked = false;
}
}
}
}
}

class SymMouseMotion implements java.awt.event.MouseMotionListener
{
public void mouseDragged(java.awt.event.MouseEvent event)
{
double x;
double y;

if(bPause == false){
x = event.getPoint().x;
// x = x * ((double) nZoom / 100);
y = event.getPoint().y;
// y = y * ((double) nZoom / 100);
// x = x * (1 / ((double) nZoom / 100));
// y = y * (1 / ((double) nZoom / 100));
if(bSelectKlicked == false){
if(SelectPoint == null){
SelectPoint = new Point[2];
SelectPoint[0] = new Point((int) Math.round(x), (int) Math.round(y));
SelectPoint[1] = new Point((int) Math.round(0), (int) Math.round(0));
} else {
// if(SelectPoint[0].x != 0 && SelectPoint[0].y != 0){
SelectPoint[1] = new Point((int) Math.round(x), (int) Math.round(y));
// } else {
}
} else if(bSelectKlicked == true){
bSelectKlicked = false;
}
}
}

public void mouseMoved(java.awt.event.MouseEvent event)
{
}
}

/*
void miAbout_Action(java.awt.event.ActionEvent event)
{
//{{CONNECTION
// Action from About Create and show as modal
bPause = true;
(new AboutDialog(this, true)).show();
bPause = false;
//}}
}

void miExit_Action(java.awt.event.ActionEvent event)
{
//{{CONNECTION
// Action from Exit Create and show as modal
(new QuitDialog(this, true)).show();
//}}
}

void miOpen_Action(java.awt.event.ActionEvent event)
{
//{{CONNECTION
// Action from Open... Show the OpenFileDialog
openFileDialog1.show();
//}}
}
*/
}