public void fly() {

		synchronized (enemy_Launcher) {
			boolean status = enemy_Launcher.isHidden();
			if (status) { // if missile is hidden set him as unhidden
				enemy_Launcher.setHidden(false);
			}
			// if missile alive and launcher is alive
			if (this.isAlive && enemy_Launcher.alive()) {
				War.theLogger.log(Level.INFO, " Missile " + getID()
						+ " fired to " + getDestination() + " and will hit in "
						+ getFlyTime() + "s", enemy_Launcher);
				this.mode = Mode.Launched;
			}
			try {
				Thread.sleep((long) flyTime * 1000);
			} catch (InterruptedException e) {				
			}
			if (this.isAlive) {
				War.theLogger.log(Level.INFO, " Missile " + getID() + " hit "
						+ getDestination() + " for " + getDamage() + " damage",
						enemy_Launcher);
				// Setting the missile as "dead"
				enemy_Launcher.removeMissile(this);
				this.mode = Mode.Hit;
			}

			if (status) {
				enemy_Launcher.setHidden(true);

			}
		}

	}