Files
storybook/examples/new-syntax-demo.sb

259 lines
5.6 KiB
Plaintext
Raw Normal View History

//! Demonstration of new behavior tree keyword syntax
//! This file showcases all the new features approved for implementation
// Simple behavior with choose and then
behavior SimpleGuardPatrol {
---description
A village guard who responds to threats or patrols.
Demonstrates basic choose/then keywords.
---
choose patrol_action {
then respond_to_threat {
if(threat_detected)
sound_alarm
rush_to_threat
}
repeat {
then {
patrol_north
patrol_east
patrol_south
patrol_west
}
}
}
}
// Named nodes
behavior ComplexBehavior {
---description
Demonstrates named nodes for better organization and debugging.
Labels help identify which part of the tree is executing.
---
choose root {
then handle_urgent {
when(need.any is urgent)
identify_need
satisfy_need
}
then social_interaction {
when(friend_nearby)
greet_friend
chat
}
then default_activity {
idle_wait
}
}
}
// Advanced decorators
behavior WhiteRabbitAnxiety {
---description
The White Rabbit from Alice in Wonderland, demonstrating
all decorator types: repeat, retry, timeout, cooldown, if.
---
choose {
// Extreme panic when very late
then panic_mode {
if(minutes_late > 100)
timeout(3s) {
repeat(5) {
then {
check_pocket_watch
mutter_desperately
}
}
}
sprint_to_destination
}
// Try to find alternate route when blocked
then find_route {
if(obstacle_encountered)
drop_gloves
drop_fan
retry(2) {
find_alternate_route
}
}
// Queen response with cooldown
then queen_response {
if(queen_nearby)
flatten_ears_in_fear
trembling_bow
cooldown(60s) {
await_commands
}
}
// Only run if energy is sufficient
if(energy > 30) {
scurry_around_frantically
}
// Default: perpetual anxiety
repeat {
then {
check_watch
mutter_anxiously
scurry_forward
}
}
}
}
// Mad Tea Party with infinite repeat
behavior MadTeaParty {
---description
The Mad Hatter's tea party that loops forever.
Demonstrates infinite repeat decorator.
---
repeat {
choose tea_party_activities {
then riddles {
pose_riddle
wait_for_answer
declare_answer_wrong
}
then seat_rotation {
switch_seats
clean_dirty_teacup
pour_fresh_tea
}
then dormouse_interaction {
wake_dormouse
listen_to_brief_story
stuff_dormouse_in_teapot
}
}
}
}
// Cheshire Cat with timing decorators
behavior CheshireCatMaterialization {
---description
Complex behavior with nested decorators showing gradual
materialization and dematerialization with timing controls.
---
choose {
// Materialize when Alice is near
then materialize {
if(alice_nearby and visibility < 0.1)
timeout(10s) {
repeat(5) {
then {
increase_visibility(0.2)
pause_for_effect(1s)
}
}
}
materialize_grin
speak_in_riddles
}
// Dematerialize when fully visible
then dematerialize {
if(visibility > 0.9)
cooldown(30s) {
timeout(8s) {
repeat(5) {
then {
decrease_visibility(0.2)
pause_for_effect(1s)
}
}
}
}
vanish_except_grin
}
// Only float when partially visible
if(visibility >= 0.5) {
idle_float
}
}
}
// Subtree inclusion
behavior WorkBehaviorWithSubtree {
---description
Demonstrates subtree inclusion with the new 'include' keyword.
---
choose {
include common::handle_urgent_needs
then work {
when(at_workplace)
perform_work_tasks
}
idle_wait
}
}
// Invert decorator
behavior AvoidEnemies {
---description
Uses invert decorator to reverse condition logic.
---
choose {
then safe_path {
invert {
if(enemy_nearby)
}
take_direct_route
}
then danger_path {
take_long_safe_route
}
}
}
// Repeat with range
behavior SearchBehavior {
---description
Demonstrates repeat with min..max range.
---
repeat(3..7) {
then {
search_area
rest_briefly
}
}
}
// Always succeed/fail decorators (for debugging)
behavior DebugBehavior {
---description
Shows succeed_always and fail_always decorators.
---
choose {
succeed_always {
experimental_feature
}
fail_always {
disabled_legacy_behavior
}
fallback_behavior
}
}