1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5package com.jme3.bullet.collision.shapes;
6
7import com.jme3.export.InputCapsule;
8import com.jme3.export.JmeExporter;
9import com.jme3.export.JmeImporter;
10import com.jme3.export.OutputCapsule;
11import com.jme3.math.Vector3f;
12import java.io.IOException;
13import java.util.logging.Level;
14import java.util.logging.Logger;
15
16/**
17 * A simple point, line, triangle or quad collisionShape based on one to four points-
18 * @author normenhansen
19 */
20public class SimplexCollisionShape extends CollisionShape {
21
22    private Vector3f vector1, vector2, vector3, vector4;
23
24    public SimplexCollisionShape() {
25    }
26
27    public SimplexCollisionShape(Vector3f point1, Vector3f point2, Vector3f point3, Vector3f point4) {
28        vector1 = point1;
29        vector2 = point2;
30        vector3 = point3;
31        vector4 = point4;
32        createShape();
33    }
34
35    public SimplexCollisionShape(Vector3f point1, Vector3f point2, Vector3f point3) {
36        vector1 = point1;
37        vector2 = point2;
38        vector3 = point3;
39        createShape();
40    }
41
42    public SimplexCollisionShape(Vector3f point1, Vector3f point2) {
43        vector1 = point1;
44        vector2 = point2;
45        createShape();
46    }
47
48    public SimplexCollisionShape(Vector3f point1) {
49        vector1 = point1;
50        createShape();
51    }
52
53    public void write(JmeExporter ex) throws IOException {
54        super.write(ex);
55        OutputCapsule capsule = ex.getCapsule(this);
56        capsule.write(vector1, "simplexPoint1", null);
57        capsule.write(vector2, "simplexPoint2", null);
58        capsule.write(vector3, "simplexPoint3", null);
59        capsule.write(vector4, "simplexPoint4", null);
60    }
61
62    public void read(JmeImporter im) throws IOException {
63        super.read(im);
64        InputCapsule capsule = im.getCapsule(this);
65        vector1 = (Vector3f) capsule.readSavable("simplexPoint1", null);
66        vector2 = (Vector3f) capsule.readSavable("simplexPoint2", null);
67        vector3 = (Vector3f) capsule.readSavable("simplexPoint3", null);
68        vector4 = (Vector3f) capsule.readSavable("simplexPoint4", null);
69        createShape();
70    }
71
72    protected void createShape() {
73        if (vector4 != null) {
74            objectId = createShape(vector1, vector2, vector3, vector4);
75//            objectId = new BU_Simplex1to4(Converter.convert(vector1), Converter.convert(vector2), Converter.convert(vector3), Converter.convert(vector4));
76        } else if (vector3 != null) {
77            objectId = createShape(vector1, vector2, vector3);
78//            objectId = new BU_Simplex1to4(Converter.convert(vector1), Converter.convert(vector2), Converter.convert(vector3));
79        } else if (vector2 != null) {
80            objectId = createShape(vector1, vector2);
81//            objectId = new BU_Simplex1to4(Converter.convert(vector1), Converter.convert(vector2));
82        } else {
83            objectId = createShape(vector1);
84//            objectId = new BU_Simplex1to4(Converter.convert(vector1));
85        }
86        Logger.getLogger(this.getClass().getName()).log(Level.INFO, "Created Shape {0}", Long.toHexString(objectId));
87//        objectId.setLocalScaling(Converter.convert(getScale()));
88//        objectId.setMargin(margin);
89        setScale(scale);
90        setMargin(margin);
91    }
92
93    private native long createShape(Vector3f vector1);
94
95    private native long createShape(Vector3f vector1, Vector3f vector2);
96
97    private native long createShape(Vector3f vector1, Vector3f vector2, Vector3f vector3);
98
99    private native long createShape(Vector3f vector1, Vector3f vector2, Vector3f vector3, Vector3f vector4);
100}
101