package de.rwth.setups; import geo.GeoObj; import gl.Color; import gl.CustomGLSurfaceView; import gl.GL1Renderer; import gl.GLCamera; import gl.GLFactory; import gl.animations.AnimationFaceToCamera; import gl.scenegraph.MeshComponent; import gl.scenegraph.RenderList; import gui.GuiSetup; import gui.simpleUI.ModifierGroup; import gui.simpleUI.Theme; import gui.simpleUI.Theme.ThemeColors; import gui.simpleUI.modifiers.Headline; import gui.simpleUI.modifiers.InfoText; import system.ErrorHandler; import system.EventManager; import system.Setup; import util.IO; import util.Vec; import worldData.Obj; import worldData.SystemUpdater; import worldData.World; import actions.ActionMoveCameraBuffered; import actions.ActionRotateCameraBuffered; import actions.ActionWASDMovement; import android.app.Activity; import android.view.Gravity; import android.view.View; import android.view.View.MeasureSpec; import android.widget.Button; import android.widget.LinearLayout.LayoutParams; import commands.Command; import commands.ui.CommandShowToast; import de.rwth.R; public class StaticDemoSetup extends Setup { private static final float MIN_DIST = 15f; private static final float MAX_DIST = 55f; protected static final String LOG_TAG = "StaticDemoSetup"; World world; GLCamera camera; private TimeModifier timeModifier; @Override public void _a_initFieldsIfNecessary() { // allow the user to send error reports to the developer: ErrorHandler.enableEmailReports("droidar.rwth@gmail.com", "Error in DroidAR App"); } @Override public void _b_addWorldsToRenderer(GL1Renderer renderer, GLFactory objectFactory, GeoObj currentPosition) { camera = new GLCamera(new Vec(0, 0, 1)); world = new World(camera); timeModifier = new TimeModifier(1); RenderList l = new RenderList(); timeModifier.setChild(l); initWorld(l); world.add(timeModifier); initI9Tests(world); world.add(objectFactory.newTextObject("DroidAR", new Vec(10, 1, 1), getActivity(), camera)); addTestGeoObj(world, camera); renderer.addRenderElement(world); } private void addTestGeoObj(World w, GLCamera c) { GeoObj o = new GeoObj(); MeshComponent s = GLFactory.getInstance().newCube(Color.blue()); MeshComponent s2 = GLFactory.getInstance().newCube(Color.red()); s2.setPosition(new Vec(5, 0, 0)); s2.setRotation(new Vec(0, 0, 45)); s.addChild(s2); s.setRotation(new Vec(0, 0, -45)); o.setComp(s); o.setVirtualPosition(new Vec(0, 20, 0)); w.add(o); } private void initI9Tests(World w) { { MeshComponent triangleMesh = GLFactory.getInstance() .newTexturedSquare( "elefantId", IO.loadBitmapFromId(getActivity(), R.drawable.elephant64)); triangleMesh.setScale(new Vec(10, 10, 10)); triangleMesh.addChild(new AnimationFaceToCamera(camera, 0.5f)); GeoObj treangleGeo = new GeoObj(GeoObj.newRandomGeoObjAroundCamera( camera, MIN_DIST, MAX_DIST), triangleMesh); w.add(treangleGeo); } { MeshComponent triangleMesh = GLFactory.getInstance() .newTexturedSquare( "hippoId", IO.loadBitmapFromId(getActivity(), R.drawable.hippopotamus64)); triangleMesh.addChild(new AnimationFaceToCamera(camera, 0.5f)); triangleMesh.setScale(new Vec(10, 10, 10)); GeoObj treangleGeo = new GeoObj(GeoObj.newRandomGeoObjAroundCamera( camera, MIN_DIST, MAX_DIST), triangleMesh); w.add(treangleGeo); } { MeshComponent triangleMesh = GLFactory.getInstance() .newTexturedSquare( "pandaId", IO.loadBitmapFromId(getActivity(), R.drawable.panda64)); triangleMesh.addChild(new AnimationFaceToCamera(camera, 0.5f)); triangleMesh.setScale(new Vec(10, 10, 10)); GeoObj treangleGeo = new GeoObj(GeoObj.newRandomGeoObjAroundCamera( camera, MIN_DIST, MAX_DIST), triangleMesh); w.add(treangleGeo); } { MeshComponent triangleMesh = GLFactory .getInstance() .newTexturedSquare("droidAR logo", IO.loadBitmapFromId(getActivity(), R.drawable.logo)); triangleMesh.addChild(new AnimationFaceToCamera(camera, 0.5f)); triangleMesh.setScale(new Vec(10, 10, 10)); GeoObj treangleGeo = new GeoObj(GeoObj.newRandomGeoObjAroundCamera( camera, MIN_DIST, MAX_DIST), triangleMesh); w.add(treangleGeo); } { // transform android ui elements into opengl models: Button b = new Button(getActivity()); b.setText("Click Me"); MeshComponent button = GLFactory.getInstance().newTexturedSquare( "buttonId", IO.loadBitmapFromView(b)); button.setOnClickCommand(new CommandShowToast(getActivity(), "Thanks alot")); button.addChild(new AnimationFaceToCamera(camera, 0.5f)); button.setScale(new Vec(10, 10, 10)); button.setColor(Color.red()); GeoObj treangleGeo = new GeoObj(GeoObj.newRandomGeoObjAroundCamera( camera, MIN_DIST, MAX_DIST), button); w.add(treangleGeo); } { // transform android ui elements into opengl models: ModifierGroup l = new ModifierGroup(Theme.A(getActivity(), ThemeColors.initToBlue())); l.addModifier(new InfoText("Example UI", Gravity.CENTER)); l.addModifier(new Headline(R.drawable.infoboxblue, "Lorem ipsum " + "dolor sit amet, consectetur adipisicing elit, " + "sed do eiusmod tempor incididunt ut labore et " + "dolore magna aliqua.")); l.addModifier(new Headline(R.drawable.warningcirclered, "Ut enim ad minim veniam, " + "quis nostrud exercitation ullamco laboris nisi " + "ut aliquip ex ea commodo consequat.")); View v = l.getView(getActivity()); MeshComponent button = GLFactory.getInstance().newTexturedSquare( "simpleUiId", IO.loadBitmapFromView(v, MeasureSpec.makeMeasureSpec(400, MeasureSpec.AT_MOST), LayoutParams.WRAP_CONTENT)); button.setOnClickCommand(new CommandShowToast(getActivity(), "Thanks alot")); button.addChild(new AnimationFaceToCamera(camera, 0.5f)); button.setScale(new Vec(10, 10, 10)); button.setColor(Color.red()); GeoObj treangleGeo = new GeoObj(GeoObj.newRandomGeoObjAroundCamera( camera, MIN_DIST, MAX_DIST), button); w.add(treangleGeo); } } private synchronized void initWorld(RenderList l) { l.add(GLFactory.getInstance().newSolarSystem(new Vec(-7, -7, 5))); l.add(GLFactory.getInstance().newHexGroupTest(new Vec(0, 8, -0.1f))); Obj treangle = new Obj(); MeshComponent treangleMesh = GLFactory.getInstance().newTexturedSquare( "worldIconId", IO.loadBitmapFromId(myTargetActivity, R.drawable.icon)); treangleMesh.setPosition(new Vec(0, -8, 1)); treangleMesh.setRotation(new Vec(0, 0, 0)); treangleMesh.addChild(new AnimationFaceToCamera(camera, 0.5f)); treangle.setComp(treangleMesh); l.add(treangle); } @Override public void _c_addActionsToEvents(EventManager eventManager, CustomGLSurfaceView arView, SystemUpdater updater) { ActionWASDMovement wasdAction = new ActionWASDMovement(camera, 25f, 50f, 20f); ActionRotateCameraBuffered rotateAction = new ActionRotateCameraBuffered( camera); updater.addObjectToUpdateCycle(wasdAction); updater.addObjectToUpdateCycle(rotateAction); arView.addOnTouchMoveAction(wasdAction); eventManager.addOnOrientationChangedAction(rotateAction); eventManager.addOnTrackballAction(new ActionMoveCameraBuffered(camera, 5, 25)); } @Override public void _d_addElementsToUpdateThread(SystemUpdater worldUpdater) { // add the created world to be updated: worldUpdater.addObjectToUpdateCycle(world); } @Override public void _e2_addElementsToGuiSetup(GuiSetup guiSetup, Activity activity) { guiSetup.setBottomMinimumHeight(50); guiSetup.setBottomViewCentered(); // addMapView(activity, guiSetup); guiSetup.addButtonToBottomView(new Command() { @Override public boolean execute() { timeModifier.setTimeFactor(timeModifier.getTimeFactor() + 1); return false; } }, "T+1"); guiSetup.addButtonToBottomView(new Command() { @Override public boolean execute() { timeModifier.setTimeFactor(timeModifier.getTimeFactor() - 1); return false; } }, "T-1"); } }