package jp.ac.aiit.jointry.services.broker.app;
import jp.ac.aiit.jointry.services.broker.core.DInfo;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.scene.effect.Shadow;
import javafx.scene.paint.Color;
import jp.ac.aiit.jointry.models.Sprite;
import jp.ac.aiit.jointry.util.JsonUtil;
public class SpriteDialog extends JointryDialogBase {
@Override
public void onAnswer(int event, DInfo dinfo) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onQuery(int event, DInfo dinfo) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onNotify(int event, DInfo dinfo) {
if (event == M_SPRITE_CREATE && mainController != null) {
mSpriteCreate(dinfo);
}
Sprite sprite = getTargetSprite(dinfo);
if (sprite == null) {
return; //該当なし
}
switch (event) {
case M_SPRITE_SELECT:
mSpriteSelect(sprite, dinfo);
break;
case M_SPRITE_DRAGGED:
mSpriteDragged(sprite, dinfo);
break;
case M_SPRITE_RELEASD:
mSpriteReleasd(sprite, dinfo);
break;
case M_COSTUME_SYNC:
mCostumeSync(sprite, dinfo);
break;
case M_SPRITE_RESET:
mSpriteReset(sprite);
break;
default:
break;
}
}
private void mSpriteCreate(DInfo dinfo) {
Sprite sprite = new Sprite();
sprite.setMainController(mainController);
sprite.setName(dinfo.get(K_SPRITE_NAME));
sprite.setLayoutX(dinfo.getInt(K_X1));
sprite.setLayoutY(dinfo.getInt(K_Y1));
String jsonString = dinfo.get(K_COSTUME_LIST);
List<Map> list = JsonUtil.convertJsonStringToList(jsonString);
try {
JsonUtil.parseJSONStringToCostumes(sprite, list, new File(""));
} catch (MalformedURLException ex) {
Logger.getLogger(SpriteDialog.class.getName()).log(Level.SEVERE, null, ex);
}
sprite.setSpriteCostume(dinfo.getInt(K_COSTUME_CURRENT));
mainController.getFrontStageController().addSprite(sprite, false);
}
private void mSpriteSelect(Sprite sprite, DInfo dinfo) {
sprite.setEffect(new Shadow(4.0f, Color.valueOf(dinfo.get(K_COLOR))));
}
private void mSpriteDragged(Sprite sprite, DInfo dinfo) {
sprite.setTranslateX(dinfo.getInt(K_X2));
sprite.setTranslateY(dinfo.getInt(K_Y2));
}
private void mSpriteReleasd(Sprite sprite, DInfo dinfo) {
sprite.setTranslateX(dinfo.getInt(K_X2));
sprite.setTranslateY(dinfo.getInt(K_Y2));
sprite.setEffect(null);
}
private void mSpriteReset(Sprite sprite) {
sprite.setTranslateX(0.0);
sprite.setTranslateY(0.0);
sprite.setRotate(0.0);
sprite.setScaleX(1.0);
sprite.setDirection(1);
sprite.clearSpeechBubble();
}
private void mCostumeSync(Sprite sprite, DInfo dinfo) {
//コスチュームを一旦全削除
sprite.clearCostume();
String jsonString = dinfo.get(K_COSTUME_LIST);
List<Map> list = JsonUtil.convertJsonStringToList(jsonString);
try {
JsonUtil.parseJSONStringToCostumes(sprite, list, new File(""));
} catch (MalformedURLException ex) {
Logger.getLogger(SpriteDialog.class.getName()).log(Level.SEVERE, null, ex);
}
sprite.setSpriteCostume(dinfo.getInt(K_COSTUME_CURRENT));
//同一のスプライト編集中は即時更新
String name = mainController.getFrontStageController().getCurrentSprite().getName();
if (sprite.getName().equals(name)) {
mainController.getBackStageController().showCostumes(sprite);
}
}
public static void sendSimpleMessage(int event, Sprite sprite) {
if (mainController.getAgent() != null) {
mainController.getAgent().sendNotify(getSimpleMessage(event, sprite));
}
}
public static void sendAllMessage(int event, Sprite sprite) {
if (mainController.getAgent() != null) {
DInfo dinfo = getSimpleMessage(event, sprite);
try {
String tempFile = new SpriteDialog().makeFilePath("");
List costumeList = JsonUtil.processCostumes(sprite, tempFile);
String jsonString = JsonUtil.convertObjectToJsonString(costumeList);
dinfo.set(K_COSTUME_LIST, jsonString);
} catch (IOException ex) {
Logger.getLogger(SpriteDialog.class.getName()).log(Level.SEVERE, null, ex);
}
mainController.getAgent().sendNotify(dinfo);
}
}
private static DInfo getSimpleMessage(int event, Sprite sprite) {
DInfo dinfo = new DInfo(D_SPRITE);
dinfo.set(K_METHOD, event);
dinfo.set(USER_ID, mainController.getUserName());
dinfo.set(K_SPRITE_NAME, sprite.getName());
dinfo.set(K_X1, (int) sprite.getX());
dinfo.set(K_Y1, (int) sprite.getY());
dinfo.set(K_X2, (int) sprite.getTranslateX());
dinfo.set(K_Y2, (int) sprite.getTranslateY());
dinfo.set(K_ROTATE, (int) sprite.getRotate());
dinfo.set(K_SPEECH, sprite.getSpeech());
dinfo.set(K_COSTUME_CURRENT, sprite.getCostumeNumber());
dinfo.set(K_COLOR, Color.RED.toString());
return dinfo;
}
}