package com.o3dr.services.android.lib.drone.mission.item.spatial; import android.os.Parcel; import com.o3dr.services.android.lib.drone.mission.MissionItemType; import com.o3dr.services.android.lib.drone.mission.item.MissionItem; /** * Created by fhuya on 11/6/14. */ public class Waypoint extends BaseSpatialItem implements android.os.Parcelable { private double delay; private double acceptanceRadius; private double yawAngle; private double orbitalRadius; private boolean orbitCCW; public Waypoint(){ super(MissionItemType.WAYPOINT); } public Waypoint(Waypoint copy){ super(copy); delay = copy.delay; acceptanceRadius = copy.acceptanceRadius; yawAngle = copy.yawAngle; orbitalRadius = copy.orbitalRadius; orbitCCW = copy.orbitCCW; } public double getDelay() { return delay; } public void setDelay(double delay) { this.delay = delay; } public double getAcceptanceRadius() { return acceptanceRadius; } public void setAcceptanceRadius(double acceptanceRadius) { this.acceptanceRadius = acceptanceRadius; } public double getYawAngle() { return yawAngle; } public void setYawAngle(double yawAngle) { this.yawAngle = yawAngle; } public double getOrbitalRadius() { return orbitalRadius; } public void setOrbitalRadius(double orbitalRadius) { this.orbitalRadius = orbitalRadius; } public boolean isOrbitCCW() { return orbitCCW; } public void setOrbitCCW(boolean orbitCCW) { this.orbitCCW = orbitCCW; } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeDouble(this.delay); dest.writeDouble(this.acceptanceRadius); dest.writeDouble(this.yawAngle); dest.writeDouble(this.orbitalRadius); dest.writeByte(orbitCCW ? (byte) 1 : (byte) 0); } private Waypoint(Parcel in) { super(in); this.delay = in.readDouble(); this.acceptanceRadius = in.readDouble(); this.yawAngle = in.readDouble(); this.orbitalRadius = in.readDouble(); this.orbitCCW = in.readByte() != 0; } @Override public String toString() { return "Waypoint{" + "acceptanceRadius=" + acceptanceRadius + ", delay=" + delay + ", yawAngle=" + yawAngle + ", orbitalRadius=" + orbitalRadius + ", orbitCCW=" + orbitCCW + ", " + super.toString() + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Waypoint)) return false; if (!super.equals(o)) return false; Waypoint waypoint = (Waypoint) o; if (Double.compare(waypoint.delay, delay) != 0) return false; if (Double.compare(waypoint.acceptanceRadius, acceptanceRadius) != 0) return false; if (Double.compare(waypoint.yawAngle, yawAngle) != 0) return false; if (Double.compare(waypoint.orbitalRadius, orbitalRadius) != 0) return false; return orbitCCW == waypoint.orbitCCW; } @Override public int hashCode() { int result = super.hashCode(); long temp; temp = Double.doubleToLongBits(delay); result = 31 * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(acceptanceRadius); result = 31 * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(yawAngle); result = 31 * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(orbitalRadius); result = 31 * result + (int) (temp ^ (temp >>> 32)); result = 31 * result + (orbitCCW ? 1 : 0); return result; } @Override public MissionItem clone() { return new Waypoint(this); } public static final Creator<Waypoint> CREATOR = new Creator<Waypoint>() { public Waypoint createFromParcel(Parcel source) { return new Waypoint(source); } public Waypoint[] newArray(int size) { return new Waypoint[size]; } }; }