public InteractorRuleObject(InteractorRuleObject _rule, bool _default) : base(_rule) { Copy(_rule); Enabled = true; Foldout = true; Selectors.UseDefaultPriority = _default; }
public void Copy(InteractorRuleObject _object) { if (_object == null) { return; } base.Copy(_object); OverrideTargetMovePosition = _object.OverrideTargetMovePosition; OverrideInfluences = _object.OverrideInfluences; }
/// <summary> /// Returns the nearest rule by distance. /// </summary> /// <returns>The rule by distance.</returns> /// <param name="_distance">_distance.</param> public InteractorRuleObject GetRuleByDistance(float _distance) { InteractorRuleObject _selected = null; foreach (InteractorRuleObject _rule in m_Rules) { if (_distance <= _rule.Selectors.SelectionRange && _rule.Enabled) { _selected = _rule; } } return(_selected); }
public InteractorRuleObject GetBestInteractorRule(Vector3 _position) { InteractorRuleObject _new_rule = null; // if the active rule have advanced settings if (m_ActiveRule != null && m_ActiveRule.OverrideTargetMovePosition) { if (m_ActiveRule.BlockRuleUpdateUntilMovePositionReached) { // if the target move position was reached, the creture needs a new rule if (Target.TargetMovePositionReached(_position)) { // if the active rule have a zero range, we select the next higher rule if (m_ActiveRule.Selectors.SelectionRange == 0) { _new_rule = GetRuleByIndexOffset(1); } // if the active rule have a zero range, we select the next higher rule else { _new_rule = GetRuleByDistance(Target.TargetDistanceTo(_position)); } } } else { _new_rule = GetRuleByDistance(Target.TargetDistanceTo(_position)); } } // handle default - get rule by distance else { _new_rule = GetRuleByDistance(Target.TargetDistanceTo(_position)); } if (m_ActiveRule != _new_rule) { m_PreviousRule = m_ActiveRule; m_ActiveRule = _new_rule; } return(m_ActiveRule); }
public TargetObject PrepareTarget() { if (!TargetReady()) { return(null); } InteractorRuleObject _rule = m_Interactor.GetBestInteractorRule(m_Owner.transform.position); if (_rule == null) { m_Interactor.Target.BehaviourModeKey = m_Interactor.BehaviourModeKey; m_Interactor.Target.Selectors.Copy(m_Interactor.Selectors); // incl. default priority } else { m_Interactor.Target.BehaviourModeKey = _rule.BehaviourModeKey; m_Interactor.Target.Selectors.Copy(_rule.Selectors); m_Interactor.Target.Selectors.Priority = (_rule.UseDefaultSelectionPriority?m_Interactor.Selectors.Priority:_rule.Selectors.Priority); } if (_rule == null || _rule.OverrideTargetMovePosition == false) { m_Interactor.Target.UpdateOffset(m_Interactor.DefaultOffset); m_Interactor.Target.TargetStopDistance = m_Interactor.DefaultStopDistance; m_Interactor.Target.TargetRandomRange = m_Interactor.DefaultRandomRange; m_Interactor.Target.TargetSmoothingMultiplier = m_Interactor.DefaultSmoothingMultiplier; m_Interactor.Target.UseUpdateOffsetOnActivateTarget = m_Interactor.UpdateOffsetOnActivateTarget; m_Interactor.Target.UseUpdateOffsetOnMovePositionReached = m_Interactor.UpdateOffsetOnMovePositionReached; } else { m_Interactor.Target.UpdateOffset(_rule.Offset); m_Interactor.Target.TargetStopDistance = _rule.StopDistance; m_Interactor.Target.TargetRandomRange = _rule.RandomRange; m_Interactor.Target.TargetSmoothingMultiplier = _rule.SmoothingMultiplier; m_Interactor.Target.UseUpdateOffsetOnActivateTarget = _rule.UpdateOffsetOnActivateTarget; m_Interactor.Target.UseUpdateOffsetOnMovePositionReached = _rule.UpdateOffsetOnMovePositionReached; } return(m_Interactor.Target); }
public InteractorRuleObject CreateAutoRule(string _key, float _range, int _priority) { InteractorRuleObject _rule = new InteractorRuleObject(); _rule.Enabled = true; _rule.AccessType = AccessType; //_rule.UseChildObjects = UseChildObjects; _rule.UseTargetAttributes = UseTargetAttributes; _rule.OverrideTargetGameObject(TargetGameObject); _rule.Selectors.UseDefaultPriority = false; _rule.Selectors.Priority = _priority; _rule.Selectors.UseSelectionRange = true; _rule.Selectors.SelectionRange = _range; _rule.Selectors.UseSelectionAngle = false; _rule.Selectors.SelectionAngle = 0; _rule.Behaviour.UseAdvancedBehaviour = false; _rule.Behaviour.UseSelectiveBehaviour = false; _rule.Behaviour.BehaviourModeKey = "SENSE"; _rule.Behaviour.BehaviourModeKey = _key; return(_rule); }
public InteractorRuleObject(InteractorRuleObject _rule) : base(_rule as TargetObject) { Copy(_rule); }