com.o2d.pkayjava.editor.view.ui.dialog.PhysicsEditorDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.o2d.pkayjava.editor.view.ui.dialog.PhysicsEditorDialog.java

Source

/*
 * ******************************************************************************
 *  * Copyright 2015 See AUTHORS file.
 *  *
 *  * Licensed under the Apache License, Version 2.0 (the "License");
 *  * you may not use this file except in compliance with the License.
 *  * You may obtain a copy of the License at
 *  *
 *  *   http://www.apache.org/licenses/LICENSE-2.0
 *  *
 *  * Unless required by applicable law or agreed to in writing, software
 *  * distributed under the License is distributed on an "AS IS" BASIS,
 *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  * See the License for the specific language governing permissions and
 *  * limitations under the License.
 *  *****************************************************************************
 */

package com.o2d.pkayjava.editor.view.ui.dialog;

import com.commons.O2DDialog;

import org.apache.commons.lang3.math.NumberUtils;

import com.badlogic.ashley.core.Entity;
import com.badlogic.gdx.math.Vector2;
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.VisCheckBox;
import com.kotcrab.vis.ui.widget.VisLabel;
import com.kotcrab.vis.ui.widget.VisSelectBox;
import com.kotcrab.vis.ui.widget.VisTable;
import com.kotcrab.vis.ui.widget.VisTextButton;
import com.kotcrab.vis.ui.widget.VisValidableTextField;
import com.o2d.pkayjava.editor.event.ClickNotifier;

/**
 * Created by azakhary on 4/28/2015.
 */
public class PhysicsEditorDialog extends O2DDialog {

    private static final String TAG;
    public static final String NAME;

    public static final String SAVE_CLICKED;
    public static final String RETRACE_CLICKED;
    public static final String CLEAR_MESH_CLICKED;
    public static final String CREATE_FRESH_COPY_CLICKED;

    static {
        TAG = PhysicsEditorDialog.class.getName();
        NAME = TAG;
        SAVE_CLICKED = NAME + "." + "SAVE_CLICKED";
        RETRACE_CLICKED = NAME + "." + "RETRACE_CLICKED";
        CLEAR_MESH_CLICKED = NAME + "." + "CLEAR_MESH_CLICKED";
        CREATE_FRESH_COPY_CLICKED = NAME + "." + "CREATE_FRESH_COPY_CLICKED";
    }

    private VisTable mainTable;
    private VisTable controlsTable;
    //private ItemPhysicsEditor itemPhysicsEditor;

    private VisSelectBox<String> bodyTypeBox;
    private VisValidableTextField massField;

    private VisValidableTextField centerOfMassXField;
    private VisValidableTextField centerOfMassYField;
    private VisValidableTextField rotationalIntertiaField;
    private VisValidableTextField dumpingField;
    private VisValidableTextField gravityScaleField;
    private VisValidableTextField densityField;
    private VisValidableTextField frictionField;
    private VisValidableTextField restitutionField;
    private VisCheckBox allowSleepBox;
    private VisCheckBox awakeBox;
    private VisCheckBox bulletBox;
    private VisTextButton saveButton;

    private VisSelectBox<String> poligonyzerBox;
    private VisValidableTextField hullToleranceField;
    private VisValidableTextField alphaToleranceField;
    private VisCheckBox multiPartDetectionBox;
    private VisCheckBox holeDetectionBox;
    private VisTextButton retraceButton;

    private VisTextButton clearMeshButton;
    private VisTextButton createFreshCopyButton;

    private Vector2 dialogStartPosition;

    public PhysicsEditorDialog() {
        super("Physics Editor");
        setModal(true);
        addCloseButton();

        mainTable = new VisTable();
        controlsTable = new VisTable();
        //itemPhysicsEditor = new ItemPhysicsEditor(500, 500);

        initSidePanel();

        mainTable.add(controlsTable).top();
        //mainTable.add(itemPhysicsEditor).top();

        mainTable.row();

        add(mainTable);
        row();

        dialogStartPosition = new Vector2(getX(), getY());
    }

    @Override
    public void act(float delta) {
        float diffX = dialogStartPosition.x - getX();
        float diffY = dialogStartPosition.y - getY();
        if (diffX != 0 || diffY != 0) {
            //itemPhysicsEditor.moveRenderer(diffX, diffY);
            dialogStartPosition.x = getX();
            dialogStartPosition.y = getY();
        }
        super.act(delta);
    }

    private void initSidePanel() {

        initPropertiesUI();
        initMeshUI();
        initRetraceUI();

        initListeners();
    }

    private void initListeners() {
        saveButton.addListener(new ClickNotifier(SAVE_CLICKED));
        retraceButton.addListener(new ClickNotifier(RETRACE_CLICKED));
        clearMeshButton.addListener(new ClickNotifier(CLEAR_MESH_CLICKED));
        createFreshCopyButton.addListener(new ClickNotifier(CREATE_FRESH_COPY_CLICKED));
    }

    private void initPropertiesUI() {

        bodyTypeBox = new VisSelectBox<>("white");
        Array<String> types = new Array<>();
        types.add("STATIC");
        types.add("KINEMATIC");
        types.add("DYNAMIC");
        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");
        saveButton = new VisTextButton("Save");

        controlsTable.add(new VisLabel("Body type:", Align.right)).padRight(5).colspan(2).fillX();
        controlsTable.add(bodyTypeBox).width(120).colspan(2);
        controlsTable.row().padTop(5);

        controlsTable.add(new VisLabel("Mass:", Align.right)).padRight(5).colspan(2).fillX();
        controlsTable.add(massField).width(120).colspan(2);
        controlsTable.row().padTop(5);

        controlsTable.add(new VisLabel("Center of Mass:", Align.right)).padRight(5).colspan(2).fillX();
        controlsTable.add(centerOfMassXField).width(60);
        controlsTable.add(centerOfMassYField).width(60);
        controlsTable.row().padTop(5);

        controlsTable.add(new VisLabel("Rotational Inertia:", Align.right)).padRight(5).colspan(2).fillX();
        controlsTable.add(rotationalIntertiaField).width(120).colspan(2);
        controlsTable.row().padTop(5);

        controlsTable.add(new VisLabel("Dumping:", Align.right)).padRight(5).colspan(2).fillX();
        controlsTable.add(dumpingField).width(120).colspan(2);
        controlsTable.row().padTop(5);

        controlsTable.add(new VisLabel("Gravity Scale:", Align.right)).padRight(5).colspan(2).fillX();
        controlsTable.add(gravityScaleField).width(120).colspan(2);
        controlsTable.row().padTop(5);

        controlsTable.add(new VisLabel("Density:", Align.right)).padRight(5).colspan(2).fillX();
        controlsTable.add(densityField).width(120).colspan(2);
        controlsTable.row().padTop(5);

        controlsTable.add(new VisLabel("Friction:", Align.right)).padRight(5).colspan(2).fillX();
        controlsTable.add(frictionField).width(120).colspan(2);
        controlsTable.row().padTop(5);

        controlsTable.add(new VisLabel("Restitution:", Align.right)).padRight(5).colspan(2).fillX();
        controlsTable.add(restitutionField).width(120).colspan(2);
        controlsTable.row().padTop(5);

        VisTable bottomTable = new VisTable();
        bottomTable.add(allowSleepBox);
        bottomTable.add(awakeBox);
        bottomTable.add(bulletBox);
        controlsTable.add(bottomTable).padBottom(5).colspan(4);
        controlsTable.row().padTop(5);

        controlsTable.add(saveButton).colspan(4).right().padBottom(20);
        controlsTable.row().padTop(5);
    }

    private void initRetraceUI() {
        poligonyzerBox = new VisSelectBox<>("white");
        Array<String> types = new Array<>();
        types.add("BAYAZIT");
        types.add("EWJORDAN");
        poligonyzerBox.setItems(types);

        Validators.FloatValidator floatValidator = new Validators.FloatValidator();

        hullToleranceField = createValidableTextField(floatValidator);
        alphaToleranceField = createValidableTextField(floatValidator);
        multiPartDetectionBox = new VisCheckBox(null);
        holeDetectionBox = new VisCheckBox(null);
        retraceButton = new VisTextButton("Retrace");

        controlsTable.row().padTop(20);
        controlsTable.add(new VisLabel("Polygonizer:", Align.right)).padRight(5).colspan(2).fillX();
        controlsTable.add(poligonyzerBox).width(120).colspan(2);
        controlsTable.row().padTop(5);

        controlsTable.add(new VisLabel("Hull Tolerance:", Align.right)).padRight(5).colspan(2).fillX();
        controlsTable.add(hullToleranceField).width(120).colspan(2);
        controlsTable.row().padTop(5);

        controlsTable.add(new VisLabel("Alpha Tolerance:", Align.right)).padRight(5).colspan(2).fillX();
        controlsTable.add(alphaToleranceField).width(120).colspan(2);
        controlsTable.row().padTop(5);

        controlsTable.add(multiPartDetectionBox).colspan(2).right();
        controlsTable.add(new VisLabel("Multi part detection: ", Align.left)).padLeft(5).colspan(2).fillX();
        controlsTable.row().padTop(5);

        controlsTable.add(holeDetectionBox).colspan(2).right();
        controlsTable.add(new VisLabel("Hole detection: ", Align.left)).padLeft(5).colspan(2).fillX();
        controlsTable.row().padTop(5);

        controlsTable.add(retraceButton).colspan(4).right().padBottom(20);
        controlsTable.row().padTop(5);
    }

