public void AddSteeringBehaviour(ISteeringBehaviour behaviour)
 {
     //The list of behaviours can only contain one type of a behaviour
     Type typeOfBehaviour = behaviour.GetType();
     if (this.Behaviours.Where(x => x.GetType() == typeOfBehaviour).Count() == 0)
         this.Behaviours.Add(behaviour);
 }
Example #2
0
        /// <summary>
        /// Registers a steering component.
        /// </summary>
        /// <param name="behavior">The behavior.</param>
        public void RegisterSteeringBehavior(ISteeringBehaviour behavior)
        {
            int count = _steeringComponents.Count;

            for (int i = 0; i < count; i++)
            {
                var c = _steeringComponents[i];
                if (c.priority == behavior.priority)
                {
                    var grp = c as SteeringGroup;
                    if (grp == null)
                    {
                        grp = new SteeringGroup(c.priority);
                        _steeringComponents[i] = grp;
                        grp.Add(c);
                    }

                    grp.Add(behavior);
                    return;
                }
            }

            _steeringComponents.Add(behavior);
            _steeringComponents.Sort((a, b) => b.priority.CompareTo(a.priority));
        }
        protected override void Initialize()
        {
            _spriteBatch = new SpriteBatch(GraphicsDevice);
            var random = new Random((int)DateTime.Now.Ticks);
            _steeringTarget = new SteeringTarget(Vector2.Zero);
            _seekBehaviour = new SeekBehaviour(_steeringTarget);
            _fleeBehaviour = new FleeBehaviour(_steeringTarget);
            _currentSteeringBehaviour = _seekBehaviour;

            for (var i = 0; i < 3000; i++)
            {
                var entity = new Entity(this, _spriteBatch, new Vehicle
                {
                    Position = new Vector2(random.Next(GraphicsDevice.Viewport.Width), random.Next(GraphicsDevice.Viewport.Height)),

                    // Todo if you like:
                    // Tweak these values to see how they affect the steering behaviours.

                    MaxSpeed = 500,
                    MaxForce = 350,
                    Mass = 1f
                });
                entity.SetSteeringBehaviour(_seekBehaviour);
                Components.Add(entity);
            }

            base.Initialize();
        }
        protected override void Initialize()
        {
            _spriteBatch = new SpriteBatch(GraphicsDevice);
            var random = new Random((int)DateTime.Now.Ticks);

            _steeringTarget           = new SteeringTarget(Vector2.Zero);
            _seekBehaviour            = new SeekBehaviour(_steeringTarget);
            _fleeBehaviour            = new FleeBehaviour(_steeringTarget);
            _currentSteeringBehaviour = _seekBehaviour;

            for (var i = 0; i < 3000; i++)
            {
                var entity = new Entity(this, _spriteBatch, new Vehicle
                {
                    Position = new Vector2(random.Next(GraphicsDevice.Viewport.Width), random.Next(GraphicsDevice.Viewport.Height)),

                    // Todo if you like:
                    // Tweak these values to see how they affect the steering behaviours.

                    MaxSpeed = 500,
                    MaxForce = 350,
                    Mass     = 1f
                });
                entity.SetSteeringBehaviour(_seekBehaviour);
                Components.Add(entity);
            }

            base.Initialize();
        }
 public void Wander()
 {
     if (currentBehaviour is Wander)
     {
         return;
     }
     currentBehaviour = new Wander(enemy, 1.0f, 4.0f, Angle.FromDegrees(180.0f));
 }
 public void Pursuit(float evaderSpeed)
 {
     if (currentBehaviour is Pursuit)
     {
         return;
     }
     currentBehaviour = new Pursuit(enemy, player, evaderSpeed);
 }
 public void Seek()
 {
     if (currentBehaviour is Seek)
     {
         return;
     }
     currentBehaviour = new Seek(enemy, player);
 }
        /// <summary>
        /// Adds the specified member.
        /// </summary>
        /// <param name="member">The member.</param>
        /// <exception cref="System.ArgumentException">Invalid priority</exception>
        public void Add(ISteeringBehaviour member)
        {
            if (member.priority != this.priority)
            {
                throw new ArgumentException("Invalid priority");
            }

            _steeringComponents.Add(member);
        }
Example #9
0
        public void Add(ISteeringBehaviour member)
        {
            if (member.priority != this.priority)
            {
                throw new ArgumentException("Invalid priority");
            }

            _steeringComponents.Add(member);
        }
