package com.opticalcobra.storybear.menu;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JList;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import com.opticalcobra.storybear.db.Database;
import com.opticalcobra.storybear.editor.Story;
import com.opticalcobra.storybear.editor.StoryInfo;
import com.opticalcobra.storybear.game.Window;
import com.opticalcobra.storybear.main.User;
import com.opticalcobra.storybear.res.FontCache;
import com.opticalcobra.storybear.res.Imagelib;
import com.opticalcobra.storybear.res.Ressources;
public class BookBox extends JLayeredPane {
public static final int postionNormal = (int)((1920-80)/Ressources.SCALE);
public static final int postionAvailable = (int)((1920-1600)/Ressources.SCALE);
private boolean available = false;
private JLayeredPane baseLayer;
private JLayeredPane buecherRegal;
private MouseListener mouseAreaListener;
private JLabel arrow;
private JLabel mouseArea;
private JList<StoryInfo> levelBuecher;
private DefaultListModel<StoryInfo> model = new DefaultListModel<StoryInfo>();
private Imagelib imagelib = Imagelib.getInstance();
private Database db = new Database();
private Menu menu;
public BookBox(Menu menu) {
this.menu = menu;
baseLayer = new JLayeredPane();
setLocation(postionNormal, 0);
setSize((int)(1600/Ressources.SCALE),(int)(1080/Ressources.SCALE));
arrow = new JLabel(new ImageIcon(imagelib.loadDesignImage("menu_arrow_left")));
arrow.setBounds((int)(0/Ressources.SCALE), (int)(20/Ressources.SCALE), (int)(60/Ressources.SCALE), (int)(60/Ressources.SCALE));
add(arrow);
// right shelf
initializeRightShelf();
// left shelf
initShelf();
// MouseIn-Out-Area
mouseAreaListener = new MouseListener() {
@Override
public void mouseReleased(MouseEvent arg0) {}
@Override
public void mousePressed(MouseEvent arg0) {}
@Override
public void mouseExited(MouseEvent arg0) {
hoverOut();
}
@Override
public void mouseEntered(MouseEvent arg0) {
hoverIn();
}
@Override
public void mouseClicked(MouseEvent arg0) {
hoverOut();
if(available)
hide();
else
makeAvailable();
}
};
mouseArea = new JLabel();
mouseArea.setBounds(0,0,(int)(100/Ressources.SCALE),(int)(1080/Ressources.SCALE));
add(mouseArea);
}
public void startGame() {
@SuppressWarnings("unused")
Window gui = new Window(levelBuecher.getSelectedValue().getId(), HeroButton.getType());
menu.dispose();
}
public void disable() {
mouseArea.removeMouseListener(mouseAreaListener);
mouseArea.setEnabled(false);
}
public void enable() {
mouseArea.addMouseListener(mouseAreaListener);
mouseArea.setEnabled(true);
}
public void makeAvailable() {
setLocation(postionAvailable, 0);
available = true;
menu.getMain().setVisible(false);
arrow.setIcon(new ImageIcon(imagelib.loadDesignImage("menu_arrow_right")));
loadStories();
}
public void hide() {
setLocation(postionNormal, 0);
available = false;
menu.getMain().setVisible(true);
arrow.setIcon(new ImageIcon(imagelib.loadDesignImage("menu_arrow_left")));
}
public void hoverIn() {
setCursor(Ressources.CURSORCLICKABLE);
setLocation(((available) ? postionAvailable+(int)(15/Ressources.SCALE) : postionNormal-(int)(15/Ressources.SCALE)),0);
}
public void hoverOut() {
setCursor(Ressources.CURSORNORMAL);
setLocation(((available) ? postionAvailable : postionNormal),0);
}
private void initializeRightShelf() {
JLabel chooseHeadline = new JLabel("Spieler-");
chooseHeadline.setBounds((int)(1305/Ressources.SCALE), (int)(0/Ressources.SCALE), (int)(250/Ressources.SCALE), (int)(200/Ressources.SCALE));
chooseHeadline.setFont(FontCache.getInstance().getFont("Fontin_SC", 45));
chooseHeadline.setForeground(Color.white);
baseLayer.add(chooseHeadline);
chooseHeadline = new JLabel("auswahl");
chooseHeadline.setBounds((int)(1305/Ressources.SCALE), (int)(45/Ressources.SCALE), (int)(250/Ressources.SCALE), (int)(200/Ressources.SCALE));
chooseHeadline.setFont(FontCache.getInstance().getFont("Fontin_SC", 45));
chooseHeadline.setForeground(Color.white);
baseLayer.add(chooseHeadline);
HeroButton[] heroButtons = new HeroButton[3];
heroButtons[0] = new HeroButton('b', imagelib.loadDesignImage("hero_bear_normal"),imagelib.loadDesignImage("hero_bear_hover"),imagelib.loadDesignImage("hero_bear_selected"));
heroButtons[1] = new HeroButton('f', imagelib.loadDesignImage("hero_fairy_normal"),imagelib.loadDesignImage("hero_fairy_hover"),imagelib.loadDesignImage("hero_fairy_selected"));
heroButtons[2] = new HeroButton('p', imagelib.loadDesignImage("hero_prince_normal"),imagelib.loadDesignImage("hero_prince_hover"),imagelib.loadDesignImage("hero_prince_selected"));
int buttonCnt = 0;
for (HeroButton button : heroButtons) {
button.setLocation((int)(1305/Ressources.SCALE),(int)((170+buttonCnt*215)/Ressources.SCALE));
baseLayer.add(button);
buttonCnt++;
}
TextButton start = new TextButton("Spielen", 1305, 860, 215, 130, 35, Color.white);
start.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
startGame();
}
});
baseLayer.add(start);
}
/**
* @author Tobias
*/
private void initShelf() {
buecherRegal = new JLayeredPane();
buecherRegal.setBounds(0, 0, Ressources.WINDOW.width, Ressources.WINDOW.height);
levelBuecher = new JList<StoryInfo>();
JScrollPane scrollpane = new Scrollbar(Ressources.SHELFCOLOR);
scrollpane.setViewportView(levelBuecher);
scrollpane.getViewport().setOpaque(false);
scrollpane.getViewport().setBackground(new Color(0,0,0,0));
scrollpane.setOpaque(false);
scrollpane.setBackground(new Color(0,0,0,0));
scrollpane.setBorder(null);
scrollpane.setCursor(Ressources.CURSORCLICKABLE);
JScrollBar sb = scrollpane.getVerticalScrollBar();
sb.setPreferredSize(new Dimension(30,0));
sb.setBackground(Ressources.SHELFCOLOR);
scrollpane.setBounds((int)(96/Ressources.SCALE),(int)(60/Ressources.SCALE), (int)(1138/Ressources.SCALE), (int)(959/Ressources.SCALE));
buecherRegal.add(scrollpane);
levelBuecher.setCellRenderer(new BookRenderer());
levelBuecher.setOpaque(false);
levelBuecher.setBackground(new Color(0,0,0,0));
baseLayer.add(buecherRegal);
loadStories();
levelBuecher.setSelectedIndex(0);
JLabel shelf = new JLabel();
shelf.setIcon(new ImageIcon(imagelib.menuImage(Imagelib.MENU_SHELF)));
shelf.setBounds(0, 0, Ressources.WINDOW.width, Ressources.WINDOW.height);
buecherRegal.add(shelf);
baseLayer.setVisible(true);
baseLayer.setBounds(0, 0, Ressources.WINDOW.width, Ressources.WINDOW.height);
add(baseLayer);
}
/**
* @author Tobias
*/
private void loadStories() {
ArrayList<StoryInfo> story = db.getAllLevelssFromDatabase();
Collections.sort(story);
model.clear();
for(int i=0 ; i<story.size();i++){
model.addElement(story.get(i));
}
levelBuecher.setModel(model);
}
}