package com.ftloverdrive.model.ship;
import com.ftloverdrive.model.NamedProperties;
import com.ftloverdrive.model.OVDModel;
import com.ftloverdrive.model.ship.Coordinatable;
/**
* A console to improve a system's performance while manned by crew.
*
* For every system, one or more stations are associated with it.
* Systems that don't involve crew also require a station, but the
* station can be set to be auto-manned; it won't be visible but it will
* designate the system's location on the ship.
*
* Each station must be assigned to a ShipCoordinate in the ShipLayout.
* A single room may contain stations for several systems.
* A system may have multiple stations in any number of rooms.
*
* The benefits of having multiple stations manned is for the system to
* decide.
*
* TODO: The original FTL's stations had several different colored glows.
* blue = default
* yellow = manned by a one-star mastery crewmember
* green = manned by a two-star mastery crewmember
* none = at least one damaged bar that has not been fully repaired
*/
public interface StationModel extends OVDModel, Coordinatable {
public NamedProperties getProperties();
/**
* Sets which edge of the floor tile this station should appear at.
*
* The argument should be OVDConstants.ORIENT_NORTH, etc.
* Technically this rotates the graphic at 90 degree intervals.
*
* @see com.ftloverdrive.util.OVDConstants
*/
public void setOrientation( int orientation );
public int getOrientation();
/**
* Sets the system associated with this station.
*/
public void setSystem( int systemModelRefId );
public int getSystem();
/**
* Toggled whether crew is manning this station.
* This will fluctuate as crew come and go.
*/
public void setManned( boolean b );
/**
* Returns true if this station is manned by crew, or is auto-manned.
*/
public boolean isManned();
/**
* Sets whether this station should be invisible and always considered
* manned.
*/
public void setAutoManned( boolean b );
public boolean isAutoManned();
}