Owl-bt adalah editor untuk pohon Perilaku. Ini terinspirasi oleh pohon perilaku mesin Unreal yang mendukung item node khusus seperti dekorator dan layanan. Hal ini membuat pohon menjadi lebih kecil dan lebih mudah dibaca.
Owl-bt telah dibuat karena kami memerlukan editor pohon perilaku untuk game kami Tendril: Echo Accepted, di mana kami berfokus pada perilaku NPC secara langsung.
Kami telah mencoba beberapa solusi yang ada, namun belum memenuhi persyaratan kami seperti:
npm install owl-bt -g
owlbt -h
cd < project-dir >
owlbt i
owlbt c < tree-path >
owlbt o path
Owl-bt berjalan sebagai layanan pada port 8955
secara default. Ini dapat diubah dalam file konfigurasi .owlbtrc
, yang harus dibuat di direktori home pengguna.
{
"port" : 1234
}
Di burung hantu-bt, ada tiga jenis item:
ctrl+shift+p
File proyek ( owl-bt.json
) mendefinisikan semua node dan tipe item node yang dapat digunakan di pohon.
fa-
){{PropertyName}}
fa-
){{PropertyName}}
fa-
){{PropertyName}}
Memungkinkan untuk menentukan tipe properti khusus
Contoh:
{
"types" :{
"myString" : {
"type" : " string " ,
"pattern" : " v[0-9] "
}
},
"nodes" : [
{
"name" : " SetAlertLevel " ,
"icon" : " exclamation " ,
"description" : " Set alert level to " {{Level}} " " ,
"isComposite" : false ,
"properties" : [
{
"name" : " Level " ,
"default" : " None " ,
"type" : " enum " ,
"values" : [
" None " ,
" Investigate " ,
" HighAlert " ,
" Panic "
]
}
]
}
],
"decorators" : [
{
"name" : " HasZoneReportedEnemy " ,
"icon" : " phone " ,
"properties" : [
{
"name" : " MaxReportAge " ,
"default" : 1 ,
"type" : " number "
}
]
}
],
"services" : [
{
"name" : " ReadPlayerPos " ,
"icon" : " pencil " ,
"description" : " Store player pos to " {{BlackboardKey}} " " ,
"properties" : [
{
"name" : " BlackboardKey " ,
"default" : " Target " ,
"type" : " string "
}
]
}
]
}
{
"type" : " Selector " ,
"name" : " rootNode " ,
"childNodes" : [
{
"type" : " Sequence " ,
"services" : [
{
"type" : " Sample service "
}
],
"decorators" : [
{
"type" : " IsBlackboardValueSet " ,
"properties" : [
{
"name" : " Field " ,
"value" : " myValue "
}
],
"periodic" : true
}
]
}
]
}
Dimungkinkan untuk mendapatkan tipe item simpul dari tipe lain menggunakan pengaturan base
.
Dimungkinkan untuk menggunakan string
atau array of strings
untuk pengaturan base
. Dalam kasus array, tipe item dasar diterapkan dalam urutan tertentu. Artinya, jenis item selanjutnya akan menggantikan item yang ditentukan sebelumnya.
Persamaan kita dapat membuat node dasar:
{
"name" : " MyBaseNode " ,
"icon" : " arrow-right " ,
"color" : " red " ,
"isAbstract" : true ,
"properties" : [
{
"name" : " prop-from-base1 " ,
"type" : " string "
},
{
"name" : " prop-from-base2 " ,
"type" : " number "
}
]
},
Dan simpul turunan:
{
"name" : " MyDerivedNode " ,
"color" : " blue " ,
"base" : " MyBaseNode " ,
"properties" : [
{
"name" : " prop1 " ,
"type" : " string "
},
{
"name" : " prop-from-base2 " ,
"default" : " abc " ,
"type" : " string "
}
]
},
Node yang dihasilkan setelah menerapkan warisan akan terlihat seperti:
{
"name" : " MyDerivedNode " ,
"icon" : " arrow-right " ,
"color" : " blue " ,
"base" : " MyBaseNode " ,
"properties" : [
{
"name" : " prop-from-base1 " ,
"type" : " string "
},
{
"name" : " prop-from-base2 " ,
"default" : " abc " ,
"type" : " string "
},
{
"name" : " prop1 " ,
"type" : " string "
}
]
},
File owl-bt.js
di direktori yang sama dengan file proyek owl-bt.json
dianggap sebagai plugin. File plugin js mengekspor objek dengan fungsi plugin.
module . exports = {
onTreeSave : ( { tree , path , project , projectPath } ) => {
} ,
onTreeLoad : ( { tree , path , project , projectPath } ) => {
}
}
onTreeSave
- dijalankan sebelum file tree json disimpan ke disk. Hanya modifikasi objek tree
yang diperbolehkan.tree
- objek pohon (menurut file json pohon)path
- jalur file pohonproject
- objek proyek (menurut file owl-bt.json
)projectPath
- jalur file proyekreturn
- ketika nilai yang dikembalikan false
atau berupa string, maka penyimpanan dicegah dan kesalahan dikembalikan ke klienonTreeLoad
- dijalankan setelah memuat file tree json dari disk. Hanya modifikasi objek tree
yang diperbolehkan.tree
- objek pohon (menurut file json pohon)path
- jalur file pohonproject
- objek proyek (menurut file owl-bt.json
)projectPath
- jalur file proyek Misalnya saja dimungkinkan untuk membuat format file pohon khusus menggunakan onTreeSave
dan onTreeLoad
. Jika kita ingin jalur proyek disimpan dalam file pohon, kita dapat membuat plugin berikut:
module . exports = {
onTreeSave : ( { tree , path , project , projectPath } ) => {
tree . projectPath = projectPath ;
}
}
base
dan isAbstract
dalam definisi proyekctrl+shift+p
-> 'core:Set Node Type'
atau rmb
-> 'Set Node Type'
)