package com.uwsoft.editor.view.ui.properties.panels; import com.badlogic.ashley.core.Entity; import com.badlogic.gdx.math.Vector2; import com.commons.MsgAPI; import com.puremvc.patterns.observer.Notification; import com.uwsoft.editor.Overlap2DFacade; import com.uwsoft.editor.controller.commands.RemoveComponentFromItemCommand; import com.uwsoft.editor.renderer.components.physics.PhysicsBodyComponent; import com.uwsoft.editor.view.ui.properties.UIItemPropertiesMediator; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.math.NumberUtils; /** * Created by CyberJoe on 7/5/2015. */ public class UIPhysicsPropertiesMediator extends UIItemPropertiesMediator<Entity, UIPhysicsProperties> { private static final String TAG = UIPhysicsPropertiesMediator.class.getCanonicalName(); public static final String NAME = TAG; private PhysicsBodyComponent physicsComponent; public UIPhysicsPropertiesMediator() { super(NAME, new UIPhysicsProperties()); } @Override public String[] listNotificationInterests() { String[] defaultNotifications = super.listNotificationInterests(); String[] notificationInterests = new String[]{ UIPhysicsProperties.CLOSE_CLICKED }; return ArrayUtils.addAll(defaultNotifications, notificationInterests); } @Override public void handleNotification(Notification notification) { super.handleNotification(notification); switch (notification.getName()) { case UIPhysicsProperties.CLOSE_CLICKED: Overlap2DFacade.getInstance().sendNotification(MsgAPI.ACTION_REMOVE_COMPONENT, RemoveComponentFromItemCommand.payload(observableReference, PhysicsBodyComponent.class)); break; } } @Override protected void translateObservableDataToView(Entity item) { physicsComponent = item.getComponent(PhysicsBodyComponent.class); viewComponent.setBodyType(physicsComponent.bodyType); viewComponent.getMassField().setText(physicsComponent.mass + ""); viewComponent.getCenterOfMassXField().setText(physicsComponent.centerOfMass.x + ""); viewComponent.getCenterOfMassYField().setText(physicsComponent.centerOfMass.y + ""); viewComponent.getRotationalIntertiaField().setText(physicsComponent.rotationalInertia + ""); viewComponent.getDumpingField().setText(physicsComponent.damping + ""); viewComponent.getGravityScaleField().setText(physicsComponent.gravityScale + ""); viewComponent.getDensityField().setText(physicsComponent.density + ""); viewComponent.getFrictionField().setText(physicsComponent.friction + ""); viewComponent.getRestitutionField().setText(physicsComponent.restitution + ""); viewComponent.getAllowSleepBox().setChecked(physicsComponent.allowSleep); viewComponent.getAwakeBox().setChecked(physicsComponent.awake); viewComponent.getBulletBox().setChecked(physicsComponent.bullet); viewComponent.getSensorBox().setChecked(physicsComponent.sensor); } @Override protected void translateViewToItemData() { physicsComponent = observableReference.getComponent(PhysicsBodyComponent.class); physicsComponent.bodyType = viewComponent.getBodyType(); physicsComponent.mass = NumberUtils.toFloat(viewComponent.getMassField().getText()); physicsComponent.centerOfMass = new Vector2(NumberUtils.toFloat(viewComponent.getCenterOfMassXField().getText()), NumberUtils.toFloat(viewComponent.getCenterOfMassYField().getText())); physicsComponent.rotationalInertia = NumberUtils.toFloat(viewComponent.getRotationalIntertiaField().getText()); physicsComponent.damping = NumberUtils.toFloat(viewComponent.getDumpingField().getText()); physicsComponent.gravityScale = NumberUtils.toFloat(viewComponent.getGravityScaleField().getText()); physicsComponent.density = NumberUtils.toFloat(viewComponent.getDensityField().getText()); physicsComponent.friction = NumberUtils.toFloat(viewComponent.getFrictionField().getText()); physicsComponent.restitution = NumberUtils.toFloat(viewComponent.getRestitutionField().getText()); physicsComponent.allowSleep = viewComponent.getAllowSleepBox().isChecked(); physicsComponent.awake = viewComponent.getAwakeBox().isChecked(); physicsComponent.bullet = viewComponent.getBulletBox().isChecked(); physicsComponent.sensor = viewComponent.getSensorBox().isChecked(); } }