/// <summary> /// Set child of decorator /// </summary> /// <param name="child">Child behavior</param> /// <param name="parameters">Optional parameters for child behavior at this position of tree</param> public virtual void SetChild(Behavior child, BehaviorParameterCollection parameters = null) { if (child != null) { Child = new BehaviorContainer(this, child, parameters); } }
/// <summary> /// Add child. Remember to add children in correct priority /// </summary> /// <param name="child">Child behavior node</param> /// <param name="parameters">optional parameters for behavior</param> public virtual void Add(Behavior child, BehaviorParameterCollection parameters) { if (child != null) { _Children.Add(new BehaviorContainer(this, child, parameters)); } }
/// <summary> /// Add new action to collection /// </summary> /// <param name="action">Action to add</param> /// <param name="parameters"> parameters of action </param> internal void Add(Action action, BehaviorParameterCollection parameters) { // the action already added if (!Contains(action)) { _Actions.Add(new RunningAction(action, parameters)); } }
/// <summary> /// Create an instance of BehaviorContainer /// </summary> /// <param name="behavior">Behavior node</param> /// <param name="parameters">Parameters of behavior at this position of tree</param> public BehaviorContainer(Behavior parent, Behavior behavior, BehaviorParameterCollection parameters) { this.Parent = parent; if (behavior == null) { throw new ArgumentNullException("Behavior is null."); } this.Result = BehaviorResult.Failure; this.Behavior = behavior; this.Parameters = parameters; }
internal RunningAction(Action action, BehaviorParameterCollection parameters) { this.Action = action; this.Parameters = parameters; }
/// <summary> /// Add child . Remember to set weight of child before call this function /// </summary> /// <param name="child"></param> /// <param name="parameters"></param> public override void Add(Behavior child, BehaviorParameterCollection parameters = null) { _TotalWeight += child.Weight; base.Add(child, parameters); }