package tc.oc.pgm.filters.matcher.player;
import tc.oc.pgm.filters.Filter;
import tc.oc.pgm.filters.matcher.StaticFilter;
import tc.oc.pgm.filters.matcher.TypedFilter;
import tc.oc.pgm.filters.query.IPartyQuery;
public class ParticipatingFilter extends TypedFilter.Impl<IPartyQuery> {
public static final Filter PARTICIPATING = new ParticipatingFilter(true);
public static final Filter OBSERVING = new ParticipatingFilter(false);
public static Filter of(boolean response) {
return response ? PARTICIPATING : OBSERVING;
}
public ParticipatingFilter(boolean participating) {
this.participating = participating;
}
private final @Inspect boolean participating;
@Override
public boolean isDynamic() {
return true;
}
@Override
public boolean matches(IPartyQuery query) {
return query.isParticipating() == participating;
}
@Override
public Filter not() {
return of(!participating);
}
@Override
public Filter and(Filter that) {
if(that instanceof ParticipatingFilter) {
return this.participating == ((ParticipatingFilter) that).participating
? this : StaticFilter.DENY;
}
return super.and(that);
}
@Override
public Filter or(Filter that) {
if(that instanceof ParticipatingFilter) {
return this.participating == ((ParticipatingFilter) that).participating
? this : StaticFilter.ALLOW;
}
return super.and(that);
}
}