package org.mafagafogigante.dungeon.world;
import org.mafagafogigante.dungeon.entity.creatures.Observer;
import org.mafagafogigante.dungeon.game.World;
import org.jetbrains.annotations.NotNull;
import java.io.Serializable;
/**
* A VisibilityCriterion based on the current weather condition.
*/
public class WeatherConditionVisibilityCriterion implements Serializable, VisibilityCriterion {
private final WeatherCondition minimumCondition;
private final WeatherCondition maximumCondition;
/**
* Creates a WeatherConditionVisibilityCriterion that will be met when the condition is heavier than or equal to
* minimum and lighter than or equal to maximum.
*/
public WeatherConditionVisibilityCriterion(@NotNull WeatherCondition minimum, @NotNull WeatherCondition maximum) {
if (minimum.isHeavierThan(maximum)) {
throw new IllegalArgumentException("minimum cannot be heavier than maximum");
}
this.minimumCondition = minimum;
this.maximumCondition = maximum;
}
@Override
public boolean isMetBy(Observer observer) {
World world = observer.getObserverLocation().getWorld();
WeatherCondition currentCondition = world.getWeather().getCurrentCondition(world.getWorldDate());
boolean meetsMinimum = currentCondition == minimumCondition || currentCondition.isHeavierThan(minimumCondition);
boolean meetsMaximum = currentCondition == maximumCondition || currentCondition.isLighterThan(maximumCondition);
return meetsMinimum && meetsMaximum;
}
}