Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
 private static bool IsReachedTargetPlace(SimulatedAnimal animal)
 {
     return(Vector2.Distance(animal.TargetPlace, animal.Position) < 0.01);
 }