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); }
/// <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(); }
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); }
public void Add(ISteeringBehaviour member) { if (member.priority != this.priority) { throw new ArgumentException("Invalid priority"); } _steeringComponents.Add(member); }
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; }
/// <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); } }
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); } }
public void SetSteeringBehaviour(ISteeringBehaviour steeringBehaviour) { _steeringBehaviour = steeringBehaviour; }
public void Remove(ISteeringBehaviour member) { _steeringComponents.Remove(member); }
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); }