diff options
-rw-r--r-- | genome-list.mjs | 8 | ||||
-rw-r--r-- | index.html | 2 | ||||
-rw-r--r-- | rules.mjs | 30 |
3 files changed, 19 insertions, 21 deletions
diff --git a/genome-list.mjs b/genome-list.mjs index c057d34..8969a8c 100644 --- a/genome-list.mjs +++ b/genome-list.mjs @@ -18,14 +18,6 @@ class GenomeList { return undefined } } - - get penultimate() { - if (this.genomes.length > 1) { - return this.genomes[this.genomes.length - 2] - } else { - return undefined - } - } } export default GenomeList @@ -74,7 +74,7 @@ <ul> <li>If the mutation caused a change in the amino acid being coded, then <button class='kill' disabled=''>kill</button> it and - start again with the previous generation.</li> + start again with the last successful generation.</li> <li>Otherwise, <button class='clone' disabled=''>clone</button> this genome for the next generation.</li> @@ -73,8 +73,13 @@ class NucleotideSelect { return } - this.rules.genomeList.push(this.rules.currentGenome.clone()) - this.rules.next(new RollForNucleotide(this.rules)) + this.rules.iterations-- + if (this.rules.iterations === 0) { + this.rules.next(new PrintResults(this.rules)) + } else { + this.rules.genomeList.push(this.rules.currentGenome.clone()) + this.rules.next(new RollForNucleotide(this.rules)) + } } handleSelectionChanged(nucleotide, i) { @@ -126,6 +131,7 @@ class PerformMutation { this.rules = rules this.id = 'perform-mutation' + this.originalGenome = this.rules.currentGenome.clone() } enter() { @@ -183,13 +189,15 @@ class PerformMutation { return } - this.rules.next(new SelectAminoAcid(this.rules)) + this.selectedNucleotide.value = base + this.rules.next(new SelectAminoAcid(this.rules, this.originalGenome)) } } class SelectAminoAcid { - constructor(rules) { + constructor(rules, originalGenome) { this.rules = rules + this.originalGenome = originalGenome this.id ='amino-acid-select' } @@ -199,6 +207,7 @@ class SelectAminoAcid { const selector = this.rules.aminoAcidSelector this.codon = this.rules.currentGenome.selectedCodon this.expected = AminoAcid.codonMap[this.codon.value] + console.debug('expected: ', this.expected) let x = selector.elt.querySelector('#amino-acid-selector .codon').innerHTML = this.codon.value @@ -227,13 +236,14 @@ class SelectAminoAcid { const newAminoAcid = new AminoAcid(...this.codon.value.split('')) const isLethal = this.codon.aminoAcid.value !== newAminoAcid.value this.codon.aminoAcid = newAminoAcid - this.rules.next(new MarkAsLethal(this.rules, isLethal)) + this.rules.next(new MarkAsLethal(this.rules, this.originalGenome, isLethal)) } } class MarkAsLethal { - constructor(rules, isLethal) { + constructor(rules, originalGenome, isLethal) { this.rules = rules + this.originalGenome = originalGenome this.isLethal = isLethal this.id = 'mark-as-lethal' @@ -288,7 +298,7 @@ class MarkAsLethal { this.rules.next(new ShowError(this.rules, this)) return } - this.nextGoodState(this.rules.previousGenome) + this.nextGoodState(this.originalGenome) } nextGoodState(genome) { @@ -421,7 +431,7 @@ class Rules { } _debugStartAtSelectLethality() { - this.currentState = new MarkAsLethal(this, true) + this.currentState = new MarkAsLethal(this, this.currentGenome.clone(), true) this.die.value = 15 const nucleotide = this.currentGenome.nucleotides[15] nucleotide.value = 'A' @@ -438,10 +448,6 @@ class Rules { return this.genomeList.last } - get previousGenome() { - return this.genomeList.penultimate - } - showCurrent() { if (this.currentState.id === undefined) { return |