    private void initMeshUI() {
        clearMeshButton = new VisTextButton("Clear Mesh");
        createFreshCopyButton = new VisTextButton("Create Fresh Copy");

        controlsTable.add(new VisLabel("Clearing shape does not clone it:", Align.center)).colspan(4).fillX();
        controlsTable.row().padTop(5);
        controlsTable.add(clearMeshButton).padRight(5).colspan(2);
        controlsTable.add(createFreshCopyButton).padRight(5).colspan(2);
        controlsTable.row().padBottom(20);
    }

    public void setItem(Entity item) {
        //itemPhysicsEditor.editItem(item);
    }

    public void setItem(String item) {
        //itemPhysicsEditor.editAsset(item);
    }

    public String getBodyType() {
        return bodyTypeBox.getSelected();
    }

    public void setBodyType(int bodyTypeIndex) {
        bodyTypeBox.setSelectedIndex(bodyTypeIndex);
    }

    public void setBodyType(String bodyType) {
        bodyTypeBox.setSelected(bodyType);
    }

    public String getMass() {
        return massField.getText();
    }

    public void setMass(String mass) {
        massField.setText(mass);
    }

    public Vector2 getCenterOfMass() {
        Vector2 centerOfMass = new Vector2(NumberUtils.toFloat(centerOfMassXField.getText()),
                NumberUtils.toFloat(centerOfMassYField.getText()));
        return centerOfMass;
    }

    public void setCenterOfMass(Vector2 centerOfMass) {
        centerOfMassXField.setText(centerOfMass.x + "");
        centerOfMassYField.setText(centerOfMass.y + "");
    }

    public String getRotationalIntertia() {
        return rotationalIntertiaField.getText();
    }

    public void setRotationalIntertia(String rotationalIntertia) {
        rotationalIntertiaField.setText(rotationalIntertia);
    }

    public String getDumping() {
        return dumpingField.getText();
    }

    public void setDumping(String dumping) {
        dumpingField.setText(dumping);
    }

    public String getGravityScale() {
        return gravityScaleField.getText();
    }

    public void setGravityScale(String gravityScale) {
        this.gravityScaleField.setText(gravityScale);
    }

    public String getDensity() {
        return densityField.getText();
    }

    public void setDensity(String density) {
        densityField.setText(density);
    }

    public String getFriction() {
        return frictionField.getText();
    }

    public void setFriction(String friction) {
        frictionField.setText(friction);
    }

    public String getRestitution() {
        return restitutionField.getText();
    }

    public void setRestitution(String restitution) {
        restitutionField.setText(restitution);
    }

    public String getPoligonyze() {
        return poligonyzerBox.getSelected();
    }

    public void setPoligonyzer(String poligonyzer) {
        poligonyzerBox.setSelected(poligonyzer);
    }

    public String getHullTolerance() {
        return hullToleranceField.getText();
    }

    public void setHullTolerance(String hullTolerance) {
        hullToleranceField.setText(hullTolerance);
    }

    public String getAlphaTolerance() {
        return alphaToleranceField.getText();
    }

    public void setAlphaTolerance(String alphaTolerance) {
        alphaToleranceField.setText(alphaTolerance);
    }

    public boolean isMultiPartDetection() {
        return multiPartDetectionBox.isChecked();
    }

    public void setMultiPartDetection(boolean isMultiPartDetection) {
        multiPartDetectionBox.setChecked(isMultiPartDetection);
    }

    public boolean isHoleDetection() {
        return holeDetectionBox.isChecked();
    }

    public void setHoleDetection(boolean isHoleDetection) {
        holeDetectionBox.setChecked(isHoleDetection);
    }

    public VisTextButton getRetraceButton() {
        return retraceButton;
    }

    public VisTextButton getSaveButton() {
        return saveButton;
    }

    public VisTextButton getClearMeshButton() {
        return clearMeshButton;
    }

    public VisTextButton getCreateFreshCopyButton() {
        return createFreshCopyButton;
    }

    //public ItemPhysicsEditor getItemPhysicsEditor() {
    //    return itemPhysicsEditor;
    // }

    public boolean isAllowSleep() {
        return allowSleepBox.isChecked();
    }

    public void setAllowSleep(boolean isAllowSleep) {
        allowSleepBox.setChecked(isAllowSleep);
    }

    public boolean isAwake() {
        return awakeBox.isChecked();
    }

    public void setAwake(boolean isAwake) {
        awakeBox.setChecked(isAwake);
    }

    public boolean isBullet() {
        return bulletBox.isChecked();
    }

    public void setBullet(boolean isBullet) {
        bulletBox.setChecked(isBullet);
    }
}