private void UpdateAnimal(SimulatedAnimal animal) { var selectNewTargetPlace = IsReachedTargetPlace(animal); if (selectNewTargetPlace) { animal.TargetPlace = animal.KnownPlaces.Except(new[] { animal.TargetPlace }) .ElementAt(Random.Next(animal.KnownPlaces.Length - 1)); } if (animal.stepsUntilNextDecision == 0) { var randomSpeed = (float)Random.NextDouble() * 0.3f + 0.01f; if (Random.Next(6) == 0) { animal.Velocity = Vector2.Normalize(new Vector2(Random.Next(-360, 360), Random.Next(-360, 360))) * randomSpeed; } else { animal.Velocity = Vector2.Normalize(animal.TargetPlace - animal.Position) * randomSpeed; } animal.stepsUntilNextDecision = 1; } animal.stepsUntilNextDecision--; animal.Position += animal.Velocity; }
private static bool IsReachedTargetPlace(SimulatedAnimal animal) { return(Vector2.Distance(animal.TargetPlace, animal.Position) < 0.01); }