package com.lateensoft.pathfinder.toolkit.model.party;
import android.os.Parcel;
import android.os.Parcelable;
import com.google.common.primitives.Ints;
import com.lateensoft.pathfinder.toolkit.model.character.PathfinderCharacter;
import org.jetbrains.annotations.NotNull;
/**
* @author tsiemens
*/
public class EncounterParticipant extends PathfinderCharacter implements Comparable<EncounterParticipant> {
private int initiativeScore;
private int turnOrder;
public EncounterParticipant(PathfinderCharacter character) {
super(character);
initiativeScore = 0;
turnOrder = 0;
}
protected EncounterParticipant(Builder builder) {
super(builder);
initiativeScore = builder.initiativeScore;
turnOrder = builder.turnOrder;
}
public EncounterParticipant(Parcel in) {
super(in);
initiativeScore = in.readInt();
turnOrder = in.readInt();
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeInt(initiativeScore);
out.writeInt(turnOrder);
}
public int getInitiativeScore() {
return initiativeScore;
}
public void setInitiativeScore(int initiativeScore) {
this.initiativeScore = initiativeScore;
}
public int getTurnOrder() {
return turnOrder;
}
public void setTurnOrder(int turnOrder) {
this.turnOrder = turnOrder;
}
@Override
public int compareTo(@NotNull EncounterParticipant another) {
int turnCompared = Ints.compare(this.turnOrder, another.turnOrder);
return turnCompared != 0 ? turnCompared :
-1 * Ints.compare(this.initiativeScore, another.initiativeScore);
}
@Override
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<EncounterParticipant> CREATOR = new Parcelable.Creator<EncounterParticipant>() {
public EncounterParticipant createFromParcel(Parcel in) {
return new EncounterParticipant(in);
}
public EncounterParticipant[] newArray(int size) {
return new EncounterParticipant[size];
}
};
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof EncounterParticipant)) return false;
if (!super.equals(o)) return false;
EncounterParticipant that = (EncounterParticipant) o;
if (initiativeScore != that.initiativeScore) return false;
if (turnOrder != that.turnOrder) return false;
return true;
}
@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + initiativeScore;
result = 31 * result + turnOrder;
return result;
}
public static Builder builder() {
return new Builder<Builder>();
}
@SuppressWarnings("unchecked")
public static class Builder<T extends Builder> extends PathfinderCharacter.Builder<T> {
private int initiativeScore = 0;
private int turnOrder = 0;
public Builder() {
super();
}
public EncounterParticipant build() {
return new EncounterParticipant(this);
}
public T setInitiativeScore(int initiativeScore) {
this.initiativeScore = initiativeScore;
return (T) this;
}
public T setTurnOrder(int turnOrder) {
this.turnOrder = turnOrder;
return (T) this;
}
}
}