package com.akjava.gwt.threejsexamples.client;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import com.akjava.gwt.lib.client.URLUtils;
import com.akjava.gwt.three.client.java.ui.example.Example;
import com.akjava.gwt.three.client.java.ui.example.ExampleOwner;
import com.akjava.gwt.threejsexamples.client.examples.DecalExample;
import com.akjava.gwt.threejsexamples.client.examples.MirrorExample;
import com.akjava.gwt.threejsexamples.client.examples.MorphnormalsExample;
import com.akjava.gwt.threejsexamples.client.examples.animation.SceneExample;
import com.akjava.gwt.threejsexamples.client.examples.animation.cloth.ClothExample;
import com.akjava.gwt.threejsexamples.client.examples.animation.skinning.AttachExample;
import com.akjava.gwt.threejsexamples.client.examples.animation.skinning.BlendingExample;
import com.akjava.gwt.threejsexamples.client.examples.animation.skinning.MorphExample;
import com.akjava.gwt.threejsexamples.client.examples.buffergeometry.BufferGeometryExample;
import com.akjava.gwt.threejsexamples.client.examples.camera.CameraExample;
import com.akjava.gwt.threejsexamples.client.examples.geometries.ExtrudeShapesExample;
import com.akjava.gwt.threejsexamples.client.examples.geometries.GeometriesExample;
import com.akjava.gwt.threejsexamples.client.examples.light.HemisphereExample;
import com.akjava.gwt.threejsexamples.client.examples.misc.SoundExample;
import com.akjava.gwt.threejsexamples.client.examples.misc.controls.OrbitExample;
import com.akjava.gwt.threejsexamples.client.examples.misc.controls.PointerLockExample;
import com.akjava.gwt.threejsexamples.client.examples.morphtargets.HorseExample;
import com.akjava.gwt.threejsexamples.client.examples.morphtargets.MorphTargetsExample;
import com.akjava.gwt.threejsexamples.client.examples.morphtargets.human.HumanExample;
import com.akjava.gwt.threejsexamples.client.examples.postprocessing.AdvancedExample;
import com.akjava.gwt.threejsexamples.client.examples.postprocessing.DofExample;
import com.akjava.gwt.threejsexamples.client.examples.postprocessing.GlitchExample;
import com.akjava.gwt.threejsexamples.client.examples.postprocessing.PostProcessingExample;
import com.akjava.gwt.threejsexamples.client.examples.shaders.Ocean2Example;
import com.akjava.gwt.threejsexamples.client.examples.shaders.OceanExample;
import com.akjava.gwt.threejsexamples.client.examples.shading.PhysicalExample;
import com.akjava.gwt.threejsexamples.client.examples.shadowmap.ShadowmapExample;
import com.akjava.gwt.threejsexamples.client.examples.sweethome.SweetHomeExample;
import com.akjava.gwt.threejsexamples.client.examples.sweethome.SweetHomePointerLockExample;
import com.akjava.gwt.threejsexamples.client.examples.video.PanoramaEquirectangularExample;
import com.akjava.gwt.threejsexamples.client.examples.vr.VrStereoExample;
import com.google.common.collect.Lists;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
public class ThreejsExamples implements EntryPoint,ExampleOwner {
private DockLayoutPanel center;
/**
* request animation test
*
* warning
*
* 'webkitRequestAnimationFrame' is vendor-specific. Please use the standard 'requestAnimationFrame' instead.
* 'webkitCancelRequestAnimationFrame' is vendor-specific. Please use the standard 'cancelAnimationFrame' instead.
*/
@Override
public void onModuleLoad() {
DockLayoutPanel root=new DockLayoutPanel(Unit.PX);
RootLayoutPanel.get().add(root);
center = new DockLayoutPanel(Unit.PX);
//left-side
VerticalPanel side=new VerticalPanel();
side.setWidth("100%");
side.setStylePrimaryName("side");
side.setSpacing(4);
Label title=new Label("GWT-three.js Examples");
title.setStylePrimaryName("header");
side.add(title);
Label webgl=new Label("webgl");
webgl.setStylePrimaryName("subheader");
webgl.setWidth("100%");
side.add(webgl);
root.addWest(side, 300);
root.add(center);
List<Example> examples=Lists.newArrayList();
examples.add(new ExtrudeShapesExample());
//examples.add(new PointBoxExample());
//examples.add(new ClothExample3());
//examples.add(new BoneAnimationExample());
//examples.add(new Mbl3dLoadExample());
//examples.add(new MyExample());
examples.add(new SoundExample());
examples.add(new PanoramaEquirectangularExample());
examples.add(new GeometriesExample());
examples.add(new DecalExample());
examples.add(new CameraExample());
examples.add(new ShadowmapExample());
examples.add(new PhysicalExample());
examples.add(new HumanExample());
examples.add(new MorphnormalsExample());
examples.add(new HemisphereExample());
examples.add(new SceneExample());
examples.add(new ClothExample());
//examples.add(new HairExample());
//examples.add(new ClothExample2());
examples.add(new MorphExample());
examples.add(new BlendingExample());
examples.add(new BufferGeometryExample());
examples.add(new MorphTargetsExample());
examples.add(new HorseExample());
examples.add(new OrbitExample());
examples.add(new VrStereoExample());
examples.add(new MirrorExample());
examples.add(new OceanExample());
examples.add(new Ocean2Example());
examples.add(new PostProcessingExample());
examples.add(new GlitchExample());
examples.add(new DofExample());
examples.add(new AdvancedExample());
examples.add(new AttachExample());
examples.add(new SweetHomeExample());
examples.add(new SweetHomePointerLockExample());
examples.add(new PointerLockExample());
Collections.sort(examples);
//TODO add scroll
for(Example exp:examples){
side.add(new DemoAnchor(this,exp));
}
Label links=new Label("Links");
links.setStylePrimaryName("subheader");
side.add(links);
side.add(new Anchor("Three.js(github)", "https://github.com/mrdoob/three.js/"));
side.add(new Anchor("Three.js origin examples", "http://threejs.org/examples/"));
side.add(new Anchor("GWT-Three.js(github)", "https://github.com/akjava/gwt-three.js-test"));
side.add(new Anchor("GWT-Three.js old examples", "http://akjava.github.io/gwt-three.js-test/ThreeTest.html"));
side.add(new Anchor("GWT", "http://www.gwtproject.org/"));
Map<String,List<String>> tokens=URLUtils.parseToken(History.getToken(), false);
for(String key:tokens.keySet()){
for(final Example exp: examples){
if(key.equals(exp.getTokenKey())){
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
selectNewExample(exp);//wait complete initialize
}
});
break;
}
}
}
}
public class DemoAnchor extends Anchor{
public DemoAnchor(final ExampleOwner owner,final Example demo){
super(demo.getName());
this.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
owner.selectNewExample(demo);
}
});
}
}
@Override
public Panel getPanel() {
return center;
}
private Example lastDemo;
@Override
public void selectNewExample(Example demo) {
if(lastDemo!=null){
lastDemo.stop();
}
demo.start(getPanel());
lastDemo=demo;
History.newItem(demo.getTokenKey());
}
}