package org.mafagafogigante.dungeon.entity;
import org.mafagafogigante.dungeon.game.Id;
import org.mafagafogigante.dungeon.game.Name;
import org.mafagafogigante.dungeon.util.Percentage;
import org.mafagafogigante.dungeon.util.Selectable;
import org.mafagafogigante.dungeon.world.LuminosityVisibilityCriterion;
import org.mafagafogigante.dungeon.world.VisibilityCriteria;
import java.io.Serializable;
/**
* Entity abstract class that is a common type for everything that can be placed into a Location and interacted with.
* Namely, items and creatures.
*/
public abstract class Entity implements Selectable, Serializable {
private final Id id;
private final String type;
private final Name name;
private final Weight weight;
private final VisibilityCriteria visibilityCriteria;
protected Entity(Preset preset) {
this.id = preset.getId();
this.type = preset.getType();
this.name = preset.getName();
this.weight = preset.getWeight();
Luminosity minimumLuminosity = new Luminosity(new Percentage(1 - preset.getVisibility().toDouble()));
this.visibilityCriteria = new VisibilityCriteria(new LuminosityVisibilityCriterion(minimumLuminosity));
}
public Id getId() {
return id;
}
public String getType() {
return type;
}
@Override
public Name getName() {
return name;
}
protected Weight getWeight() {
return weight;
}
public VisibilityCriteria getVisibilityCriteria() {
return visibilityCriteria;
}
/**
* Returns the total luminosity of this entity. This accounts for its innate luminosity plus the luminosity from any
* items it may be holding.
*/
public abstract Luminosity getLuminosity();
}