// Add a little variation into the steering. private Vector2 Wander() { // Update wanderTheta. wanderTheta += SlagMath.GenerateGaussianNoise(WANDER_VARIANCE, GameResources.ActorManager.Random); while (wanderTheta > MathHelper.Pi) { wanderTheta -= MathHelper.TwoPi; } while (wanderTheta < -MathHelper.Pi) { wanderTheta += MathHelper.TwoPi; } Vector2 newHeading = Vector2.UnitY * WANDER_DISTANCE + new Vector2((float)(-Math.Sin(wanderTheta)), (float)(Math.Cos(wanderTheta))) * WANDER_RADIUS; if (newHeading.X == 0.0f && newHeading.Y == 0.0f) { return(Vector2.Zero); } newHeading.Normalize(); return(newHeading); }
public ZombieWanderState(float avgDurationSeconds) { mDurationTicks = (long)(TimeSpan.TicksPerSecond * (Math.Max(avgDurationSeconds + SlagMath.GenerateGaussianNoise(avgDurationSeconds * avgDurationSeconds * 0.25f, GameResources.ActorManager.Random), 0.25f))); }