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.bullet.PhysicsSpace;
8import com.jme3.export.InputCapsule;
9import com.jme3.export.JmeExporter;
10import com.jme3.export.JmeImporter;
11import com.jme3.export.OutputCapsule;
12import java.io.IOException;
13import java.util.logging.Level;
14import java.util.logging.Logger;
15
16/**
17 *
18 * @author normenhansen
19 */
20public class ConeCollisionShape extends CollisionShape {
21
22    protected float radius;
23    protected float height;
24    protected int axis;
25
26    public ConeCollisionShape() {
27    }
28
29    public ConeCollisionShape(float radius, float height, int axis) {
30        this.radius = radius;
31        this.height = radius;
32        this.axis = axis;
33        createShape();
34    }
35
36    public ConeCollisionShape(float radius, float height) {
37        this.radius = radius;
38        this.height = radius;
39        this.axis = PhysicsSpace.AXIS_Y;
40        createShape();
41    }
42
43    public float getRadius() {
44        return radius;
45    }
46
47    public void write(JmeExporter ex) throws IOException {
48        super.write(ex);
49        OutputCapsule capsule = ex.getCapsule(this);
50        capsule.write(radius, "radius", 0.5f);
51        capsule.write(height, "height", 0.5f);
52        capsule.write(axis, "axis", 0.5f);
53    }
54
55    public void read(JmeImporter im) throws IOException {
56        super.read(im);
57        InputCapsule capsule = im.getCapsule(this);
58        radius = capsule.readFloat("radius", 0.5f);
59        radius = capsule.readFloat("height", 0.5f);
60        radius = capsule.readFloat("axis", 0.5f);
61        createShape();
62    }
63
64    protected void createShape() {
65        objectId = createShape(axis, radius, height);
66        Logger.getLogger(this.getClass().getName()).log(Level.INFO, "Created Shape {0}", Long.toHexString(objectId));
67//        if (axis == PhysicsSpace.AXIS_X) {
68//            objectId = new ConeShapeX(radius, height);
69//        } else if (axis == PhysicsSpace.AXIS_Y) {
70//            objectId = new ConeShape(radius, height);
71//        } else if (axis == PhysicsSpace.AXIS_Z) {
72//            objectId = new ConeShapeZ(radius, height);
73//        }
74//        objectId.setLocalScaling(Converter.convert(getScale()));
75//        objectId.setMargin(margin);
76        setScale(scale);
77        setMargin(margin);
78    }
79
80    private native long createShape(int axis, float radius, float height);
81}
82