package com.kartoflane.superluminal2.mvc.controllers;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.widgets.Composite;
import com.kartoflane.superluminal2.components.interfaces.Indexable;
import com.kartoflane.superluminal2.core.LayeredPainter.Layers;
import com.kartoflane.superluminal2.core.Manager;
import com.kartoflane.superluminal2.events.SLEvent;
import com.kartoflane.superluminal2.ftl.GibObject;
import com.kartoflane.superluminal2.mvc.View;
import com.kartoflane.superluminal2.mvc.models.ObjectModel;
import com.kartoflane.superluminal2.mvc.views.GibView;
import com.kartoflane.superluminal2.tools.Tool.Tools;
import com.kartoflane.superluminal2.ui.GibControlsMenu;
import com.kartoflane.superluminal2.ui.GibPropContainer.PropControls;
import com.kartoflane.superluminal2.ui.OverviewWindow;
import com.kartoflane.superluminal2.ui.ShipContainer;
import com.kartoflane.superluminal2.ui.sidebar.data.DataComposite;
import com.kartoflane.superluminal2.ui.sidebar.data.GibDataComposite;
public class GibController extends ImageController implements Indexable, Comparable<GibController> {
private GibController(ShipContainer container, ObjectModel model, GibView view) {
super(container.getShipController(), model, view);
setModel(model);
setView(view);
setSelectable(true);
setLocModifiable(true);
setBounded(false);
setCollidable(false);
setDeletable(true);
}
@Override
public GibObject getGameObject() {
return (GibObject) getModel().getGameObject();
}
public static GibController newInstance(ShipContainer shipContainer, GibObject gib) {
ObjectModel model = new ObjectModel(gib);
GibView view = new GibView();
GibController controller = new GibController(shipContainer, model, view);
controller.setImage(gib.getImagePath());
OverviewWindow ow = OverviewWindow.getInstance();
controller.addListener(SLEvent.DELETE, ow);
controller.addListener(SLEvent.DISPOSE, ow);
return controller;
}
protected GibView getView() {
return (GibView) view;
}
@Override
public void setView(View view) {
super.setView(view);
removeFromPainter();
addToPainterBottom(Layers.GIBS);
updateView();
}
public int getId() {
return getGameObject().getId();
}
public void setId(int index) {
getGameObject().setId(index);
}
@Override
public DataComposite getDataComposite(Composite parent) {
return new GibDataComposite(parent, this);
}
public void setDirectionMin(int angle) {
getGameObject().setDirectionMin(angle);
}
public int getDirectionMin() {
return getGameObject().getDirectionMin();
}
public void setDirectionMax(int angle) {
getGameObject().setDirectionMax(angle);
}
public int getDirectionMax() {
return getGameObject().getDirectionMax();
}
public void setLinearVelocityMin(double d) {
getGameObject().setVelocityMin(d);
}
public double getLinearVelocityMin() {
return getGameObject().getVelocityMin();
}
public void setLinearVelocityMax(double vel) {
getGameObject().setVelocityMax(vel);
}
public double getLinearVelocityMax() {
return getGameObject().getVelocityMax();
}
public void setAngularVelocityMin(double vel) {
getGameObject().setAngularMin(vel);
}
public double getAngularVelocityMin() {
return getGameObject().getAngularMin();
}
public void setAngularVelocityMax(double vel) {
getGameObject().setAngularMax(vel);
}
public double getAngularVelocityMax() {
return getGameObject().getAngularMax();
}
@Override
public void mouseUp(MouseEvent e) {
if (Manager.getSelectedToolId() == Tools.POINTER && e.button == 3 &&
selected && contains(e.x, e.y)) {
// Open prop controls selection menu
ShipContainer container = Manager.getCurrentShip();
GibControlsMenu propMenu = new GibControlsMenu(container.getParent().getShell());
PropControls result = propMenu.open();
if (result != null) {
container.getGibContainer().showControls(result);
container.getParent().updateSidebarContent();
}
} else {
super.mouseUp(e);
}
}
@Override
public int compareTo(GibController o) {
return getGameObject().compareTo(o.getGameObject());
}
}