diff options
Diffstat (limited to 'engine/src/jbullet/com/jme3/bullet/collision/shapes/ConeCollisionShape.java')
-rw-r--r-- | engine/src/jbullet/com/jme3/bullet/collision/shapes/ConeCollisionShape.java | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/engine/src/jbullet/com/jme3/bullet/collision/shapes/ConeCollisionShape.java b/engine/src/jbullet/com/jme3/bullet/collision/shapes/ConeCollisionShape.java new file mode 100644 index 0000000..7103f0d --- /dev/null +++ b/engine/src/jbullet/com/jme3/bullet/collision/shapes/ConeCollisionShape.java @@ -0,0 +1,77 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.jme3.bullet.collision.shapes; + +import com.bulletphysics.collision.shapes.ConeShape; +import com.bulletphysics.collision.shapes.ConeShapeX; +import com.bulletphysics.collision.shapes.ConeShapeZ; +import com.jme3.bullet.PhysicsSpace; +import com.jme3.bullet.util.Converter; +import com.jme3.export.InputCapsule; +import com.jme3.export.JmeExporter; +import com.jme3.export.JmeImporter; +import com.jme3.export.OutputCapsule; +import java.io.IOException; + +/** + * + * @author normenhansen + */ +public class ConeCollisionShape extends CollisionShape { + + protected float radius; + protected float height; + protected int axis; + + public ConeCollisionShape() { + } + + public ConeCollisionShape(float radius, float height, int axis) { + this.radius = radius; + this.height = radius; + this.axis = axis; + createShape(); + } + + public ConeCollisionShape(float radius, float height) { + this.radius = radius; + this.height = radius; + this.axis = PhysicsSpace.AXIS_Y; + createShape(); + } + + public float getRadius() { + return radius; + } + + public void write(JmeExporter ex) throws IOException { + super.write(ex); + OutputCapsule capsule = ex.getCapsule(this); + capsule.write(radius, "radius", 0.5f); + capsule.write(height, "height", 0.5f); + capsule.write(axis, "axis", 0.5f); + } + + public void read(JmeImporter im) throws IOException { + super.read(im); + InputCapsule capsule = im.getCapsule(this); + radius = capsule.readFloat("radius", 0.5f); + radius = capsule.readFloat("height", 0.5f); + radius = capsule.readFloat("axis", 0.5f); + createShape(); + } + + protected void createShape() { + if (axis == PhysicsSpace.AXIS_X) { + cShape = new ConeShapeX(radius, height); + } else if (axis == PhysicsSpace.AXIS_Y) { + cShape = new ConeShape(radius, height); + } else if (axis == PhysicsSpace.AXIS_Z) { + cShape = new ConeShapeZ(radius, height); + } + cShape.setLocalScaling(Converter.convert(getScale())); + cShape.setMargin(margin); + } +} |