/** * 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 es.eucm.ead.techdemo.elementfactories.scenes.scenes; import es.eucm.ead.model.assets.drawable.basics.Caption; import es.eucm.ead.model.assets.drawable.basics.Image; import es.eucm.ead.model.assets.text.BasicFont; import es.eucm.ead.model.elements.effects.ActorActionsEf; import es.eucm.ead.model.elements.effects.Effect; import es.eucm.ead.model.elements.effects.InterpolationEf; import es.eucm.ead.model.elements.effects.text.SpeakEf; import es.eucm.ead.model.elements.effects.variables.ChangeFieldEf; import es.eucm.ead.model.elements.events.SceneElementEv; import es.eucm.ead.model.elements.events.enums.SceneElementEvType; import es.eucm.ead.model.elements.extra.EAdList; import es.eucm.ead.model.elements.operations.ElementField; import es.eucm.ead.model.elements.operations.ValueOp; import es.eucm.ead.model.elements.predef.effects.MakeActiveElementEf; import es.eucm.ead.model.elements.predef.effects.MoveActiveElementToMouseEf; import es.eucm.ead.model.elements.predef.effects.SpeakSceneElementEf; import es.eucm.ead.model.elements.scenes.SceneElement; import es.eucm.ead.model.elements.scenes.SceneElementDef; import es.eucm.ead.model.elements.trajectories.SimpleTrajectory; import es.eucm.ead.model.params.fills.Paint; import es.eucm.ead.model.params.guievents.MouseGEv; import es.eucm.ead.model.params.text.EAdString; import es.eucm.ead.model.params.util.Position; import es.eucm.ead.model.params.util.Position.Corner; import es.eucm.ead.techdemo.elementfactories.EAdElementsFactory; import es.eucm.ead.techdemo.elementfactories.scenes.normalguy.NgCommon; public class SpeakAndMoveScene extends EmptyScene { private int dispY = 0; private ElementField trajectoryField; public SpeakAndMoveScene() { this.setId("SpeakAndMoveScene"); // EAdBasicSceneElement character = EAdElementsFactory // .getInstance() // .getSceneElementFactory() // .createSceneElement(CharacterScene.getStateDrawable(), 100, 300); NgCommon.init(); SceneElement character = new SceneElement(NgCommon.getMainCharacter()); character.setAlpha(0.5f); character.setPosition(new Position(Corner.BOTTOM_CENTER, 400, 400)); SpeakEf effect = new SpeakSceneElementEf(character, new EAdString( "techDemo.SpeakAndMoveScene.longText")); effect.setFont(BasicFont.BIG); // effect.setBalloonType(BalloonType.RECTANGLE); // effect.setFont(new EAdFontImpl(18)); // effect.seta character.addBehavior(MouseGEv.MOUSE_LEFT_PRESSED, effect); this.getSceneElements().add(character); MakeActiveElementEf makeActive = new MakeActiveElementEf(character); SceneElementEv event = new SceneElementEv(); event.addEffect(SceneElementEvType.INIT, makeActive); character.addEvent(event); addBehavior(MouseGEv.MOUSE_LEFT_PRESSED, new MoveActiveElementToMouseEf()); SceneElement actionsObject = new SceneElement(new Image( "@drawable/infobutton.png")); actionsObject.setPosition(100, 100); SceneElementDef action = new SceneElementDef(); action.addAsset(SceneElementDef.appearance, new Image( "@drawable/examine-normal.png")); action.addAsset(SceneElementDef.overAppearance, new Image( "@drawable/examine-pressed.png")); SpeakEf speak = new SpeakEf("ead.speakandmoveScene"); InterpolationEf move = new InterpolationEf(); move.setInterpolationTime(1000); move.addField(character.getField(VAR_X), actionsObject .getField(VAR_CENTER_X)); move.addField(character.getField(VAR_Y), actionsObject .getField(VAR_CENTER_Y)); move.getNextEffects().add(speak); move.setRelative(false); EAdElementsFactory.getInstance().getStringFactory().setString( speak.getString(), "The action was triggered!"); action.addBehavior(MouseGEv.MOUSE_LEFT_PRESSED, move); EAdList<SceneElementDef> actions = new EAdList<SceneElementDef>(); actions.add(action); actionsObject.setId("ActionsObject"); actionsObject.getDefinition().putProperty(ActorActionsEf.VAR_ACTIONS, actions); Effect showActions = new ActorActionsEf(actionsObject.getDefinition()); actionsObject.addBehavior(MouseGEv.MOUSE_RIGHT_PRESSED, showActions); getSceneElements().add(actionsObject); // Trajectories trajectoryField = new ElementField(this, VAR_TRAJECTORY_DEFINITION); SimpleTrajectory freeWalk = new SimpleTrajectory(); setTrajectoryDefinition(freeWalk); getSceneElements().add( getChangeTrajectory(freeWalk, "techDemo.SpeakAndMoveScene.freewalk")); SimpleTrajectory onlyHorizontal = new SimpleTrajectory(); onlyHorizontal.setOnlyHorizontal(true); getSceneElements().add( getChangeTrajectory(onlyHorizontal, "techDemo.SpeakAndMoveScene.onlyhorizontal")); SimpleTrajectory onlyHorizontalWithLimits = new SimpleTrajectory(); onlyHorizontalWithLimits.setOnlyHorizontal(true); onlyHorizontalWithLimits.setFreeWalk(false); onlyHorizontalWithLimits.setLeft(40); onlyHorizontalWithLimits.setRight(400); getSceneElements().add( getChangeTrajectory(onlyHorizontalWithLimits, "techDemo.SpeakAndMoveScene.onlyhorizontallimits")); SimpleTrajectory rectangleTrajectory = new SimpleTrajectory(); rectangleTrajectory.setOnlyHorizontal(false); rectangleTrajectory.setFreeWalk(false); rectangleTrajectory.setTop(50); rectangleTrajectory.setBottom(400); rectangleTrajectory.setLeft(40); rectangleTrajectory.setRight(500); getSceneElements().add( getChangeTrajectory(rectangleTrajectory, "techDemo.SpeakAndMoveScene.rectangle")); } private SceneElement getChangeTrajectory(SimpleTrajectory freeWalk, String string) { dispY += 50; Caption c = new Caption(string); c.setBubblePaint(Paint.BLACK_ON_WHITE); c.setPadding(5); SceneElement e = new SceneElement(c); e.setPosition(10, dispY); e.addBehavior(MouseGEv.MOUSE_LEFT_PRESSED, new ChangeFieldEf( trajectoryField, new ValueOp(freeWalk))); return e; } }