package com.uwsoft.editor.view.ui.properties.panels; import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Array; import com.kotcrab.vis.ui.util.Validators; import com.kotcrab.vis.ui.widget.*; import com.uwsoft.editor.Overlap2DFacade; import com.uwsoft.editor.event.CheckBoxChangeListener; import com.uwsoft.editor.event.KeyboardListener; import com.uwsoft.editor.event.SelectBoxChangeListener; import com.uwsoft.editor.view.ui.properties.UIRemovableProperties; import java.util.HashMap; /** * Created by CyberJoe on 7/5/2015. */ public class UIPhysicsProperties extends UIRemovableProperties { public static final String prefix = "com.uwsoft.editor.view.ui.properties.panels.UIPhysicsProperties"; public static final String CLOSE_CLICKED = prefix + ".CLOSE_CLICKED"; private HashMap<Integer, String> bodyTypes = new HashMap<>(); private VisSelectBox<String> bodyTypeBox; private VisValidatableTextField massField; private VisValidatableTextField centerOfMassXField; private VisValidatableTextField centerOfMassYField; private VisValidatableTextField rotationalIntertiaField; private VisValidatableTextField dumpingField; private VisValidatableTextField gravityScaleField; private VisValidatableTextField densityField; private VisValidatableTextField frictionField; private VisValidatableTextField restitutionField; private VisCheckBox allowSleepBox; private VisCheckBox awakeBox; private VisCheckBox bulletBox; private VisCheckBox sensor; public UIPhysicsProperties() { super("Physics Component"); bodyTypes.put(0, "STATIC"); bodyTypes.put(1, "KINEMATIC"); bodyTypes.put(2, "DYNAMIC"); initView(); initListeners(); } public void initView() { bodyTypeBox = new VisSelectBox<>("white"); Array<String> types = new Array<>(); bodyTypes.values().forEach(types::add); bodyTypeBox.setItems(types); Validators.FloatValidator floatValidator = new Validators.FloatValidator(); massField = createValidableTextField(floatValidator); centerOfMassXField = createValidableTextField(floatValidator); centerOfMassYField = createValidableTextField(floatValidator); rotationalIntertiaField = createValidableTextField(floatValidator); dumpingField = createValidableTextField(floatValidator); gravityScaleField = createValidableTextField(floatValidator); densityField = createValidableTextField(floatValidator); frictionField = createValidableTextField(floatValidator); restitutionField = createValidableTextField(floatValidator); allowSleepBox = new VisCheckBox("Allow Sleep"); awakeBox = new VisCheckBox("Awake"); bulletBox = new VisCheckBox("Bullet"); sensor = new VisCheckBox("Sensor"); mainTable.add(new VisLabel("Body type:", Align.right)).padRight(5).colspan(2).fillX(); mainTable.add(bodyTypeBox).width(100).colspan(2); mainTable.row().padTop(5); mainTable.add(new VisLabel("Mass:", Align.right)).padRight(5).colspan(2).fillX(); mainTable.add(massField).width(100).colspan(2); mainTable.row().padTop(5); mainTable.add(new VisLabel("Center of Mass:", Align.right)).padRight(5).colspan(2).fillX(); mainTable.add(centerOfMassXField).width(50); mainTable.add(centerOfMassYField).width(50); mainTable.row().padTop(5); mainTable.add(new VisLabel("Rotational Inertia:", Align.right)).padRight(5).colspan(2).fillX(); mainTable.add(rotationalIntertiaField).width(100).colspan(2); mainTable.row().padTop(5); mainTable.add(new VisLabel("Dumping:", Align.right)).padRight(5).colspan(2).fillX(); mainTable.add(dumpingField).width(100).colspan(2); mainTable.row().padTop(5); mainTable.add(new VisLabel("Gravity Scale:", Align.right)).padRight(5).colspan(2).fillX(); mainTable.add(gravityScaleField).width(100).colspan(2); mainTable.row().padTop(5); mainTable.add(new VisLabel("Density:", Align.right)).padRight(5).colspan(2).fillX(); mainTable.add(densityField).width(100).colspan(2); mainTable.row().padTop(5); mainTable.add(new VisLabel("Friction:", Align.right)).padRight(5).colspan(2).fillX(); mainTable.add(frictionField).width(100).colspan(2); mainTable.row().padTop(5); mainTable.add(new VisLabel("Restitution:", Align.right)).padRight(5).colspan(2).fillX(); mainTable.add(restitutionField).width(100).colspan(2); mainTable.row().padTop(5); VisTable bottomTable = new VisTable(); bottomTable.add(allowSleepBox); bottomTable.add(awakeBox); bottomTable.add(bulletBox); bottomTable.row(); bottomTable.add(sensor).colspan(3).left(); mainTable.add(bottomTable).padBottom(5).colspan(4); mainTable.row().padTop(5); } private void initListeners() { bodyTypeBox.addListener(new SelectBoxChangeListener(getUpdateEventName())); massField.addListener(new KeyboardListener(getUpdateEventName())); centerOfMassXField.addListener(new KeyboardListener(getUpdateEventName())); centerOfMassYField.addListener(new KeyboardListener(getUpdateEventName())); rotationalIntertiaField.addListener(new KeyboardListener(getUpdateEventName())); dumpingField.addListener(new KeyboardListener(getUpdateEventName())); gravityScaleField.addListener(new KeyboardListener(getUpdateEventName())); densityField.addListener(new KeyboardListener(getUpdateEventName())); frictionField.addListener(new KeyboardListener(getUpdateEventName())); restitutionField.addListener(new KeyboardListener(getUpdateEventName())); allowSleepBox.addListener(new CheckBoxChangeListener(getUpdateEventName())); awakeBox.addListener(new CheckBoxChangeListener(getUpdateEventName())); bulletBox.addListener(new CheckBoxChangeListener(getUpdateEventName())); sensor.addListener(new CheckBoxChangeListener(getUpdateEventName())); } public int getBodyType() { for(Integer key: bodyTypes.keySet()) { if(bodyTypes.get(key).equals(bodyTypeBox.getSelected())) { return key; } } return 0; } public void setBodyType(int type) { bodyTypeBox.setSelected(bodyTypes.get(type)); } public VisValidatableTextField getMassField() { return massField; } public VisValidatableTextField getCenterOfMassXField() { return centerOfMassXField; } public VisValidatableTextField getCenterOfMassYField() { return centerOfMassYField; } public VisValidatableTextField getRotationalIntertiaField() { return rotationalIntertiaField; } public VisValidatableTextField getDumpingField() { return dumpingField; } public VisValidatableTextField getGravityScaleField() { return gravityScaleField; } public VisValidatableTextField getDensityField() { return densityField; } public VisValidatableTextField getFrictionField() { return frictionField; } public VisValidatableTextField getRestitutionField() { return restitutionField; } public VisCheckBox getAllowSleepBox() { return allowSleepBox; } public VisCheckBox getAwakeBox() { return awakeBox; } public VisCheckBox getBulletBox() { return bulletBox; } public VisCheckBox getSensorBox() { return sensor; } @Override public void onClose() { Overlap2DFacade.getInstance().sendNotification(CLOSE_CLICKED); } }