package com.kartoflane.superluminal2.mvc.controllers; import com.kartoflane.superluminal2.components.interfaces.Alias; import com.kartoflane.superluminal2.ftl.GameObject; import com.kartoflane.superluminal2.mvc.Model; import com.kartoflane.superluminal2.mvc.models.ObjectModel; public abstract class ObjectController extends AbstractController implements Alias { public abstract GameObject getGameObject(); public void setAlias(String alias) { GameObject object = getGameObject(); if (object instanceof Alias) { ((Alias) object).setAlias(alias); } else throw new ClassCastException("This controller's underlying game object doesn't impelment Alias interface."); } public String getAlias() { GameObject object = getGameObject(); if (object == null) return null; if (object instanceof Alias) { return ((Alias) object).getAlias(); } else throw new ClassCastException("This controller's underlying game object doesn't impelment Alias interface."); } @Override protected ObjectModel getModel() { return (ObjectModel) model; } @Override public void setModel(Model model) { if (model == null) throw new IllegalArgumentException("Argument must not be null."); if (model instanceof ObjectModel == false) throw new IllegalArgumentException("Argument must be an ObjectModel."); this.model = (ObjectModel) model; getModel().getGameObject().setModel(getModel()); } @Override public void delete() { getGameObject().delete(); super.delete(); } @Override public void restore() { getGameObject().restore(); super.restore(); } public boolean isDeleted() { return getGameObject().isDeleted(); } public boolean isDisposed() { return model.isDisposed(); } }