package com.iambookmaster.client.iphone.urq;
import java.util.List;
import com.google.code.gwt.database.client.service.DataServiceException;
import com.google.code.gwt.database.client.service.ScalarCallback;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Label;
import com.iambookmaster.client.iphone.IPhoneCanvas;
import com.iambookmaster.client.iphone.IPhoneViewListenerAdapter;
import com.iambookmaster.client.iphone.common.IPhoneButton;
import com.iambookmaster.client.iphone.common.IPhoneTextFileViewer;
import com.iambookmaster.client.iphone.data.IPhoneDataService;
import com.iambookmaster.client.iphone.data.IPhoneFileBean;
import com.iambookmaster.client.iphone.images.IPhoneImages;
import com.iambookmaster.client.iphone.images.IPhoneStyles;
public class IPhoneURQMainPanel extends IPhoneViewListenerAdapter {
static final IPhoneStyles css = IPhoneImages.INSTANCE.css();
private IPhoneCanvas canvas;
private List<IPhoneFileBean> files;
private ClickHandler playSingleFileHandler;
private IPhoneDataService dataService;
private ClickHandler selectFileHandler;
private ClickHandler helpHandler;
private IPhoneURQPlayer player;
private boolean gameActive;
private ClickHandler backHandler;
private IPhoneURQSelectFile fileSelector;
public IPhoneURQMainPanel(IPhoneDataService dataService,List<IPhoneFileBean> result) {
this.files = result;
this.dataService = dataService;
playSingleFileHandler = new ClickHandler() {
public void onClick(ClickEvent event) {
gameActive = false;
playFile(files.get(0).getPath());
}
};
selectFileHandler = new ClickHandler() {
public void onClick(ClickEvent event) {
gameActive = false;
fileSelector.show(canvas, files);
}
};
helpHandler = new ClickHandler() {
public void onClick(ClickEvent event) {
IPhoneTextFileViewer viewer = new IPhoneTextFileViewer() {
@Override
public void back() {
IPhoneURQMainPanel.this.show(canvas,false);
}
@Override
public void forward() {
IPhoneURQMainPanel.this.show(canvas,true);
}
};
viewer.show(canvas,
"iURQ 1.0<br/><br/>Плеер предназначен для проигрывания произведений в жанре Интерактивная фантастика для платформы URQ.<br/><br/>" +
"Сдвигайте экран вверх/вниз для скроллинга<br/><br/>" +
"Сдвиньте экран влево для переключения в Инвентарь<br/><br/>"+
"Сдвиньте экран вправо для переключения в главное меню<br/><br/>"+
"Принимаются только файлы в формате QST, кодировка UTF-8.<br/><br/>" +
"Данная версия не поддерживает картинки, звук и ввод текста<br/><br/>" +
"Используйте iTunes чтобы загрузить дополнительные квесты<br/><br/>" +
"Программа читает список доступных квестов в момент старта. Если вы добавили новый квест - потребуется перезапустить программу, чтобы начать в него играть. <br/><br/>" +
"Используйте стандартные жесты для изменения размера шрифта<br/><br/>"
);
}
};
backHandler = new ClickHandler() {
public void onClick(ClickEvent event) {
player.show(canvas);
}
};
fileSelector = new IPhoneURQSelectFile("Выбрать игру") {
@Override
protected void selectFile(IPhoneFileBean file) {
playFile(file.getPath());
}
public void back() {
IPhoneURQMainPanel.this.show(canvas,false);
}
public void forward() {
IPhoneURQMainPanel.this.show(canvas,true);
}
};
player = new IPhoneURQPlayer(dataService,new IPhoneURQPlayerListenr() {
public void exit() {
gameActive=false;
IPhoneURQMainPanel.this.show(canvas,true);
}
public void rootMenu() {
gameActive=true;
IPhoneURQMainPanel.this.show(canvas,false);
}
});
}
private void playFile(final String name) {
dataService.loadSingleFile(name,new ScalarCallback<String>() {
public void onFailure(DataServiceException error) {
Window.alert("onFailure: "+error.getMessage());
}
public void onSuccess(String result) {
player.play(result,canvas,true,name,null);
}
});
}
public void show(IPhoneCanvas canvas,boolean direction) {
this.canvas = canvas;
canvas.setListener(this);
_redraw(canvas,direction ? 1 : -1);
}
public void redraw(IPhoneCanvas viewer) {
_redraw(viewer, 0);
}
private void _redraw(IPhoneCanvas viewer,int animation) {
switch (animation) {
case -1:
viewer.clearWithAnimation(true);
break;
case 1:
viewer.clearWithAnimation(false);
break;
default:
viewer.clear();
break;
}
Label label = new Label("iURQ 1.0");
label.setStyleName(css.urqTitle());
viewer.add(label);
label = new Label("iURQ - плеер для проигрывания текстовых квестов в формате URQ. Аббревиатура расшифровывается как Universal Ripsoft Quest, по названию первой программы-плеера.");
// label.setStyleName(css.urqDescription());
viewer.add(label);
IPhoneButton button;
if (gameActive) {
button = new IPhoneButton("Продолжить игру");
canvas.add(button);
canvas.addClickHandler(button, backHandler);
}
if (files.size()==1){
button = new IPhoneButton("Начать игру");
canvas.add(button);
canvas.addClickHandler(button, playSingleFileHandler);
} else if (files.size()>1){
button = new IPhoneButton("Выбрать игру");
canvas.add(button);
canvas.addClickHandler(button, selectFileHandler);
}
button = new IPhoneButton("Помощь");
canvas.add(button);
canvas.addClickHandler(button, helpHandler);
canvas.done();
}
public void back() {
if (gameActive) {
player.show(canvas);
}
}
public void forward() {
if (gameActive) {
//back to game
player.show(canvas);
} else if (files.size()==1){
//play
playFile(files.get(0).getPath());
} else if (files.size()>1){
//select file
}
}
public void drawn() {
}
public void playSavedGame(String questFileName, String questText, final String state) {
//load quest and process it
player.play(questText,canvas,false,questFileName,new Command() {
public void execute() {
try {
player.restoreState(state,false);
//show "Back to Game" button
gameActive = true;
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public IPhoneURQPlayer getPlayer() {
return player;
}
}