/**
* eAdventure (formerly <e-Adventure> and <e-Game>) is a research project of the
* <e-UCM> research group.
*
* Copyright 2005-2010 <e-UCM> research group.
*
* You can access a list of all the contributors to eAdventure at:
* http://e-adventure.e-ucm.es/contributors
*
* <e-UCM> is a research group of the Department of Software Engineering
* and Artificial Intelligence at the Complutense University of Madrid
* (School of Computer Science).
*
* C Profesor Jose Garcia Santesmases sn,
* 28040 Madrid (Madrid), Spain.
*
* For more info please visit: <http://e-adventure.e-ucm.es> or
* <http://www.e-ucm.es>
*
* ****************************************************************************
*
* This file is part of eAdventure, version 2.0
*
* eAdventure is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* eAdventure is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with eAdventure. If not, see <http://www.gnu.org/licenses/>.
*/
package ead.importer.subimporters.chapter;
import com.google.inject.Inject;
import ead.importer.EAdElementImporter;
import ead.importer.annotation.ImportAnnotator;
import ead.importer.interfaces.EAdElementFactory;
import es.eucm.ead.model.elements.Chapter;
import es.eucm.ead.model.elements.events.SceneElementEv;
import es.eucm.ead.model.elements.events.enums.SceneElementEvType;
import es.eucm.ead.model.elements.huds.MouseHud;
import es.eucm.ead.model.elements.predef.effects.ChangeCursorEf;
import es.eucm.ead.tools.StringHandler;
import es.eucm.eadventure.common.data.HasId;
import es.eucm.eadventure.common.data.chapter.Timer;
import es.eucm.eadventure.common.data.chapter.effects.Macro;
import es.eucm.eadventure.common.data.chapter.elements.ActiveArea;
import es.eucm.eadventure.common.data.chapter.scenes.Scene;
import java.util.List;
/**
* Chapter importer
*
*/
public class ChapterImporter
implements
EAdElementImporter<es.eucm.eadventure.common.data.chapter.Chapter, Chapter> {
/**
* String handler
*/
private StringHandler stringHandler;
private EAdElementFactory elementFactory;
private EAdElementImporter<Timer, Event> timerImporter;
protected ImportAnnotator annotator;
@Inject
public ChapterImporter(StringHandler stringHandler,
EAdElementFactory elementFactory,
EAdElementImporter<Timer, Event> timerImporter,
ImportAnnotator annotator) {
this.stringHandler = stringHandler;
this.elementFactory = elementFactory;
this.timerImporter = timerImporter;
this.annotator = annotator;
}
@Override
public Chapter init(
es.eucm.eadventure.common.data.chapter.Chapter oldChapter) {
Chapter newChapter = new Chapter();
return newChapter;
}
@Override
public Chapter convert(
es.eucm.eadventure.common.data.chapter.Chapter oldChapter,
Object object) {
Chapter newChapter = (Chapter) object;
annotator.annotate(newChapter, ImportAnnotator.Type.Open);
annotator.annotate(newChapter, ImportAnnotator.Type.Entry,
ImportAnnotator.Key.Role, oldChapter.getTitle());
annotator.annotate(newChapter, ImportAnnotator.Type.Entry,
"description", oldChapter.getDescription());
//elementFactory.setCurrentChapterModel(newChapter, oldChapter);
registerActiveAreas(oldChapter.getScenes());
registerOldElements(oldChapter.getAtrezzo());
registerOldElements(oldChapter.getItems());
registerOldElements(oldChapter.getCharacters());
registerOldElements(oldChapter.getCutscenes());
registerOldElements(oldChapter.getScenes());
registerOldElements(oldChapter.getBooks());
registerOldElements(oldChapter.getGlobalStates());
registerOldElementMacros(oldChapter.getMacros());
registerOldElements(oldChapter.getConversations());
elementFactory.registerOldElement(oldChapter.getPlayer().getId(),
oldChapter.getPlayer());
importActiveAreas(oldChapter.getScenes());
importElements(oldChapter.getAtrezzo());
importElements(oldChapter.getItems());
importElements(oldChapter.getCharacters());
importElements(oldChapter.getCutscenes());
importElements(oldChapter.getScenes());
// Set cursor (yes, here)
setAdventureCursor(oldChapter);
importElements(oldChapter.getBooks());
importElements(oldChapter.getGlobalStates());
importElementsMacro(oldChapter.getMacros());
// Timers
for (Timer timer : oldChapter.getTimers()) {
Event timerEvent = timerImporter.init(timer);
timerEvent = timerImporter.convert(timer, timerEvent);
newChapter.addEvent(timerEvent);
}
// Import player
/*
* EAdActor player = characterImporter.convert(oldChapter.getPlayer());
* if ( player != null ) newChapter.getActors().add(player);
*/
// TODO oldChapter.getAdaptationName( );
// oldChapter.getAdaptationProfiles( )
// oldChapter.getAdaptationProfilesNames( )
// oldChapter.getAssessmentName( )
// oldChapter.getAssessmentProfiles( )
//newChapter.setInitialScene((Scene) elementFactory
// .getElementById(oldChapter.getInitialGeneralScene().getId()));
annotator.annotate(newChapter, ImportAnnotator.Type.Close);
return newChapter;
}
private void setAdventureCursor(
es.eucm.eadventure.common.data.chapter.Chapter oldChapter) {
ChangeCursorEf changeCursor = new ChangeCursorEf(MouseHud.CURSOR_ID);
Scene scene = (Scene) elementFactory.getElementById(oldChapter
.getInitialGeneralScene().getId());
SceneElementEv event = new SceneElementEv();
event.addEffect(SceneElementEvType.INIT, changeCursor);
//scene.addEvent(event);
}
private void registerActiveAreas(List<Scene> scenes) {
for (Scene s : scenes) {
for (ActiveArea a : s.getActiveAreas()) {
elementFactory.registerOldElement(a.getId(), a);
}
}
}
private void registerOldElements(List<? extends HasId> list) {
for (HasId element : list) {
elementFactory.registerOldElement(element.getId(), element);
}
}
private void registerOldElementMacros(List<Macro> list) {
for (Macro element : list) {
elementFactory.registerOldElement(element.getId(), element);
}
}
private void importElements(List<? extends HasId> list) {
for (HasId element : list) {
elementFactory.getElementById(element.getId());
}
}
private void importElementsMacro(List<Macro> list) {
for (Macro element : list) {
elementFactory.getElementById(element.getId());
}
}
private void importActiveAreas(List<Scene> scenes) {
for (Scene s : scenes) {
for (ActiveArea a : s.getActiveAreas()) {
elementFactory.getElementById(a.getId());
}
}
}
}