Skip to content

Add onlyIf precondition - #821

Closed
lukicdarkoo wants to merge 2 commits into
BehaviorTree:masterfrom
SpesRobotics:feature-only-if
Closed

lukicdarkoo wants to merge 2 commits into
BehaviorTree:masterfrom
SpesRobotics:feature-only-if

Conversation

@lukicdarkoo

Copy link
Copy Markdown
Contributor

Proposed implementation for #820

@facontidavide

Copy link
Copy Markdown
Collaborator

Thanks @lukicdarkoo! Superseded by #1261, which adds _onlyIf (with you as co-author). There, ONLY_IF is appended at the end of the PreCond enum, so the values of the existing preconditions don't change (ABI). It also fixes an issue in this version: _skipIf only worked if _onlyIf was present too.

facontidavide added a commit that referenced this pull request Nov 7, 2026
* Add _onlyIf and _onStart preconditions (#820, #895)

- `_onlyIf="<script>"`: if false when the node is IDLE, return SKIPPED
  (the opposite of `_skipIf`, more readable in most cases).
- `_onStart="<script>"`: execute a script right before the first tick() of
  the node, i.e. only if no other precondition returned a status. Useful
  to initialize or reset blackboard entries.

Both are evaluated only when the node is IDLE/SKIPPED, like `_skipIf`.

ONLY_IF and ON_START are appended at the end of PreCond, so the values of
the existing ones don't change. Appending ONLY_IF after WHILE_TRUE keeps
the semantics: SKIP_IF, WHILE_TRUE and ONLY_IF all return SKIPPED.

Behavior change: the attribute names `_onlyIf` and `_onStart` are now
reserved. Before, they were stored silently as non-port attributes and
did nothing.

Supersedes #821 and #932.

Co-Authored-By: Darko Lukic <2135826+lukicdarkoo@users.noreply.github.com>
Co-Authored-By: Aglargil <34728006+Aglargil@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Preconditions: static_assert on name arrays, fix _onStart comment, document _onStart/_onlyIf caveats

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: cover _onlyIf/_onStart edge cases (while-interrupt, SubTree, ReactiveSequence, WriteTreeToXML)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Darko Lukic <2135826+lukicdarkoo@users.noreply.github.com>
Co-authored-by: Aglargil <34728006+Aglargil@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants