示例#1
0
 public Face(Kinematic agentKinematic, Vector3 targetPosition, float timeToTarget = 0.25f,
             float satisfactionRadius = 5)
     : this(agentKinematic, new Kinematic {
     Position = targetPosition
 }, timeToTarget, satisfactionRadius)
 {
 }
 public Arrive(Kinematic agentKinematic, Kinematic targetKinematic, float timeToTarget, float brakingRadius,
               float satisfactionRadius)
     : base(agentKinematic, targetKinematic)
 {
     _timeToTarget      = timeToTarget;
     _brakingRadius     = brakingRadius;
     SatisfactionRadius = satisfactionRadius;
 }
 public Wander(Kinematic agentKinematic)
     : this(agentKinematic,
            new Seek(agentKinematic, new Kinematic()),
            new Face(agentKinematic, new Kinematic()),
            100.0f,
            2.0f,
            1)
 {
 }
        public override Steering Steer()
        {
            var steering = new Steering {
                Type = Steering.Types.Velocities
            };

            if (WanderCircleRadius <= 0)
            {
                return(steering);
            }

            _headingAngle += MaximumSlideDegrees - 2 * Random.value * MaximumSlideDegrees;
            _headingAngle  = Math.WrapAngle(_headingAngle);

            var forwardDirection = new Vector3(AgentKinematic.Velocity.x, 0, AgentKinematic.Velocity.z);

            if (forwardDirection.magnitude > 0)
            {
                forwardDirection.Normalize();
            }
            else
            {
                forwardDirection = new Vector3(-Mathf.Sin(AgentKinematic.AngularVelocity.y), 0,
                                               -Mathf.Cos(AgentKinematic.AngularVelocity.y));
                forwardDirection.Normalize();
            }

            var rightDirection = new Vector3(-forwardDirection.z, 0, forwardDirection.x);

            forwardDirection *= WanderCircleOffset;
            rightDirection   *= -Mathf.Sin(_headingAngle) * WanderCircleRadius;

            var direction = forwardDirection + rightDirection;

            direction.Normalize();

            var targetKinematic = new Kinematic {
                Position = AgentKinematic.Position + direction * AgentKinematic.MaximumSpeed
            };

            if (Move != null)
            {
                Move.OtherKinematic = targetKinematic;
                steering.Linear     = Move.Steer().Linear;
            }

            if (Look == null)
            {
                return(steering);
            }
            Look.OtherKinematic = targetKinematic;
            steering.Angular    = Look.Steer().Angular;

            return(steering);
        }
 public Wander(
     Kinematic agentKinematic,
     SteeringBehaviour move,
     SteeringBehaviour look,
     float wanderCircleOffset,
     float wanderCircleRadius,
     float maximumSlideDegrees)
     : base(agentKinematic)
 {
     Move = move;
     Look = look;
     WanderCircleOffset  = wanderCircleOffset;
     WanderCircleRadius  = wanderCircleRadius;
     MaximumSlideDegrees = maximumSlideDegrees;
 }
        public Kinematic(Kinematic kinematicSource)
        {
            MaximumSpeed               = kinematicSource.MaximumSpeed;
            MaximumAngularSpeed        = kinematicSource.MaximumAngularSpeed;
            MaximumAcceleration        = kinematicSource.MaximumAcceleration;
            MaximumAngularAcceleration = kinematicSource.MaximumAngularAcceleration;

            Position  = kinematicSource.Position;
            _rotation = kinematicSource._rotation;

            _velocity        = kinematicSource._velocity;
            _angularVelocity = kinematicSource._angularVelocity;

            _acceleration        = kinematicSource._acceleration;
            _angularAcceleration = kinematicSource._angularAcceleration;

            _accumulatedVelocity            = kinematicSource._accumulatedVelocity;
            _accumulatedAngularVelocity     = kinematicSource._accumulatedAngularVelocity;
            _accumulatedAcceleration        = kinematicSource._accumulatedAcceleration;
            _accumulatedAngularAcceleration = kinematicSource._accumulatedAngularAcceleration;
        }
示例#7
0
 public Seek(Kinematic agentKinematic)
     : base(agentKinematic, new Kinematic())
 {
 }
示例#8
0
 public Seek(Kinematic agentKinematic, Kinematic targetKinematic)
     : base(agentKinematic, targetKinematic)
 {
 }
示例#9
0
 public Seek(Kinematic agentKinematic, Vector3 targetPosition)
     : base(agentKinematic, targetPosition)
 {
 }
 protected SteeringBehaviour(Kinematic agentKinematic, Kinematic otherKinematic = null)
 {
     AgentKinematic = agentKinematic;
     OtherKinematic = otherKinematic;
 }
示例#11
0
 public Flee(Kinematic agentKinematic)
     : base(agentKinematic)
 {
 }
示例#12
0
 public Flee(Kinematic agentKinematic, Kinematic targetKinematic)
     : base(agentKinematic, targetKinematic)
 {
 }
示例#13
0
 public Evade(Kinematic agentKinematic)
     : base(agentKinematic)
 {
 }
示例#14
0
 public Evade(Kinematic agentKinematic, Kinematic targetKinematic)
     : base(agentKinematic, targetKinematic)
 {
 }
示例#15
0
 public Align(Kinematic agentKinematic, Kinematic targetKinematic, float timeToTarget, float satisfactionRadius)
     : base(agentKinematic, targetKinematic)
 {
     _timeToTarget       = timeToTarget;
     _satisfactionRadius = satisfactionRadius;
 }
 protected SteeringBehaviour(Kinematic agentKinematic, Vector3 otherPosition)
     : this(agentKinematic, new Kinematic {
     Position = otherPosition
 })
 {
 }
示例#17
0
 public Face(Kinematic agentKinematic, Kinematic targetKinematic, float timeToTarget = 0.25f,
             float satisfactionRadius = 5)
     : base(agentKinematic, targetKinematic, timeToTarget, satisfactionRadius)
 {
 }