# HG changeset patch # User sugi # Date 1402992678 -32400 # Node ID c0cf9fe00d773f49e5eab17f52bea5c415fb9024 # Parent b64b650fb74caca0d9fd45632cf23056ebe68679 add direction Information diff -r b64b650fb74c -r c0cf9fe00d77 src/main/java/alice/test/topology/aquarium/fx/Aquarium.java --- a/src/main/java/alice/test/topology/aquarium/fx/Aquarium.java Tue Jun 17 17:08:08 2014 +0900 +++ b/src/main/java/alice/test/topology/aquarium/fx/Aquarium.java Tue Jun 17 17:11:18 2014 +0900 @@ -38,31 +38,41 @@ Scene scene = new Scene(createContent()); scene.setOnKeyPressed(new EventHandler() { public void handle(KeyEvent t) { + FishInfo info = null; switch (t.getCode()) { case RIGHT: - ods.update(myName+"FishdiffP", new FishInfo(0.1,0,0)); + info = new FishInfo(0.1,0,0); + info.rolY = -1; + info.rotate = 90; break; case LEFT: - ods.update(myName+"FishdiffP", new FishInfo(-0.1,0,0)); + info = new FishInfo(-0.1,0,0); + info.rolY = 1; + info.rotate = 90; break; case UP: - ods.update(myName+"FishdiffP", new FishInfo(0,-0.1,0)); + info = new FishInfo(0,-0.1,0); + info.rolX = -1; + info.rotate = 90; break; case DOWN: - ods.update(myName+"FishdiffP", new FishInfo(0,0.1,0)); + info = new FishInfo(0,0.1,0); + info.rolX = 1; + info.rotate = 90; break; case N: - ods.update(myName+"FishdiffP", new FishInfo(0,0,0.1)); + info = new FishInfo(0,0,0.1); + info.rolX = -1; break; case M: - ods.update(myName+"FishdiffP", new FishInfo(0,0,-0.1)); - break; - case R: // reset. need absolute position - ods.update(myName+"FishdiffP", new FishInfo(0,0,0)); + info = new FishInfo(0,0,-0.1); + info.rotate = 180; break; default: // do nothing + // reset. send median position. after implement break; } + ods.update(myName+"FishdiffP", info); } }); primaryStage.setScene(scene); diff -r b64b650fb74c -r c0cf9fe00d77 src/main/java/alice/test/topology/aquarium/fx/CalculatePosition.java --- a/src/main/java/alice/test/topology/aquarium/fx/CalculatePosition.java Tue Jun 17 17:08:08 2014 +0900 +++ b/src/main/java/alice/test/topology/aquarium/fx/CalculatePosition.java Tue Jun 17 17:11:18 2014 +0900 @@ -10,7 +10,6 @@ private Receiver info1 = ids.create(CommandType.TAKE); // absolute fish position value private Receiver info2 = ids.create(CommandType.PEEK); - public CalculatePosition(String key){ info.setKey(key+"FishdiffP"); info1.setKey("OwnFishP"); @@ -26,10 +25,15 @@ afp.setX(afp.getX() + dfp.getX()); afp.setY(afp.getY() + dfp.getY()); - afp.setZ(afp.getZ() + dfp.getZ()); - + afp.setZ(afp.getZ() + dfp.getZ()); ods.update(info1.key, afp); - ods.update(myName+"FishabsoluteP", new FishInfo(afp.getX(),afp.getY(),afp.getZ())); + + FishInfo fishInfo = new FishInfo(afp.getX(),afp.getY(),afp.getZ()); + fishInfo.rolX = dfp.rolX; + fishInfo.rolY = dfp.rolY; + fishInfo.rolZ = dfp.rolZ; + fishInfo.rotate = dfp.rotate; + ods.update(myName+"FishabsoluteP", fishInfo); this.recycle(); } diff -r b64b650fb74c -r c0cf9fe00d77 src/main/java/alice/test/topology/aquarium/fx/CreateObject.java --- a/src/main/java/alice/test/topology/aquarium/fx/CreateObject.java Tue Jun 17 17:08:08 2014 +0900 +++ b/src/main/java/alice/test/topology/aquarium/fx/CreateObject.java Tue Jun 17 17:11:18 2014 +0900 @@ -4,9 +4,11 @@ import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.scene.Group; +import javafx.scene.Node; import javafx.scene.shape.DrawMode; import javafx.scene.shape.MeshView; +import com.interactivemesh.jfx.importer.col.ColModelImporter; import com.interactivemesh.jfx.importer.obj.ObjModelImporter; import alice.codesegment.CodeSegment; @@ -28,6 +30,28 @@ FishInfo fishInfo = info.asClass(FishInfo.class); String myName = info1.asString(); + Group obj = new Group(); + addColladaObject(obj); + + obj.setScaleX(fishInfo.size); + obj.setScaleY(fishInfo.size); + obj.setScaleZ(fishInfo.size); + obj.setId(fishInfo.name); + + // controlled own fish + if (myName.equals(fishInfo.name)){ + new CalculatePosition(fishInfo.name); + } + + new SetTranslate(fishInfo.name+"Fish"); + ods.put("addOffer", obj); + ods.put("register", fishInfo); + new SendDataOthers(info, "fishData"); + new CreateObject(); + } + + // for read *.obj file + public void addObject(Group obj){ BooleanProperty showWireframe = new SimpleBooleanProperty(false); ObjModelImporter objImporter = new ObjModelImporter(); objImporter.read(getClass().getClassLoader().getResource("objects/Scooter-smgrps.obj")); @@ -35,26 +59,19 @@ MeshView[] dukeMesh = objImporter.getImport(); objImporter.close(); - Group obj = new Group(); for (MeshView _dukeMesh : dukeMesh) { obj.getChildren().addAll(_dukeMesh); _dukeMesh.drawModeProperty().bind(new When(showWireframe).then(DrawMode.LINE).otherwise(DrawMode.FILL)); } - obj.setScaleX(fishInfo.size); // twice size - obj.setScaleY(fishInfo.size); - obj.setScaleZ(fishInfo.size); - obj.setId(fishInfo.name); - - if (myName.equals(fishInfo.name)){ - new CalculatePosition(fishInfo.name); - } - - new SetTranslate(fishInfo.name+"Fish"); - ods.put("addOffer", obj); - ods.put("register", fishInfo); - new SendDataOthers(info, "fishData"); - new CreateObject(); } + // for read *.dae file + public void addColladaObject(Group obj){ + ColModelImporter colImporter = new ColModelImporter(); + colImporter.read(getClass().getClassLoader().getResource("objects/seymourplane-150-im.dae")); + System.out.println(colImporter.getImport().length); + Node[] node = colImporter.getImport(); + obj.getChildren().add(node[0]); + } } diff -r b64b650fb74c -r c0cf9fe00d77 src/main/java/alice/test/topology/aquarium/fx/FishInfo.java --- a/src/main/java/alice/test/topology/aquarium/fx/FishInfo.java Tue Jun 17 17:08:08 2014 +0900 +++ b/src/main/java/alice/test/topology/aquarium/fx/FishInfo.java Tue Jun 17 17:11:18 2014 +0900 @@ -9,9 +9,14 @@ public double y = 0; public double z = 0; public String name; - public int size = 1; + public double size = 0.1; public String type = "defalut"; // use select object type. after implement may be... + public double rolX = 0; // these parameters use RotationAxis + public double rolY = 0; + public double rolZ = 0; + public double rotate = 0; + public FishInfo(){ // this constructor is nothing to do, but need for serializing with MessagePack } diff -r b64b650fb74c -r c0cf9fe00d77 src/main/java/alice/test/topology/aquarium/fx/RegisterList.java --- a/src/main/java/alice/test/topology/aquarium/fx/RegisterList.java Tue Jun 17 17:08:08 2014 +0900 +++ b/src/main/java/alice/test/topology/aquarium/fx/RegisterList.java Tue Jun 17 17:11:18 2014 +0900 @@ -1,6 +1,6 @@ package alice.test.topology.aquarium.fx; -import java.util.ArrayList; +import java.util.List; import alice.codesegment.CodeSegment; import alice.datasegment.CommandType; @@ -21,7 +21,7 @@ FishInfo fishInfo = info.asClass(FishInfo.class); @SuppressWarnings("unchecked") - ArrayList list = info1.asClass(ArrayList.class); + List list = info1.asClass(List.class); list.add(fishInfo); ods.update(info1.key, list); diff -r b64b650fb74c -r c0cf9fe00d77 src/main/java/alice/test/topology/aquarium/fx/SetTranslate.java --- a/src/main/java/alice/test/topology/aquarium/fx/SetTranslate.java Tue Jun 17 17:08:08 2014 +0900 +++ b/src/main/java/alice/test/topology/aquarium/fx/SetTranslate.java Tue Jun 17 17:11:18 2014 +0900 @@ -1,6 +1,7 @@ package alice.test.topology.aquarium.fx; import javafx.application.Platform; +import javafx.geometry.Point3D; import javafx.scene.Group; import alice.codesegment.CodeSegment; import alice.datasegment.CommandType; @@ -30,6 +31,9 @@ Group fish = info.asClass(Group.class); FishInfo fp = info1.asClass(FishInfo.class); int median = info2.asInteger(); + + fish.setRotate(fp.rotate); + fish.setRotationAxis(new Point3D(fp.rolX,fp.rolY,fp.rolZ)); fish.setTranslateX(fp.getX() - median); fish.setTranslateY(fp.getY()); fish.setTranslateZ(fp.getZ());