public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        SteeringBehaviors SB = (SteeringBehaviors)target;

        // Draw checkbox for the FleeBehavior bool
        SB.IsFleeBehaviorEnabled = EditorGUILayout.Toggle("IsFleeBehaviorEnabled", SB.IsFleeBehaviorEnabled);
        if (SB.IsFleeBehaviorEnabled)
        {
            SB.FleeTarget = EditorGUILayout.ObjectField("Target", SB.FleeTarget, typeof(GameObject), true) as GameObject;
        }

        // Draw checkbox for the SeekBehavior bool
        SB.IsSeekBehaviorEnabled = EditorGUILayout.Toggle("IsSeekBehaviorEnabled", SB.IsSeekBehaviorEnabled);
        if (SB.IsSeekBehaviorEnabled)
        {
            SB.SeekTarget = EditorGUILayout.ObjectField("Target", SB.SeekTarget, typeof(GameObject), true) as GameObject;
        }

        // Draw checkbox for the WanderBehavior bool
        SB.IsWanderBehaviorEnabled = EditorGUILayout.Toggle("IsWanderBehaviorEnabled", SB.IsWanderBehaviorEnabled);
        if (SB.IsWanderBehaviorEnabled)
        {
            SB.AreaBoundaries = EditorGUILayout.ObjectField("WanderingBoundaries", SB.AreaBoundaries, typeof(GameObject), true) as GameObject;
        }
    }
Exemple #2
0
    public override Vector2 CalculateSteering(MovingEntity vehicle)
    {
        Vector2 steeringForce = new Vector2();

        if (seek)
        {
            steeringForce += SteeringBehaviors.Seek(vehicle);
        }
        if (flee)
        {
            steeringForce += SteeringBehaviors.Flee(vehicle);
        }
        if (arrive)
        {
            steeringForce += SteeringBehaviors.Arrive(vehicle, SteeringBehaviors.Deceleration.normal);
        }
        if (separation)
        {
            steeringForce += SteeringBehaviors.Separation(vehicle) * 3;
        }
        if (pursuit)
        {
            steeringForce += SteeringBehaviors.Pursuit(vehicle);
        }

        return(steeringForce);
    }
Exemple #3
0
// MonoBehaviour
//
    void Awake()
    {
        velocity = Vector3.right;
        //MaxSpeed = 2.0f;

        mSteering = new SteeringBehaviors(this);
        //mSteering.SetFlag(Behavior.separation);
    }
    Vector3 PathFollowing(SimplePath path)
    {
        Vector3 predictedLocation = cachedTransform.position + velocity.normalized * predictionDistance;// maxSpeed;

        predictedLocationMarker.position = predictedLocation;

        float   shortestSqrMagnitude    = Mathf.Infinity;
        int     startIndexOfClosestLine = -1;
        Vector3 closestNormalPoint      = Vector3.zero;

        // Find the closest normal point by checking against all lines in path.
        for (int i = 0; i < path.points.Count - 1; i++)
        {
            Vector3 normalPoint = ComputeClampedNormalPoint(predictedLocation, path.points[i], path.points[i + 1]);

            float sqrMagnitudeAB = (path.points[i + 1] - path.points[i]).sqrMagnitude;

            // The normal cannot be between A & B if its distance to A or B exceeds the length of AB.
            if (sqrMagnitudeAB < (normalPoint - path.points[i]).sqrMagnitude)
            {
                normalPoint = path.points[i + 1];
            }
            else if (sqrMagnitudeAB < (normalPoint - path.points[i + 1]).sqrMagnitude)
            {
                normalPoint = path.points[i];
            }

            float sqrMagnitudeFromNormal = (predictedLocation - normalPoint).sqrMagnitude;
            if (sqrMagnitudeFromNormal < shortestSqrMagnitude)
            {
                shortestSqrMagnitude    = sqrMagnitudeFromNormal;
                startIndexOfClosestLine = i;
                closestNormalPoint      = normalPoint;
            }
        }

        // If no valid noraml could be found, redirect the boid to the start of the path.
        if (startIndexOfClosestLine == -1)
        {
            return(SteeringBehaviors.Seek(cachedTransform.position, velocity, maxSpeed, path.points[0]));
        }

        normalPointMarker.position = closestNormalPoint;

        Vector3 pathDirection    = path.points[startIndexOfClosestLine + 1] - path.points[startIndexOfClosestLine];
        Vector3 futurePathTarget = closestNormalPoint + pathDirection.normalized;// * predictionDistance;

        futurePathTargetMarker.position = futurePathTarget;

        if (shortestSqrMagnitude > path.radius * path.radius)
        {
            return(SteeringBehaviors.Seek(cachedTransform.position, velocity, maxSpeed, futurePathTarget));
        }
        else // No steering required
        {
            return(Vector3.zero);
        }
    }
Exemple #5
0
    protected override void Init()
    {
        base.Init();

        steer = new SteeringBehaviors(this);

        heading = this.transform.up;
        this.isUpdateOrientation = true;
    }
 public MovingAgent(UnityGhost UNITYGHOST, SteeringBehaviors agentBehaviors, Vector2 HomeLocation)
 {
     this._unityGhost           = UNITYGHOST;
     this._unityGhost.MaxSpeed  = 2.0f;
     this._unityGhost.Mass      = 5f;
     this._unityGhost.MaxForce  = 0.5f;
     this._unityGhost.Direction = new Vector2(0, 0);
     this._homeLoc = HomeLocation;
 }
 private void Start()
 {
     pSteering = new SteeringBehaviors(this.gameObject);
     //  v_velocity = new Vector2(0f, 0f);
     mass      = 1f;
     maxSpeed  = 10f;
     _pos      = transform.position;
     v_heading = transform.localEulerAngles;
     StartCoroutine(Updating());
 }
    void Start()
    {
        body            = GetComponent <Rigidbody>();
        body.useGravity = false;

        missileLauncher   = GetComponentInChildren <MissileLauncher>();
        steeringBehaviors = GetComponent <SteeringBehaviors>();
        movement          = GetComponent <Movement>();
        sensor            = GetComponent <Sensor>();
    }
Exemple #9
0
        public MeteoroidAlienform(Ship owner, float lifetime)
            : base(owner, "Sprites/Meteoroid-Alienform.png", Color.Green, lifetime)
        {
            RotateToMomentum = true;
            Momentum         = Vector2.One;
            MaxSpeed         = 9f;

            _pursuit = new Pursuit(this);
            SteeringBehaviors.Add(_pursuit);
        }
    // Use this for initialization
    void Start()
    {
        enemyAudioSource = GetComponent <AudioSource>(); //initializes the enemy's audio source
        this._agent      = new MovingAgent(this, SteeringBehaviors.PathFollow, this._homeLoc);
        this.Location    = this._homeLoc;
        enemyCollider    = this.GetComponent <BoxCollider2D>(); //initalizes the collider

        FindRandomPath();
        GrabNodes();
        this._behaviors = SteeringBehaviors.PathFollow;
    }
Exemple #11
0
    void Start()
    {
        GenerateRandomAttributes();
        GetBehaviorPriority();
        steeringBasics = GetComponent <Steering>();

        steering = GetComponent <SteeringBehaviors>();
        //shoot = GetComponent<Shooting>();
        sensor = transform.Find("Sensor").GetComponent <Sensor>();
        vision = transform.Find("Vision").GetComponent <Vision>();
    }
        public FleeingFake(Ship owner, float lifetime)
            : base(owner, "Sprites/Fatboy-FleeingFake.png", Color.Yellow, lifetime)
        {
            RotateToMomentum = true;
            Momentum         = Vector2.One;
            MaxSpeed         = 10f;

            _flee = new Flee(this)
            {
                PanicDistance = 500f,
            };
            SteeringBehaviors.Add(_flee);
        }
Exemple #13
0
    void Start()
    {
        velocity = Vector3.right;
        maxSpeed = 2.0f;

        mSteering = new SteeringBehaviors(this);
        //mSteering.SetPath(Path, Loop);
        
        //INTERNAL
        mSteering.SetFlag(Behavior.separation);
        mSteering.SetFlag(Behavior.alignment);
        mSteering.SetFlag(Behavior.cohesion);
        mSteering.SetFlag(Behavior.followPath);
        mSteering.SetFlag(Behavior.wander2d);
    }
Exemple #14
0
    public override Vector2 CalculateSteering(MovingEntity vehicle)
    {
        Vector2 steeringForce = Vector2.zero;
        Vector2 force;

        if (separation)
        {
            force = SteeringBehaviors.Separation(vehicle) * 1.0f;
            if (AccumulateForce(vehicle, ref steeringForce, force) && force != Vector2.zero)
            {
                return(steeringForce);
            }
        }
        if (seek)
        {
            force = SteeringBehaviors.Seek(vehicle) * 1.0f;
            if (AccumulateForce(vehicle, ref steeringForce, force))
            {
                return(steeringForce);
            }
        }
        if (flee)
        {
            force = SteeringBehaviors.Flee(vehicle) * 1.0f;
            if (AccumulateForce(vehicle, ref steeringForce, force))
            {
                return(steeringForce);
            }
        }
        if (arrive)
        {
            force = SteeringBehaviors.Arrive(vehicle) * 1.0f;
            if (AccumulateForce(vehicle, ref steeringForce, force))
            {
                return(steeringForce);
            }
        }
        if (pursuit)
        {
            force = SteeringBehaviors.Pursuit(vehicle) * 1.0f;
            if (AccumulateForce(vehicle, ref steeringForce, force))
            {
                return(steeringForce);
            }
        }

        return(steeringForce);
    }
    // Use this for initialization
    protected virtual void Start()
    {
        _transform = gameObject.GetComponent <Transform> ();

        _rigidbody = gameObject.GetComponent <Rigidbody2D> ();
        if (_rigidbody == null)
        {
            Debug.LogError("Missing rigidbody");
        }

        _renderer = gameObject.GetComponent <SpriteRenderer> ();
        if (_renderer == null)
        {
            Debug.LogError("Missing renderer");
        }

        steeringBehavior = new SteeringBehaviors(this);
    }
Exemple #16
0
        public PursuiterMissile(Ship owner, float lifetime)
            : base(owner, "Sprites/Avenger-PursuiterMissile.png", Color.Red, lifetime)
        {
            RotateToMomentum = true;
            Momentum         = Vector2.One;
            MaxSpeed         = 10f;

            _pursuit = new Pursuit(this);
            SteeringBehaviors.Add(_pursuit);

            // Wander, for when the target is not visible.
            _wander = new Wander(this)
            {
                Jitter         = 1.25f,
                WanderDistance = 1f,
                WanderRadius   = 100f,
            };

            SteeringBehaviors.Add(_wander);
        }
Exemple #17
0
        public WandererProbe(Ship owner, float lifetime)
            : base(owner, "Sprites/Explorer-WandererProbe.png", Color.CornflowerBlue, lifetime)
        {
            RotateToMomentum = true;
            Momentum         = Vector2.One;
            MaxSpeed         = 12f;

            _wander = new Wander(this)
            {
                Jitter         = 1.25f,
                WanderDistance = 1f,
                WanderRadius   = 100f,
            };

            _seek = new Seek(this)
            {
                Target = null
            };

            SteeringBehaviors.Add(_seek);
            SteeringBehaviors.Add(_wander);
        }
Exemple #18
0
    // Use this for initialization
    void Start ()
    {
        velocity = Vector3.right;
        //MaxSpeed = 2.0f;

        mSteering = new SteeringBehaviors(this);
        Vector2 target = Forest.GetGlobalInstance().AnyLocation;//NavMesh2D.GetInstance().GetRandomPos();
        mSteering.SetTarget(target);

        mPath = AStar.GetInstance().FindPath(transform.position, target);
        mSteering.SetPath(mPath, false);

        smoke = Resources.Load("smoke") as GameObject;
        //INTERNAL
        //mSteering.SetFlag(Behavior.separation);
        //mSteering.SetFlag(Behavior.alignment);
        //mSteering.SetFlag(Behavior.cohesion);
        mSteering.SetFlag(Behavior.followPath);
        //mSteering.SetFlag(Behavior.wander2d);

        if (sfx == null)
            sfx = GameObject.Find("Audio/AudioSFX").GetComponent<AudioSource>();
    }
Exemple #19
0
    private void FixedUpdate()
    {
        var steeringForce = new Vector2();

        if (Target != null && settings.Seek > 0)
        {
            steeringForce = settings.Seek * SteeringBehaviors.Seek(this, Target.position);
        }

        foreach (var boid in allBoids)
        {
            if ((object)boid != this)
            {
                if ((boid.GetPosition() - GetPosition()).sqrMagnitude < 1f)
                {
                    if (settings.Flee > 0)
                    {
                        steeringForce += settings.Flee * SteeringBehaviors.Flee(this, boid.GetPosition()) / ((Vector2)transform.position - boid.GetPosition()).magnitude;
                    }
                    if (settings.GetClose > 0)
                    {
                        steeringForce += settings.GetClose * SteeringBehaviors.Seek(this, boid.GetPosition());
                    }
                    ;
                    if (settings.Align > 0)
                    {
                        steeringForce += settings.Align * SteeringBehaviors.Aling(this, boid);
                    }
                }
            }
        }

        _rigidbody.AddForce(Vector2.ClampMagnitude(steeringForce, _maxForce));

        TurnTowardsVelocity();
    }
Exemple #20
0
 private void Start()
 {
     Steering = new SteeringBehaviors(this);
     Collider = GetComponent <SphereCollider>();
 }
    public void UpdateSteering()
    {
        steeringVector = transform.forward;

        if (isSeeking && targetTransform != null)
        {
            steeringVector = SteeringBehaviors.Seek(cachedTransform.position, velocity, maxSpeed, targetTransform.position);
        }

        if (isFleeing && targetTransform != null)
        {
            steeringVector = SteeringBehaviors.Flee(cachedTransform.position, velocity, maxSpeed, targetTransform.position);
        }

        if (isPursuing && movingTarget != null)
        {
            steeringVector = SteeringBehaviors.Pursuit(cachedTransform.position, velocity, maxSpeed, movingTarget.transform.position, movingTarget.velocity);
        }

        if (isEvading && movingTarget != null)
        {
            steeringVector = SteeringBehaviors.Evasion(cachedTransform.position, velocity, maxSpeed, movingTarget.transform.position, movingTarget.velocity);
        }

        if (isArriving && targetTransform != null)
        {
            steeringVector = SteeringBehaviors.Arrival(cachedTransform.position, velocity, maxSpeed, targetTransform.position, arrivalSlowingDistance);
        }

        if (IsWandering)
        {
            steeringVector = Wander(0.5f, 0.1f, false);
        }

        if (isLeaderFollowing)
        {
            Vector3 leaderFollowPoint = leader.transform.position + leader.transform.forward * -2f;
            steeringVector = SteeringBehaviors.Arrival(cachedTransform.position, velocity, maxSpeed, leaderFollowPoint, arrivalSlowingDistance);
        }

        if (isPathFollowing)
        {
            Vector3 possibleSteeringVector = PathFollowing(simplePath);

            if (possibleSteeringVector != Vector3.zero)
            {
                steeringVector = possibleSteeringVector;
            }
        }

        if (isSeperating)
        {
            Vector3 repulsionLocation = cachedTransform.position + Seperation();

            if (repulsionLocation != cachedTransform.position)
            {
                Vector3 desiredVelocity = (repulsionLocation - cachedTransform.position).normalized * maxSpeed;

                steeringVector = desiredVelocity - velocity;
            }
        }

        if (isAvoidingCollision)
        {
            Vector3 collisionSteeringVector = CollisionAvoidance();

            if (collisionSteeringVector != velocity)
            {
                if (collisionSteeringVector == transform.forward * maxSpeed && steeringVector != transform.forward)
                {
                    // The previously applied steering vector should not be modified.
                }
                else
                {
                    steeringVector = collisionSteeringVector;
                }
            }
        }

        if (velocity != Vector3.zero) //Check is to prevent the log message "Look rotation viewing vector is zero"
        {
            transform.rotation = Quaternion.LookRotation(velocity);
        }

        UpdateMovement();
    }
Exemple #22
0
 public void RemoveSteeringBehaviour(SteeringBehaviour type)
 {
     SteeringBehaviors.RemoveAll(SB => SB.GetType() == type.GetType());
 }
Exemple #23
0
 public void RemoveAllMovingBehaviours()
 {
     movingBehaviours.ForEach(MB => { SteeringBehaviors.RemoveAll(SB => SB.GetType().Equals(MB.GetType())); });
 }
Exemple #24
0
 private void UpdateAIBehavior(SteeringBehaviors steeringBehaviors)
 {
     this._behaviors = steeringBehaviors;
 }