Beispiel #1
0
        public override Vector2 SteerForce()
        {
            if (path.Size == 0)
            {
                _bUsingArrive = false;
                return(Vector2.zero);
            }

            else if (path.Size == 1)
            {
                _bUsingArrive       = true;
                arriveSensor.target = path.FirstWaypoint;
                Arrive2D.SteerForce(Agent, arriveSensor);
            }

            if (!path.Finished())
            {
                _bUsingArrive = false;
                return(Seek2D.SteerForce(path.CurrentWaypoint(), Agent));
            }

            else
            {
                _bUsingArrive       = true;
                arriveSensor.target = path.CurrentWaypoint();
                return(Arrive2D.SteerForce(Agent, arriveSensor));
            }
        }
Beispiel #2
0
        public override Vector2 SteerForce()
        {
            if (leader == null)
            {
                return(Vector2.zero);
            }

            // Convert the offset position into world coordinates.
            Vector2 worldOffset = leader.graphicTransform.TransformPoint(localOffset);
            Vector2 toOffset    = worldOffset - (Vector2)Agent.transform.position;

            Vector2 leaderVelocity = leader.rigid.velocity;

            float lookAheadTime = toOffset.magnitude / (Agent.maxSpeed + leaderVelocity.magnitude);

            Vector2 futurePosition = worldOffset + leaderVelocity * lookAheadTime;

            arriveSensor.target = futurePosition;

            return(Arrive2D.SteerForce(Agent, arriveSensor));
        }
Beispiel #3
0
        public override Vector2 SteerForce()
        {
            // Invalid targets.
            if (!targetsAreValid())
            {
                return(Vector2.zero);
            }

            Vector2 midpoint = (targetA.position + targetB.position) / 2f;

            float timeToReachMidpoint = Vector2.Distance(Agent.transform.position, midpoint) / Agent.maxSpeed;

            // Assume the targets will continue moving linearly in order to predict their future positions.
            Vector2 futurePositionA = targetA.position + targetA.velocity * timeToReachMidpoint;
            Vector2 futurePositionB = targetB.position + targetB.velocity * timeToReachMidpoint;

            Vector2 futureMidpoint = (futurePositionA + futurePositionB) / 2f;

            sensor.target = futureMidpoint;

            return(Arrive2D.SteerForce(Agent, sensor));
        }
Beispiel #4
0
        public override Vector2 SteerForce()
        {
            if (!evadeSensor.ShouldAvoid(Agent))
            {
                arriveSensor.target = _lastHidingSpot;
                return(Arrive2D.SteerForce(Agent, arriveSensor));
            }

            Vector2 hidingSpot = Vector2.zero;

            // Arrive at the hiding position.
            if (getNearestHidingSpot(ref hidingSpot))
            {
                _lastHidingSpot     = hidingSpot;
                arriveSensor.target = hidingSpot;
                return(Arrive2D.SteerForce(Agent, arriveSensor));
            }

            // No hiding position available, evade target.
            else
            {
                return(Evade2D.SteerForce(Agent, evadeSensor));
            }
        }