package unsw.blackout; import java.util.Optional; import unsw.utils.Angle; public class ShrinkingSatellite extends SatelliteBase { public ShrinkingSatellite(String satelliteID, double height, Angle position) { super(satelliteID, height, position); } @ Override final public double getVelocity() { return 1_000.0; } @ Override final public double getRange() { return 200_000.0; } @ Override final protected boolean isSupportedDeviceType(String type) { return true; } @ Override final protected boolean canShrink() { return true; } @ Override final protected Optional getFileStoreLimit() { return Optional.empty(); // No limit. } @ Override final protected Optional getByteStoreLimit() { return Optional.of(150); // 150 bytes. } @ Override final protected Optional getByteDownloadSpeed() { return Optional.of(15); // 15 bytes per minute. } @ Override final protected Optional getByteUploadSpeed() { return Optional.of(10); // 10 bytes per minute. } @ Override final protected int getNumBytesInFiles() { int count = 0; for (File file : getReceivedFiles()) { if (file.isQuantum()) { count += (int)((double)file.getContentsSize() * (2.0 / 3.0) + 0.5); // quantum satellites perform 2/3 compression on their files continue; } count += file.getContentsSize(); } return count; } }