Skip to content

Instantly share code, notes, and snippets.

@holyjak
Created November 18, 2013 18:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save holyjak/7532797 to your computer and use it in GitHub Desktop.
Save holyjak/7532797 to your computer and use it in GitHub Desktop.
sealed class Health(val infectious: Boolean, val visiblyInfectious: Boolean) {
def evolve(implicit randomGenerator: RandomIntGenerator, config: MySimConfig): Option[HealthChange] =
this match {
case Healthy =>
if (randomGenerator.randomBelow(101) <= config.transmissibilityPct)
Some(new HealthChange(0, Incubatious))
else None
case Incubatious =>
Some(new HealthChange(6, Sick))
case Sick =>
if (randomGenerator.randomBelow(101) <= config.mortalityPct)
Some(new HealthChange(14 - 6, Dead))
else None
case Dead =>
None
case Immune =>
Some(new HealthChange(18 - 16, Healthy))
case Vaccinated =>
None
}
}
// infected? visibly?
object Healthy extends Health(false, false)
object Incubatious extends Health(true, false)
object Sick extends Health(true, true)
object Dead extends Health(true, true)
object Immune extends Health(true, false)
object Vaccinated extends Health(false, false)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment