public override MovementTransform DoSteering() { Vector3 temp = Vector3.Zero; int neighborCount = 0; var it = mCharacter.EnvironmentContext.World.Actors.GetEnumerator(); while (it.MoveNext()) { var actor = it.Current.Value; var boid = actor.GetComponent <GamePlay.Component.GMovementComponent>() as IBoid; if (boid == null || boid == mCharacter || boid == mTarget) { continue; } if ((boid.Position - mCharacter.Position).Length() < NeighborDistance) { temp += boid.Velocity; neighborCount++; } } it.Dispose(); MovementTransform movementTransform = new MovementTransform(); if (neighborCount > 0) { temp /= neighborCount; temp = temp - mCharacter.Velocity; if (IgnoreY) { temp.Y = 0; } movementTransform.Force = temp; } return(movementTransform); }
internal override MovementTransform DoSteering(Vector3 target) { MovementTransform steering = new MovementTransform(); if (mTarget == null) { return(steering); } if (IgnoreY) { mTargetPos = new Vector3(GetRandomFloat(), 0, GetRandomFloat()); } else { mTargetPos = new Vector3(GetRandomFloat(), GetRandomFloat(), GetRandomFloat()); } mTargetPos *= Radius; mTargetPos += (-Vector3.UnitZ * Distance); var rot = Quaternion.GetQuaternion(-Vector3.UnitZ, mCharacter.Velocity); var dir = Vector3.TransformNormal(mTargetPos, Matrix.RotationQuaternion(rot)); var force = dir - mCharacter.Velocity; if (IgnoreY) { force.Y = 0; } force.Normalize(); steering.Force = force * mCharacter.MaxVelocity; return(steering); }
internal override MovementTransform DoSteering(Vector3 target) { MovementTransform steering = new MovementTransform(); steering.Force = (target - mCharacter.Position); steering.Force.Normalize(); steering.Force *= mCharacter.MaxVelocity; return(steering); }
public override MovementTransform DoSteering() { MovementTransform steering = new MovementTransform(); if (mTarget == null) { return(steering); } steering.Force = (mTarget.Position - mCharacter.Position); steering.Force.Normalize(); steering.Force *= mCharacter.MaxVelocity; return(steering); }
public override MovementTransform DoSteering() { Vector3 temp = Vector3.Zero; int neighborCount = 0; var it = mCharacter.EnvironmentContext.World.Actors.GetEnumerator(); while (it.MoveNext()) { var actor = it.Current.Value; var boid = actor.GetComponent <GamePlay.Component.GMovementComponent>() as IBoid; if (boid == null || boid == mCharacter || boid == mTarget) { continue; } if ((boid.Position - mCharacter.Position).Length() < NeighborDistance) { if ((boid.Position - mCharacter.Position) == Vector3.Zero) { Random random = new Random(); var vec = new Vector3(random.Next(10), random.Next(10), random.Next(10)); temp += vec.NormalizeValue; } else { var vector = (mCharacter.Position - boid.Position); temp += vector.NormalizeValue * (1 / vector.Length()); } neighborCount++; } } it.Dispose(); MovementTransform movementTransform = new MovementTransform(); if (neighborCount > 0) { //temp.Normalize(); //movementTransform.Force = temp * 10; temp = temp - mCharacter.Velocity; if (IgnoreY) { temp.Y = 0; } movementTransform.Force = temp; //movementTransform.Orientation = temp.NormalizeValue; } return(movementTransform); }
internal override MovementTransform DoSteering(Vector3 target) { MovementTransform steering = new MovementTransform(); steering.Force = (target - mCharacter.Position); if (steering.Force.Length() < Radius) { return(default(MovementTransform)); } steering.Force /= TimeToTarget; if (steering.Force.Length() > Character.MaxVelocity) { steering.Force.Normalize(); steering.Force *= Character.MaxVelocity; } return(steering); }
internal override MovementTransform DoSteering(Vector3 target) { MovementTransform steering = new MovementTransform(); var desireVel = -(target - mCharacter.Position).NormalizeValue * mCharacter.MaxVelocity; var force = desireVel - mCharacter.Velocity; var cos = Vector3.Dot(desireVel, mCharacter.Velocity); if (cos > 0.9f) { force = desireVel; } //steering.Force = force.NormalizeValue * Math.Min(force.Length(),60); if (IgnoreY) { force.Y = 0; } steering.Force = force; return(steering); }
public override MovementTransform DoSteering() { MovementTransform steering = new MovementTransform(); if (mTarget == null) { return(steering); } mTargetPos = new Vector3(((MathHelper.RandomRange(0, 2) - 1) * Jitter), 0, ((MathHelper.RandomRange(0, 2) - 1) * Jitter)); mTargetPos *= Radius; mTargetPos += (-Vector3.UnitZ * Distance); var rot = Quaternion.GetQuaternion(-Vector3.UnitZ, mCharacter.Orientation); var pos = Vector3.TransformCoordinate(mTargetPos, Matrix.RotationQuaternion(rot)); var dir = pos - mCharacter.Position; dir.Normalize(); dir.Y = 0; steering.Force = dir * mCharacter.MaxVelocity; return(steering); }
public override MovementTransform DoSteering() { MovementTransform steering = new MovementTransform(); if (mTarget == null) { return(steering); } steering.Force = (mTarget.Position - mCharacter.Position); if (steering.Force.Length() < Radius) { return(default(MovementTransform)); } steering.Force /= TimeToTarget; if (steering.Force.Length() > Character.MaxVelocity) { steering.Force.Normalize(); steering.Force *= Character.MaxVelocity; } return(steering); }