Example #10
0
 public SeekTask(AgentBehaviour agent, Transform targetTransform, float seekForce, Action onSuccess = null, Action onFail = null)
 {
     _actorRigidbody    = agent.GetComponent <Rigidbody>();
     _actorTransform    = agent.GetComponent <Transform>();
     _targetTransform   = targetTransform;
     _seekForce         = seekForce;
     _onSuccess         = onSuccess;
     _onFail            = onFail;
     _steeringBehaviour = new Seek();
     _completed         = false;
 }
Example #11
0
        /// <summary>
        /// Unregisters a steering behavior.
        /// </summary>
        /// <param name="behavior">The behavior.</param>
        public void UnregisterSteeringBehavior(ISteeringBehaviour behavior)
        {
            int start = _steeringComponents.Count - 1;

            for (int i = start; i >= 0; i--)
            {
                var c = _steeringComponents[i];
                if (c.priority == behavior.priority)
                {
                    var grp = c as SteeringGroup;
                    if (grp != null)
                    {
                        grp.Remove(behavior);
                    }
                    else
                    {
                        _steeringComponents.RemoveAt(i);
                    }
                }
            }
        }
        private void ChangeSteeringBehaviour()
        {
            if (_currentSteeringBehaviour == _seekBehaviour)
            {
                _currentSteeringBehaviour = _fleeBehaviour;
            }
            else
            {
                _currentSteeringBehaviour = _seekBehaviour;
            }

            foreach (var component in Components)
            {
                var entity = component as Entity;
                if (entity == null)
                {
                    continue;
                }

                entity.SetSteeringBehaviour(_currentSteeringBehaviour);
            }
        }
 /// <summary>
 /// Unregisters a steering behavior.
 /// </summary>
 /// <param name="behavior">The behavior.</param>
 public void UnregisterSteeringBehavior(ISteeringBehaviour behavior)
 {
     int start = _steeringComponents.Count - 1;
     for (int i = start; i >= 0; i--)
     {
         var c = _steeringComponents[i];
         if (c.priority == behavior.priority)
         {
             var grp = c as SteeringGroup;
             if (grp != null)
             {
                 grp.Remove(behavior);
             }
             else
             {
                 _steeringComponents.RemoveAt(i);
             }
         }
     }
 }
        /// <summary>
        /// Registers a steering component.
        /// </summary>
        /// <param name="behavior">The behavior.</param>
        public void RegisterSteeringBehavior(ISteeringBehaviour behavior)
        {
            int count = _steeringComponents.Count;
            for (int i = 0; i < count; i++)
            {
                var c = _steeringComponents[i];
                if (c.priority == behavior.priority)
                {
                    var grp = c as SteeringGroup;
                    if (grp == null)
                    {
                        grp = new SteeringGroup(c.priority);
                        _steeringComponents[i] = grp;
                        grp.Add(c);
                    }

                    grp.Add(behavior);
                    return;
                }
            }

            _steeringComponents.Add(behavior);
            _steeringComponents.Sort((a, b) => b.priority.CompareTo(a.priority));
        }
        private void ChangeSteeringBehaviour()
        {
            if (_currentSteeringBehaviour == _seekBehaviour)
                _currentSteeringBehaviour = _fleeBehaviour;
            else
                _currentSteeringBehaviour = _seekBehaviour;

            foreach (var component in Components)
            {
                var entity = component as Entity;
                if (entity == null)
                    continue;

                entity.SetSteeringBehaviour(_currentSteeringBehaviour);
            }
        }
Example #16
0
 public void SetSteeringBehaviour(ISteeringBehaviour steeringBehaviour)
 {
     _steeringBehaviour = steeringBehaviour;
 }
Example #17
0
 public void Remove(ISteeringBehaviour member)
 {
     _steeringComponents.Remove(member);
 }
Example #18
0
 public Car(IBrakingBehaviour brakingBehaviour, ISteeringBehaviour steeringBehaviour)
 {
     _brakingBehaviour  = brakingBehaviour;
     _steeringBehaviour = steeringBehaviour;
 }
 /// <summary>
 /// Removes the specified member.
 /// </summary>
 /// <param name="member">The member.</param>
 public void Remove(ISteeringBehaviour member)
 {
     _steeringComponents.Remove(member);
 }
Example #20
0
 public void SetSteeringBehaviour(ISteeringBehaviour steeringBehaviour)
 {
     _steeringBehaviour = steeringBehaviour;
 }