package org.mafagafogigante.dungeon.entity.items; import org.mafagafogigante.dungeon.entity.Integrity; import org.mafagafogigante.dungeon.util.Percentage; import org.jetbrains.annotations.NotNull; import java.io.Serializable; /** * The integrity of an item. */ public class ItemIntegrity implements Serializable { private final Integrity integrity; private final Item item; private ItemIntegrity(@NotNull Integrity integrity, @NotNull Item item) { this.integrity = new Integrity(integrity); this.item = item; } /** * Makes a new ItemIntegrity object for the specified item from the provided Integrity. */ public static ItemIntegrity makeItemIntegrity(@NotNull Integrity integrity, @NotNull Item item) { return new ItemIntegrity(integrity, item); } public int getMaximum() { // Convenience that avoids getIntegrity().getIntegrity() in the code. return integrity.getMaximum(); } public int getCurrent() { // Convenience that avoids getIntegrity().getIntegrity() in the code. return integrity.getCurrent(); } public boolean isPerfect() { return integrity.isMaximum(); } /** * Returns whether or not this ItemIntegrity represents the integrity of a broken item. * * @return true if the current integrity is zero */ public boolean isBroken() { return integrity.isZero(); } public Percentage toPercentage() { return integrity.toPercentage(); } /** * Increments the current integrity by the specified amount. * * @param amount a nonnegative integer */ public void incrementBy(int amount) { // Convenience that avoids getIntegrity().getIntegrity() in the code. integrity.incrementBy(amount); } /** * Decrements the current integrity by the specified amount. If the Item ends up broken, it is passed to * BreakageHandler. * * @param amount a nonnegative integer */ public void decrementBy(int amount) { // Must exist. After delegating the decrement, this method checks for breakage. integrity.decrementBy(amount); if (isBroken()) { BreakageHandler.handleBreakage(item); } } @Override public String toString() { return "ItemIntegrity{" + "integrity=" + integrity + ", item=" + item + '}'; } }