package info.u250.c2d.box2deditor.ui.controls;
import info.u250.c2d.box2d.model.b2BodyDefModel;
import info.u250.c2d.box2d.model.b2FixtureDefModel;
import info.u250.c2d.box2d.model.b2JointDefModel;
import info.u250.c2d.box2d.model.fixture.b2CircleFixtureDefModel;
import info.u250.c2d.box2d.model.fixture.b2RectangleFixtureDefModel;
import info.u250.c2d.box2deditor.adapter.PolygonFixtureDefModel;
import info.u250.c2d.box2deditor.adapter.SceneModelAdapter;
import info.u250.c2d.box2deditor.gdx.PhysicalWorld;
import info.u250.c2d.box2deditor.gdx.support.BuildWorld;
import info.u250.c2d.box2deditor.gdx.support.Geometry;
import info.u250.c2d.box2deditor.ui.Binder;
import info.u250.c2d.box2deditor.ui.util.DefCellRenderer;
import info.u250.c2d.box2deditor.ui.util.DefListModel;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import com.badlogic.gdx.math.Vector2;
public class BodyDefPropertiesPanel extends AbstractBindablePropertiesPanel {
private static final long serialVersionUID = -2860320186841083760L;
private JSpinner spinnerAngularVelocity;
private JSpinner spinnerAngularDamping;
private JTextField textName;
private JCheckBox chckbxAwake;
private JSpinner spinnerAngle;
private JSpinner spinnerPositionX;
private JCheckBox chckbxBullet;
private JSpinner spinnerLinearDamping;
private JCheckBox chckbxActive;
private JSpinner spinnerGravityScale;
private JSpinner spinnerPositionY;
private JCheckBox chckbxFixdrotation;
private JCheckBox chckbxAllowsleep;
private JSpinner spinnerLinearVelocityY;
private JSpinner spinnerLinearVelocityX;
private JComboBox comboBox;
/**
* @wbp.nonvisual location=333,527
*/
private final JList fixtureList;
/**
* Create the panel.
*/
public BodyDefPropertiesPanel() {
setLayout(new BorderLayout(0, 0));
JScrollPane scrollPane = new JScrollPane();
add(scrollPane, BorderLayout.CENTER);
JPanel mainPanel = new JPanel();
scrollPane.setViewportView(mainPanel);
GridBagLayout gbl_mainPanel = new GridBagLayout();
gbl_mainPanel.columnWidths = new int[]{0, 0};
gbl_mainPanel.rowHeights = new int[]{0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
gbl_mainPanel.columnWeights = new double[]{ 0, 1.0};
gbl_mainPanel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
mainPanel.setLayout(gbl_mainPanel);
JLabel lblMark = new JLabel("Mark:");
GridBagConstraints gbc_lblMark = new GridBagConstraints();
gbc_lblMark.anchor = GridBagConstraints.EAST;
gbc_lblMark.insets = new Insets(0, 0, 5, 5);
gbc_lblMark.gridx = 0;
gbc_lblMark.gridy = 0;
mainPanel.add(lblMark, gbc_lblMark);
txtMark = new JTextField();
GridBagConstraints gbc_txtMark = new GridBagConstraints();
gbc_txtMark.insets = new Insets(0, 0, 5, 0);
gbc_txtMark.fill = GridBagConstraints.HORIZONTAL;
gbc_txtMark.gridx = 1;
gbc_txtMark.gridy = 0;
mainPanel.add(txtMark, gbc_txtMark);
txtMark.setColumns(10);
JLabel lblName = new JLabel("Name:");
lblName.setIcon(new ImageIcon(BodyDefPropertiesPanel.class.getResource("/info/u250/c2d/box2deditor/ui/res/info.png")));
GridBagConstraints gbc_lblName = new GridBagConstraints();
gbc_lblName.insets = new Insets(0, 0, 5, 5);
gbc_lblName.gridx = 0;
gbc_lblName.gridy = 1;
mainPanel.add(lblName, gbc_lblName);
textName = new JTextField();
textName.setColumns(10);
GridBagConstraints gbc_textName = new GridBagConstraints();
gbc_textName.fill = GridBagConstraints.HORIZONTAL;
gbc_textName.insets = new Insets(0, 0, 5, 0);
gbc_textName.gridx = 1;
gbc_textName.gridy = 1;
mainPanel.add(textName, gbc_textName);
JLabel lblIsstatic = new JLabel("bodyType:");
GridBagConstraints gbc_lblIsstatic = new GridBagConstraints();
gbc_lblIsstatic.anchor = GridBagConstraints.EAST;
gbc_lblIsstatic.insets = new Insets(0, 0, 5, 5);
gbc_lblIsstatic.gridx = 0;
gbc_lblIsstatic.gridy = 2;
mainPanel.add(lblIsstatic, gbc_lblIsstatic);
comboBox = new JComboBox();
comboBox.setModel(new DefaultComboBoxModel(new String[] {"StaticBody", "KinematicBody", "DynamicBody"}));
comboBox.setSelectedIndex(2);
GridBagConstraints gbc_comboBox = new GridBagConstraints();
gbc_comboBox.insets = new Insets(0, 0, 5, 0);
gbc_comboBox.fill = GridBagConstraints.HORIZONTAL;
gbc_comboBox.gridx = 1;
gbc_comboBox.gridy = 2;
mainPanel.add(comboBox, gbc_comboBox);
JLabel lblPositionx = new JLabel("positionX:");
GridBagConstraints gbc_lblPositionx = new GridBagConstraints();
gbc_lblPositionx.insets = new Insets(0, 0, 5, 5);
gbc_lblPositionx.gridx = 0;
gbc_lblPositionx.gridy = 3;
mainPanel.add(lblPositionx, gbc_lblPositionx);
spinnerPositionX = new JSpinner();
spinnerPositionX.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1)));
GridBagConstraints gbc_spinnerPostionX = new GridBagConstraints();
gbc_spinnerPostionX.fill = GridBagConstraints.HORIZONTAL;
gbc_spinnerPostionX.insets = new Insets(0, 0, 5, 0);
gbc_spinnerPostionX.gridx = 1;
gbc_spinnerPostionX.gridy = 3;
mainPanel.add(spinnerPositionX, gbc_spinnerPostionX);
JLabel lblPositiony = new JLabel("positionY:");
GridBagConstraints gbc_lblPositiony = new GridBagConstraints();
gbc_lblPositiony.insets = new Insets(0, 0, 5, 5);
gbc_lblPositiony.gridx = 0;
gbc_lblPositiony.gridy = 4;
mainPanel.add(lblPositiony, gbc_lblPositiony);
spinnerPositionY = new JSpinner();
spinnerPositionY.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1)));
GridBagConstraints gbc_spinnerPositionY = new GridBagConstraints();
gbc_spinnerPositionY.fill = GridBagConstraints.HORIZONTAL;
gbc_spinnerPositionY.insets = new Insets(0, 0, 5, 0);
gbc_spinnerPositionY.gridx = 1;
gbc_spinnerPositionY.gridy = 4;
mainPanel.add(spinnerPositionY, gbc_spinnerPositionY);
JLabel lblAngle = new JLabel("Degrees:");
GridBagConstraints gbc_lblAngle = new GridBagConstraints();
gbc_lblAngle.insets = new Insets(0, 0, 5, 5);
gbc_lblAngle.gridx = 0;
gbc_lblAngle.gridy = 5;
mainPanel.add(lblAngle, gbc_lblAngle);
spinnerAngle = new JSpinner();
spinnerAngle.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1)));
GridBagConstraints gbc_spinnerAngle = new GridBagConstraints();
gbc_spinnerAngle.fill = GridBagConstraints.HORIZONTAL;
gbc_spinnerAngle.anchor = GridBagConstraints.WEST;
gbc_spinnerAngle.insets = new Insets(0, 0, 5, 0);
gbc_spinnerAngle.gridx = 1;
gbc_spinnerAngle.gridy = 5;
mainPanel.add(spinnerAngle, gbc_spinnerAngle);
JLabel lblLinearvelocityx = new JLabel("linearVelocityX:");
GridBagConstraints gbc_lblLinearvelocityx = new GridBagConstraints();
gbc_lblLinearvelocityx.insets = new Insets(0, 0, 5, 5);
gbc_lblLinearvelocityx.gridx = 0;
gbc_lblLinearvelocityx.gridy = 6;
mainPanel.add(lblLinearvelocityx, gbc_lblLinearvelocityx);
spinnerLinearVelocityX = new JSpinner();
spinnerLinearVelocityX.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1)));
GridBagConstraints gbc_spinnerLinearVelocityX = new GridBagConstraints();
gbc_spinnerLinearVelocityX.fill = GridBagConstraints.HORIZONTAL;
gbc_spinnerLinearVelocityX.insets = new Insets(0, 0, 5, 0);
gbc_spinnerLinearVelocityX.gridx = 1;
gbc_spinnerLinearVelocityX.gridy = 6;
mainPanel.add(spinnerLinearVelocityX, gbc_spinnerLinearVelocityX);
JLabel lblLinearvelocityy = new JLabel("linearVelocityY:");
GridBagConstraints gbc_lblLinearvelocityy = new GridBagConstraints();
gbc_lblLinearvelocityy.insets = new Insets(0, 0, 5, 5);
gbc_lblLinearvelocityy.gridx = 0;
gbc_lblLinearvelocityy.gridy = 7;
mainPanel.add(lblLinearvelocityy, gbc_lblLinearvelocityy);
spinnerLinearVelocityY = new JSpinner();
spinnerLinearVelocityY.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1)));
GridBagConstraints gbc_spinnerLinearVelocityY = new GridBagConstraints();
gbc_spinnerLinearVelocityY.fill = GridBagConstraints.HORIZONTAL;
gbc_spinnerLinearVelocityY.insets = new Insets(0, 0, 5, 0);
gbc_spinnerLinearVelocityY.gridx = 1;
gbc_spinnerLinearVelocityY.gridy = 7;
mainPanel.add(spinnerLinearVelocityY, gbc_spinnerLinearVelocityY);
JLabel lblAngularvelocity = new JLabel("AngularVelocity:");
GridBagConstraints gbc_lblAngularvelocity = new GridBagConstraints();
gbc_lblAngularvelocity.insets = new Insets(0, 0, 5, 5);
gbc_lblAngularvelocity.gridx = 0;
gbc_lblAngularvelocity.gridy = 8;
mainPanel.add(lblAngularvelocity, gbc_lblAngularvelocity);
spinnerAngularVelocity = new JSpinner();
spinnerAngularVelocity.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1)));
GridBagConstraints gbc_spinnerAngularVelocity = new GridBagConstraints();
gbc_spinnerAngularVelocity.fill = GridBagConstraints.HORIZONTAL;
gbc_spinnerAngularVelocity.anchor = GridBagConstraints.WEST;
gbc_spinnerAngularVelocity.insets = new Insets(0, 0, 5, 0);
gbc_spinnerAngularVelocity.gridx = 1;
gbc_spinnerAngularVelocity.gridy = 8;
mainPanel.add(spinnerAngularVelocity, gbc_spinnerAngularVelocity);
JLabel lblLineardamping = new JLabel("LinearDamping:");
GridBagConstraints gbc_lblLineardamping = new GridBagConstraints();
gbc_lblLineardamping.insets = new Insets(0, 0, 5, 5);
gbc_lblLineardamping.gridx = 0;
gbc_lblLineardamping.gridy = 9;
mainPanel.add(lblLineardamping, gbc_lblLineardamping);
spinnerLinearDamping = new JSpinner();
spinnerLinearDamping.setModel(new SpinnerNumberModel(new Float(0), new Float(0), new Float(1), new Float(0.1)));
GridBagConstraints gbc_spinnerLinearDamping = new GridBagConstraints();
gbc_spinnerLinearDamping.fill = GridBagConstraints.HORIZONTAL;
gbc_spinnerLinearDamping.insets = new Insets(0, 0, 5, 0);
gbc_spinnerLinearDamping.gridx = 1;
gbc_spinnerLinearDamping.gridy = 9;
mainPanel.add(spinnerLinearDamping, gbc_spinnerLinearDamping);
JLabel lblAngulardamping = new JLabel("AngularDamping:");
GridBagConstraints gbc_lblAngulardamping = new GridBagConstraints();
gbc_lblAngulardamping.insets = new Insets(0, 0, 5, 5);
gbc_lblAngulardamping.gridx = 0;
gbc_lblAngulardamping.gridy = 10;
mainPanel.add(lblAngulardamping, gbc_lblAngulardamping);
spinnerAngularDamping = new JSpinner();
spinnerAngularDamping.setModel(new SpinnerNumberModel(new Float(0), new Float(0), new Float(1), new Float(0.1)));
GridBagConstraints gbc_spinnerAngularDamping = new GridBagConstraints();
gbc_spinnerAngularDamping.fill = GridBagConstraints.HORIZONTAL;
gbc_spinnerAngularDamping.insets = new Insets(0, 0, 5, 0);
gbc_spinnerAngularDamping.gridx = 1;
gbc_spinnerAngularDamping.gridy = 10;
mainPanel.add(spinnerAngularDamping, gbc_spinnerAngularDamping);
JLabel lblAllowsleep = new JLabel("AllowSleep:");
GridBagConstraints gbc_lblAllowsleep = new GridBagConstraints();
gbc_lblAllowsleep.insets = new Insets(0, 0, 5, 5);
gbc_lblAllowsleep.gridx = 0;
gbc_lblAllowsleep.gridy = 11;
mainPanel.add(lblAllowsleep, gbc_lblAllowsleep);
chckbxAllowsleep = new JCheckBox("AllowSleep");
chckbxAllowsleep.setSelected(true);
GridBagConstraints gbc_chckbxAllowsleep = new GridBagConstraints();
gbc_chckbxAllowsleep.anchor = GridBagConstraints.WEST;
gbc_chckbxAllowsleep.insets = new Insets(0, 0, 5, 0);
gbc_chckbxAllowsleep.gridx = 1;
gbc_chckbxAllowsleep.gridy = 11;
mainPanel.add(chckbxAllowsleep, gbc_chckbxAllowsleep);
JLabel lblAwake = new JLabel("Awake:");
GridBagConstraints gbc_lblAwake = new GridBagConstraints();
gbc_lblAwake.insets = new Insets(0, 0, 5, 5);
gbc_lblAwake.gridx = 0;
gbc_lblAwake.gridy = 12;
mainPanel.add(lblAwake, gbc_lblAwake);
chckbxAwake = new JCheckBox("Awake");
chckbxAwake.setSelected(true);
GridBagConstraints gbc_chckbxAwake = new GridBagConstraints();
gbc_chckbxAwake.anchor = GridBagConstraints.WEST;
gbc_chckbxAwake.insets = new Insets(0, 0, 5, 0);
gbc_chckbxAwake.gridx = 1;
gbc_chckbxAwake.gridy = 12;
mainPanel.add(chckbxAwake, gbc_chckbxAwake);
JLabel lblFixedrotation = new JLabel("FixedRotation:");
GridBagConstraints gbc_lblFixedrotation = new GridBagConstraints();
gbc_lblFixedrotation.insets = new Insets(0, 0, 5, 5);
gbc_lblFixedrotation.gridx = 0;
gbc_lblFixedrotation.gridy = 13;
mainPanel.add(lblFixedrotation, gbc_lblFixedrotation);
chckbxFixdrotation = new JCheckBox("FixdRotation");
GridBagConstraints gbc_chckbxFixdrotation = new GridBagConstraints();
gbc_chckbxFixdrotation.anchor = GridBagConstraints.WEST;
gbc_chckbxFixdrotation.insets = new Insets(0, 0, 5, 0);
gbc_chckbxFixdrotation.gridx = 1;
gbc_chckbxFixdrotation.gridy = 13;
mainPanel.add(chckbxFixdrotation, gbc_chckbxFixdrotation);
JLabel lblBullet = new JLabel("Bullet:");
GridBagConstraints gbc_lblBullet = new GridBagConstraints();
gbc_lblBullet.insets = new Insets(0, 0, 5, 5);
gbc_lblBullet.gridx = 0;
gbc_lblBullet.gridy = 14;
mainPanel.add(lblBullet, gbc_lblBullet);
chckbxBullet = new JCheckBox("Bullet");
GridBagConstraints gbc_chckbxBullet = new GridBagConstraints();
gbc_chckbxBullet.anchor = GridBagConstraints.WEST;
gbc_chckbxBullet.insets = new Insets(0, 0, 5, 0);
gbc_chckbxBullet.gridx = 1;
gbc_chckbxBullet.gridy = 14;
mainPanel.add(chckbxBullet, gbc_chckbxBullet);
JLabel lblActive = new JLabel("Active:");
GridBagConstraints gbc_lblActive = new GridBagConstraints();
gbc_lblActive.insets = new Insets(0, 0, 5, 5);
gbc_lblActive.gridx = 0;
gbc_lblActive.gridy = 15;
mainPanel.add(lblActive, gbc_lblActive);
chckbxActive = new JCheckBox("Active");
chckbxActive.setSelected(true);
GridBagConstraints gbc_chckbxActive = new GridBagConstraints();
gbc_chckbxActive.anchor = GridBagConstraints.WEST;
gbc_chckbxActive.insets = new Insets(0, 0, 5, 0);
gbc_chckbxActive.gridx = 1;
gbc_chckbxActive.gridy = 15;
mainPanel.add(chckbxActive, gbc_chckbxActive);
JLabel lblNewLabel = new JLabel("GravityScale:");
GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
gbc_lblNewLabel.gridx = 0;
gbc_lblNewLabel.gridy = 16;
mainPanel.add(lblNewLabel, gbc_lblNewLabel);
spinnerGravityScale = new JSpinner();
spinnerGravityScale.setModel(new SpinnerNumberModel(new Float(1), new Float(0), new Float(10), new Float(1)));
GridBagConstraints gbc_spinnerGravityScale = new GridBagConstraints();
gbc_spinnerGravityScale.fill = GridBagConstraints.HORIZONTAL;
gbc_spinnerGravityScale.insets = new Insets(0, 0, 5, 0);
gbc_spinnerGravityScale.gridx = 1;
gbc_spinnerGravityScale.gridy = 16;
mainPanel.add(spinnerGravityScale, gbc_spinnerGravityScale);
JScrollPane scrollPane_1 = new JScrollPane();
scrollPane_1.setPreferredSize(new Dimension(100,200));
GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
gbc_scrollPane_1.fill = GridBagConstraints.BOTH;
gbc_scrollPane_1.gridx = 0;
gbc_scrollPane_1.gridy = 17;
gbc_scrollPane_1.gridwidth = 2;
mainPanel.add(scrollPane_1, gbc_scrollPane_1);
fixtureList = new JList();
scrollPane_1.setViewportView(fixtureList);
JPopupMenu popupMenu = new JPopupMenu();
addPopup(fixtureList, popupMenu);
defListModel = new DefListModel();
fixtureList.setModel(defListModel);
fixtureList.setCellRenderer(new DefCellRenderer());
}
DefListModel defListModel;
@Override
public Class<b2BodyDefModel> getType() {
return b2BodyDefModel.class;
}
private void addPopup(Component component, final JPopupMenu popup) {
component.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if(SwingUtilities.isRightMouseButton(e) ){
fixtureList.setSelectedIndex(fixtureList.locationToIndex(e.getPoint()));
}
if (e.isPopupTrigger()) {
showMenu(e);
}
}
public void mouseReleased(MouseEvent e) {
if(SwingUtilities.isRightMouseButton(e) ){
fixtureList.setSelectedIndex(fixtureList.locationToIndex(e.getPoint()));
}
if (e.isPopupTrigger()) {
showMenu(e);
}
}
private void showMenu(MouseEvent e) {
popup.removeAll();
SceneModelAdapter data = PhysicalWorld.MODEL;
JMenu mnAdd = new JMenu("Add Fixture");
mnAdd.setFont(new Font(mnAdd.getFont().getName(),Font.PLAIN,24));
for(final b2FixtureDefModel m2:data.fixtureDefModels){
JMenuItem item = new JMenuItem(m2.name, new ImageIcon(this.getClass().getResource("/info/u250/c2d/box2deditor/ui/res/"+m2.getClass().getSimpleName()+".png")));
if(defListModel.contains(m2)){
item.setEnabled(false);
}else{
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
b2BodyDefModel model = b2BodyDefModel.class.cast(object);
model.fixtures.add(m2);
doBinder();
rebuildBody();
}
});
}
mnAdd.add(item);
}
mnAdd.setIcon(new ImageIcon(BodyDefPropertiesPanel.class.getResource("/info/u250/c2d/box2deditor/ui/res/add-icon.png")));
popup.add(mnAdd);
JMenuItem mntmDeleteFixture = new JMenuItem("Delete Fixture");
mntmDeleteFixture.setFont(new Font(mnAdd.getFont().getName(),Font.PLAIN,24));
mntmDeleteFixture.setIcon(new ImageIcon(BodyDefPropertiesPanel.class.getResource("/info/u250/c2d/box2deditor/ui/res/remove-icon.png")));
if(fixtureList.getSelectedIndex()==-1){
mntmDeleteFixture.setEnabled(false);
}else{
mntmDeleteFixture.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
b2BodyDefModel model = b2BodyDefModel.class.cast(object);
model.fixtures.remove(fixtureList.getSelectedValue());
doBinder();
rebuildBody();
}
});
}
popup.add(mntmDeleteFixture);
popup.show(e.getComponent(), e.getX(), e.getY());
}
});
}
Vector2 lower = new Vector2();
Vector2 upper = new Vector2();
private JTextField txtMark;
@Override
public Binder getBinder(Object obj, String name, JComponent widget) {
return new Binder(obj,name,widget) {
@Override
protected void postSolve() {
if(null == object)return ;
b2BodyDefModel b2Body = b2BodyDefModel.class.cast(object);
//the sprite offset~ and the width , height
lower.set(0,0);
upper.set(0, 0);
for(b2FixtureDefModel def:b2Body.fixtures){
if(def instanceof b2CircleFixtureDefModel){
float r = ((b2CircleFixtureDefModel) def).radius;
lower.x = Math.min(lower.x, -r);
lower.y = Math.min(lower.y, -r);
upper.x = Math.max(upper.x, r);
upper.y = Math.max(upper.y, r);
}else if(def instanceof b2RectangleFixtureDefModel){
b2RectangleFixtureDefModel o = (b2RectangleFixtureDefModel)def;
float w = o.width;
float h = o.height;
lower.x = Math.min(lower.x,-w/2);
lower.y = Math.min(lower.y,-h/2);
upper.x = Math.max(upper.x, w/2);
upper.y = Math.max(upper.y, h/2);
}else if(def instanceof PolygonFixtureDefModel){
PolygonFixtureDefModel o = (PolygonFixtureDefModel)def;
for(Vector2 v:o.polygon){
lower.x = Math.min(lower.x, v.x);
lower.y = Math.min(lower.y, v.y);
upper.x = Math.max(upper.x, v.x);
upper.y = Math.max(upper.y, v.y);
}
}
}
//now set the width , height and the center
b2Body.drawableWidth = Math.abs(upper.x-lower.x);
b2Body.drawableHeight = Math.abs(upper.y-lower.y);
b2Body.drawableOffsetX= -lower.x;
b2Body.drawableOffsetY= -lower.y;
rebuildBody();
}
};
}
void rebuildBody(){
b2BodyDefModel b2Body = b2BodyDefModel.class.cast(object);
if(null!=b2Body.body){
PhysicalWorld.WORLD.destroyBody(b2Body.body);
b2Body.body = null;
}
BuildWorld.buildBody(b2Body);
//Ajust the relation joints
for(b2JointDefModel joint:PhysicalWorld.MODEL.jointDefModels){
if(joint.bodyA==object || joint.bodyB==object){
Geometry.ajustJoint(joint);
}
}
}
@Override
public void doBinder() {
b2BodyDefModel object = b2BodyDefModel.class.cast(this.object);
bind(object,"name",textName);
bind(object,"type",comboBox);
bind(object.position,"x",spinnerPositionX);
bind(object.position,"y",spinnerPositionY);
bind(object.linearVelocity,"x",spinnerLinearVelocityX);
bind(object.linearVelocity,"y",spinnerLinearVelocityY);
bind(object,"degrees",spinnerAngle);
bind(object,"angularVelocity",spinnerAngularVelocity);
bind(object,"linearDamping",spinnerLinearDamping);
bind(object,"angularDamping",spinnerAngularDamping);
bind(object,"allowSleep",chckbxAllowsleep);
bind(object,"awake",chckbxAwake);
bind(object,"fixedRotation",chckbxFixdrotation);
bind(object,"bullet",chckbxBullet);
bind(object,"active",chckbxActive);
bind(object,"gravityScale",spinnerGravityScale);
bind(object,"mark",txtMark);
defListModel.clear();
for(b2FixtureDefModel f:object.fixtures){
defListModel.addElement(f);
}
}
}