Skip to content

Instantly share code, notes, and snippets.

@IntegerMan
Created November 16, 2019 05:01
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 IntegerMan/e843936bdda544e7a6440bcd3a5904d7 to your computer and use it in GitHub Desktop.
Save IntegerMan/e843936bdda544e7a6440bcd3a5904d7 to your computer and use it in GitHub Desktop.
let evaluateTile brain world pos =
let genes = brain.genes
let proxSquirrel = evaluateProximity world.Squirrel pos (getGene ActorGeneIndex.Squirrel genes)
let proxRabbit = evaluateProximity world.Rabbit pos (getGene ActorGeneIndex.Rabbit genes)
let proxDoggo = evaluateProximity world.Doggo pos (getGene ActorGeneIndex.Doggo genes)
let proxAcorn = evaluateProximity world.Acorn pos (getGene ActorGeneIndex.Acorn genes)
let proxTree = evaluateProximity world.Tree pos (getGene ActorGeneIndex.Tree genes)
let adjDoggo = evaluateAdjacentTo world.Doggo pos (getGene ActorGeneIndex.NextToDoggo genes)
let adjRabbit = evaluateAdjacentTo world.Rabbit pos (getGene ActorGeneIndex.NextToRabbit genes)
proxSquirrel + proxRabbit + proxDoggo + proxAcorn + proxTree + adjDoggo + adjRabbit
let getGene (geneIndex: ActorGeneIndex) (genes: double[]) =
genes.[int geneIndex]
let evaluateProximity actor pos weight =
if actor.IsActive then
let maxDistance = 225.0
let distance = getDistance(actor.Pos, pos)
if distance < maxDistance then
((maxDistance - distance)/maxDistance) * weight
else
0.0
else
0.0
let evaluateAdjacentTo actor pos weight =
if actor.IsActive && actor.Pos <> pos then
if getDistance(actor.Pos, pos) <= 1.5 then
0.05 * weight
else
0.0
else
0.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment