package com.kartoflane.superluminal2.ftl; import java.io.Serializable; import org.eclipse.swt.graphics.Point; import com.kartoflane.superluminal2.components.interfaces.Alias; import com.kartoflane.superluminal2.components.interfaces.Movable; import com.kartoflane.superluminal2.core.Manager; import com.kartoflane.superluminal2.mvc.controllers.ShipController; import com.kartoflane.superluminal2.ui.ShipContainer; public class DoorObject extends GameObject implements Alias, Movable, Serializable { private static final long serialVersionUID = 6051451407440322891L; public static final int DOOR_WIDTH = 27; public static final int DOOR_HEIGHT = 8; private RoomObject leftRoom = null; private RoomObject rightRoom = null; private boolean horizontal = false; private int locX = 0; private int locY = 0; private String alias; public DoorObject() { setDeletable(true); } public DoorObject(boolean horizontal) { this(); setHorizontal(horizontal); } public void update() { if (model == null) throw new IllegalArgumentException("Model must not be null."); ShipController shipC = Manager.getCurrentShip().getShipController(); ShipObject ship = shipC.getGameObject(); locX = (model.getX() - shipC.getX() + ShipContainer.CELL_SIZE / 2) / ShipContainer.CELL_SIZE - ship.getXOffset(); locY = (model.getY() - shipC.getY() + ShipContainer.CELL_SIZE / 2) / ShipContainer.CELL_SIZE - ship.getYOffset(); } /** * Sets the distance from the ship anchor, in grid cells. */ @Override public boolean setLocation(int x, int y) { locX = x; locY = y; return true; } /** * Moves the door by the specified number of grid cells. */ @Override public boolean translate(int dx, int dy) { locX += dx; locY += dy; return true; } /** * @return the distance from the ship anchor, in grid cells. */ @Override public Point getLocation() { return new Point(locX, locY); } @Override public int getX() { return locX; } @Override public int getY() { return locY; } public void setHorizontal(boolean horizontal) { this.horizontal = horizontal; } public boolean isHorizontal() { return horizontal; } @Override public String getAlias() { return alias; } @Override public void setAlias(String alias) { this.alias = alias; } public void setLeftRoom(RoomObject room) { leftRoom = room; } public void setRightRoom(RoomObject room) { rightRoom = room; } public RoomObject getLeftRoom() { return leftRoom; } public RoomObject getRightRoom() { return rightRoom; } /** * Makes sure that the door is not linked to a deleted room. */ public void verifyLinks() { if (leftRoom != null && leftRoom.isDeleted()) setLeftRoom(null); if (rightRoom != null && rightRoom.isDeleted()) setRightRoom(null); } }