shimmerer = () => {
let object = 0,
replacement = 1;
let indexOfObjectLetter = randInt(letters[object].length);
let objectLetter = letters[object].substr(indexOfObjectLetter, 1);
if (mutable rindex == 0) shuffle(shuffledArray);
mutable rindex = mutable rindex + 1;
if (mutable rindex >= shimmeringArray.length) {
mutable rindex = 0;
}
let wordIndex = shuffledArray[rindex];
let shimmeringWord = shimmeringArray[wordIndex];
let len = shimmeringWord.length;
let indexOfLetterToReplace = -1;
if (mutable surface && shimmeringWord === supplyArray[wordIndex]) return;
if (heads()) {
let indexSearchStart = randInt(Math.floor(len / 2));
indexOfLetterToReplace = shimmeringWord.indexOf(
objectLetter,
indexSearchStart
);
} else {
let indexSearchStart = randIntBetween(Math.ceil(len / 2), len);
indexOfLetterToReplace = shimmeringWord.lastIndexOf(
objectLetter,
indexSearchStart
);
}
if (indexOfLetterToReplace != -1) {
let letterInWord = shimmeringWord.substr(indexOfLetterToReplace, 1);
let modelLetter = supplyArray[wordIndex].substr(indexOfLetterToReplace, 1);
let replacementLetter = letters[replacement].substr(indexOfObjectLetter, 1);
if (!mutable surface || (mutable surface && letterInWord != modelLetter)) {
shimmeringArray[wordIndex] = shimmeringWord.replace(
shimmeringArray[wordIndex].substr(indexOfLetterToReplace, 1),
replacementLetter
);
mutable shimmeringText = shimmeringArray.join(' ');
}
}
}