package wordcram; import processing.core.PVector; /** * Once a WordPlacer tells WordCram where a word should go, a WordNudger * tells WordCram how to nudge it around the field, until it fits in with the * other words around it, or the WordCram gives up on the word. *

* WordCram gets a PVector from the nudger, and adds it to the word's desired * location, to find the next spot to try fitting the word. Note that the * PVectors returned from a nudger don't accumulate: if the placer * puts a Word at (0, 0), and the nudger returns (1, 1), and then (2, 2), * WordCram will try the word at (1, 1), and then (2, 2) -- not (1, 1) * and then (3, 3). *

* A WordNudger should probably start nudging the word only a little, to keep it * near its desired location, and gradually nudge it more and more, so that, * even if the desired area is congested, the word can still fit in somewhere. * This is why the WordCram passes in attemptNumber: it's the * number of times it's attempted to place the word. This could (for example) * scale the PVector, since the nudges don't accumulate (see above). * * @see RandomWordNudger * @see SpiralWordNudger * * @author Dan Bernier */ public interface WordNudger { /** * How should this word be nudged, this time? * * @param word * the word to nudge * @param attemptNumber * how many times WordCram has tried to place this word; starts * at zero, and ends at * (int)((1.0-word.weight) * 600) + 100 * @return the PVector to add to the word's desired location, to get the * next spot to try fitting the word */ public PVector nudgeFor(Word word, int attemptNumber); }