public void drawComponent(Graphics2D g2d){
/*Alten Z-Wert speichern um nur bei Veränderung aktiv zu werden*/
double oldMoveZ = moveZ;
double oldMoveX = moveX;
double oldMoveY = moveY;
/*Die Größe und Höhe wird immer neu gezogen um bei einer Veränderung das Bild zentrieren zu können*/
width = MediaGateStatics.mediaGate.getWidth();//getWidth();
height = MediaGateStatics.mediaGate.getHeight();//getHeight();
g2d.drawImage(MediaGateStatics.skinLoader.getImageIcon("background").getImage(), 0, 0,MediaGateStatics.mediaGate.getWidth(),MediaGateStatics.mediaGate.getHeight(), null);
if(DEBUG){
g2d.setColor(Color.black);
g2d.drawLine(MediaGateStatics.mediaGate.getWidth()/2, 0, MediaGateStatics.mediaGate.getWidth()/2, MediaGateStatics.mediaGate.getHeight());
g2d.drawLine(0, MediaGateStatics.mediaGate.getHeight()/2, MediaGateStatics.mediaGate.getWidth(), MediaGateStatics.mediaGate.getHeight()/2);
}
/*Event auslesen*/
if(eventList.size() > 0 || currentEvent != null){
/*Event vorhanden*/
if(currentEvent == null){
currentEvent = eventList.get(0);
}
/*abfragen um welches Event es sich handelt*/
if(currentEvent.eventType == PictureEvent.MOVEEVENT){
/*MoveEvent*/
moveX = moveX + currentEvent.stepX;
moveY = moveY + currentEvent.stepY;
currentEvent.mustMove = currentEvent.mustMove - moveStep;
if(currentEvent.mustMove<=0){
if(DEBUG){System.out.println("MoveEvent - Ziel erreicht - Event abschalten");}
refreshEvent();
}
}
if(currentEvent.eventType == PictureEvent.FADEINEVENT){
/*Fadein-Event*/
if(moveZ < FADESIZE){
moveZ = moveZ + 0.02;
} else {
/*Ende erreicht*/
refreshEvent();
}
}
if(currentEvent.eventType == PictureEvent.FADEOUTEVENT){
/*Fadeout-Event*/
if(moveZ >1.0d){
moveZ = moveZ - 0.02;
} else{
/*Ende erreicht*/
//Die großen Bilder werden so lange im Speicher gehalten, wie sie benötigt werden!
//Wenn die Bilder nun alle wieder "klein" sind, dann kann ich diese aus dem
//Speicher nehmen und wieder durch die kleinen Bilder ersetzen.
for(int i = 0;i<seitenLängeRow;i++){
for(int o = 0;o<seitenLängeCol;o++){
mcePicture[i][o].deleteColorPicture();
}
}
System.gc();
refreshEvent();
}
}
if(currentEvent.eventType == PictureEvent.TIMEREVENT){
/* TimerEvent starten */
if(!waitTimer.isRunning()){
if(DEBUG){System.out.println("Waittimer wird gestartet");}
waitTimer.restart();
}
}
if(currentEvent.eventType == PictureEvent.COLOREVENT){
/*Nun wird das Bild farbig gemacht*/
for(int i = 0;i<seitenLängeRow;i++){
for(int o = 0;o<seitenLängeCol;o++){
mcePicture[i][o].addDarkTriangular();
}
}
if(!currentEvent.picture.stepNextColor()){
refreshEvent();
}
}
if(currentEvent.eventType == PictureEvent.UNCOLOREVENT){
/*Nun wird das Bild grau gemacht*/
for(int i = 0;i<seitenLängeRow;i++){
for(int o = 0;o<seitenLängeCol;o++){
mcePicture[i][o].removeDarkTriangular();
}
}
if(!currentEvent.picture.stepPreviousColor()){
refreshEvent();
}
}
if(currentEvent.eventType == PictureEvent.RELOADEVENT){
/*Reload-Event*/
if(moveZ >1.0d){
moveZ = moveZ - 0.02;
} else{
/*Ende erreicht*/
refreshEvent();
reloadPictures();
return;
}
}
}
/*Ermmittelt den absoluten X Wert in Abhängigkeit des Scalefaktors*/
double x = (getWidth()/ 2)-(((getWidth() /2)-moveX) * moveZ);
/*Ermmittelt den absoluten Y Wert in Abhängigkeit des Scalefaktors*/
double y = (/*getHeight()*/768/2)-(((/*getHeight()*/768/2)-moveY) * moveZ);
if(DEBUG){
System.out.println("Width=" + getWidth() + " moveX=" + moveX + " x=" + x + " moveZ="+moveZ );
System.out.println("------------------------------------------------------");
System.out.println(oldMoveZ + " - " + moveZ);
System.out.println(oldMoveX + " - " + moveX);
System.out.println(oldMoveY + " - " + moveY);
System.out.println("------------------------------------------------------");
}
/*MainTransformation auf Initialwert zurück setzen..*/
mainTransformation.setToIdentity();
/*X und Y Wert neu transformieren*/
mainTransformation.translate(x,y);
/*Die ScaleTransformation muss nur verändert werden, wenn sie sich auch wirklich verändert hat*/
if(moveZ >1.0){
if(oldMoveZ != moveZ){
/*Scalefaktor einbeziehen*/
scaleTransformation.setToIdentity();
scaleTransformation.scale(moveZ, moveZ);
}
/*Beide Transformationen verschmelzen*/
mainTransformation.concatenate(scaleTransformation);
}
if(currentEvent == null){
g2d.setColor(Color.white);
g2d.setFont(g2d.getFont().deriveFont(Font.BOLD, 30));
String ausgabe = "Bilder werden geladen...";
Point p = ExtendedSwingUtilities.centerText(g2d, ausgabe, getWidth(), getHeight());
g2d.drawString(ausgabe, p.x, p.y);
}
if(currentEvent != null){
if(currentEvent.eventType == PictureEvent.BUBBLELING){
//Die aufbubbelnden Bilder vergrößern
resizeBubblePictures();
//Abfragen ob alle Bilder fertig aufgebaut sind
if(allPicturesBubbled()){
refreshEvent();
setBubblePicturesToNormalSize();
} else {
//weitere Bilder nachladen
bubblePictures();
}
}
/*Transformation ans Grafik-Objekt hängen*/
g2d.setTransform(mainTransformation);
/*Alle Childkomponenten malen (Bilder)*/
this.paintChildren(g2d);
if(currentEvent.eventType == PictureEvent.UNREGISTERED){
currentEvent = null;
Runnable pRun = new Runnable(){
public void run(){
findNextPicture(true);
}
};
Thread pThread = new Thread(pRun);
pThread.setPriority(Thread.MIN_PRIORITY);
pThread.run();
}
SwingUtilities.invokeLater(new Runnable(){
public void run(){
Thread.yield();
MediaGateStatics.mediaGate.repaint();
Thread.yield();
}
});
}
}