package org.mafagafogigante.dungeon.entity.items; import org.mafagafogigante.dungeon.game.Id; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.Serializable; /** * The BookComponent class. */ public class BookComponent implements Serializable { private static final int SECONDS_PER_CHARACTER = 1; private final Id spellId; private final String text; /** * Creates a new BookComponent from a spell Id and a string of text. * * @param spellId the Id of a spell, nullable * @param text a string of text, not null */ public BookComponent(@Nullable Id spellId, @NotNull String text) { this.spellId = spellId; this.text = text; } /** * Returns whether or not this book teaches a spell. * * @return true if this book teaches a spell */ public boolean isDidactic() { return spellId != null; } /** * Returns the Id of the spell this books teaches or null if this book does not teach any spell. */ public Id getSpellId() { return spellId; } /** * Returns the readable text of the book. */ public String getText() { return text; } /** * Returns how much time the Hero takes to read this book. This is a positive integer proportional to the length of * the text. * * @return a positive integer */ public int getTimeToRead() { return getText().length() * SECONDS_PER_CHARACTER; } @Override public String toString() { String representation = String.format("This book teaches %s.", isDidactic() ? spellId : "nothing"); representation += " " + "Text: " + text; return representation; } }