/* * * (c)2010 Lein-Mathisen Digital * http://lmdig.com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ package com.kristianlm.robotanks.box2dbridge.jbox2d; import org.jbox2d.collision.FilterData; import org.jbox2d.collision.MassData; import org.jbox2d.collision.shapes.PolygonDef; import org.jbox2d.collision.shapes.Shape; import org.jbox2d.common.Vec2; import org.jbox2d.dynamics.Body; import android.util.Log; import com.kristianlm.robotanks.box2dbridge.IBody; import com.kristianlm.robotanks.box2dbridge.IShape; public class JBox2DBody implements IBody { Body body; public JBox2DBody(Body b) { body = b; } @Override public float getInertiaInv() { return body.m_invI; } @Override public IShape createBox(float halfWidth, float halfHeight, float x, float y, float density, float angle) { PolygonDef pd = new PolygonDef(); pd.density = density; Vec2 center = new Vec2(x, y); pd.setAsBox(halfWidth, halfHeight, center, angle); // System.out.println("created shape with density " + pd.density); Shape shape = body.createShape(pd); return new JBox2DShape(this, shape); } @Override public void refilter(int categoryBits, int maskBits, int groupIndex) { FilterData fd = new FilterData(); fd.categoryBits = categoryBits; fd.maskBits = maskBits; fd.groupIndex = groupIndex; Shape shapeList = body.getShapeList(); if(shapeList != null) shapeList.setFilterData(fd); body.getWorld().refilter(body.getShapeList()); } @Override public FilterData getFilterData() { // TODO Auto-generated method stub return null; } @Override public void refilter() { FilterData fd = new FilterData(); fd.categoryBits = 0x01; fd.maskBits = 0xFF; fd.groupIndex = 0; body.getShapeList().setFilterData(fd); body.getWorld().refilter(body.getShapeList()); } @Override public void applyForce(Vec2 force, Vec2 point) { body.applyForce(force, point); } @Override public void applyTorque(float t) { body.applyTorque(t); } @Override public float getAngle() { return body.getAngle(); } @Override public float getAngularVelocity() { return body.getAngularVelocity(); } @Override public Vec2 getLinearVelocity() { return body.getLinearVelocity(); } @Override public Object getUserData() { return body.getUserData(); } @Override public Vec2 getWorldCenter() { return body.getWorldCenter(); } @Override public Vec2 getWorldDirection(Vec2 p) { return body.getWorldDirection(p); } @Override public void getWorldLocationToOut(Vec2 p, Vec2 q) { body.getWorldLocationToOut(p, q); } @Override public boolean isSleeping() { return body.isSleeping(); } @Override public void setAngularDamping(float d) { body.setAngularDamping(d); } @Override public void setLinearDamping(float d) { body.setLinearDamping(d); } @Override public void setMassFromShapes() { body.setMassFromShapes(); Log.e("pg", "SET MASS FROM SHAPES"); Thread.dumpStack(); } @Override public void destroyShape(IShape shape) { if (!(shape instanceof JBox2DShape)) return; JBox2DShape s = (JBox2DShape) shape; body.destroyShape(s.shape); } @Override public void setPosition(Vec2 pos) { body.setXForm(pos, body.getAngle()); } public Body getBody() { return body; } }