pruttned / owl-bt

owl-bt is editor for Behavior trees. It has been inspired by Unreal engine behavior trees in a way, that it supports special node items like decorators and services. This makes trees smaller and much more readable.
175 stars 28 forks source link

Latest updates? #2

Closed gamagan closed 6 years ago

gamagan commented 6 years ago

This is, easily, the best BehaviorTree editor out on the internet that's not tied to a specific tool. It would be really cool if you released whatever updates you have made since April 2017.

Many of us Indies have been fan of this tool for a while. Specially because we don't have the skill to create one like this. We're waiting your updates with excitement.

pruttned commented 6 years ago

Hi, I don't have any new updates. Currently is owl-bt satisfying all our requirements in developing of our game :)

Are you missing some specific feature, or did you found bug? Thanks.

gamagan commented 6 years ago

Thanks for replying.

I'm a developer, myself, so I know that adding new features to software takes effort. I don't want to be unreasonable and start asking for crazy thing, but there are a few smallish features that would be really helpful.

  1. Is it possible to define the base properties of the node categories? Decorators and Services have base properties, but I would like to modify them, and also add base props to the other 2 node categories (composites and leafs).

  2. In the owl-bt file, you can define an icon for each type of node. It would be helpful do the same for the node's color, too. By default, the node category (composite/leaf/service/decorator ) would have a standard color (the ones used now), but you could override the color for a particular node type.

  3. (This is a medium size request). Right-click on a node and select 'Add', and a window appears. This window has all the nodes that can be added. That's fine, but that kind of interface feels funny. Any chance that you could add a side panel, similar to (http://editor.behavior3.com), which has an entry for each node type? In order for the panel to be useful, it would have to support dragging and dropping a node on top of the target node.

  4. In the save file, for properties to include their 'type'. Currently, it's only name and value.

  5. In the owl-bt file, the ability to give each node entry a section of 'metadata'. That 'metadata' would be writen to the save file verbatim for each node of that type. Something like:

    // In owl-bt.json { "name": "CrazySelector", "isComposite": true, "metadata": {...} // Gets copied to each node entry of this type under a 'metadata' field. }

    1. Always write the base and custom properties to the save file for each node, even if they have the default value. Omitting properties, in certain circumstances, makes processing nodes in a generic way tricky.
  6. In the home screen, the ability to remove entries from the list. Some entries that are no-longer valid still get displayed in the list.

  7. (This one is just a nice to have. This one is not that huge of a deal, and it might take a decent amount of effort to make happen, but I'll mention it anyway) - In the home screen, the ability to organized the file entries into groups. Like, you could add a directories like: -- World/ -- Bosses/ -- Enemies/ -- Player/ -- Other/

pruttned commented 6 years ago

Wow that is plenty of suggetions :)

1 You mean to modify properties like icon for a specific node instance in a specific tree? 2 Ok. this should not be a problem 3 Owl-bt has different approach to this. You don't need to use mouse at all. Just pres "insert" while in node and start typing name of a node that you want to add. You can also press "ctrl+shift+p" to show command palette (like in Submlime or Visual Studio Code). And you are also able to move in tree using keyboard arrows 4-6 I will try to add support for custom tranformer for save/load functionality. In this way you will be able to make any changes to tree before it is saved. 7 ok. This should not be a problem. 8 Hmm maybe I could add support for tags in tree file. And then you will be able to use them to search list of trees. But of course you can also use browser bookmarks for this. E.g. in Chrome, you can create directory structure of bookmarks. Each bookmark will be a specific tree.

Thanks again for your suggestions. I will include them as my schedule permits it :)

gamagan commented 6 years ago
  1. No, that's not what I mean. On the side panel that appears when a node is selected, all nodes have a section named 'Custom properties'; decorators and services also have a section named 'Base properties'. That's a neat idea: All service nodes have a certain set of base properties, and then each particular type (per owl-bt.json) of service node can have some set of custom properties. So you get to have global properties (base props) for all service nodes, but also properties only applicable to certain types of service nodes (custom props). My request is to extend that functionality to composites and leafs, and also make the base props editable.

  2. Sweet!

  3. See below. 4-6 I think the save file is pretty good, as it is right now; it just needs those tweaks that I mentioned. I like the elegant simplicity of owl-bt and I think that such a feature would be overkill at this stage. Maybe in the future that would be appropriate, but I would prefer the simplicity, instead. Up to you, though.

7 - Sweet! 8 - You know, I'll retract this request. Your work around of using bookmarks in Chrome will work well. For me, it's about having the ability to group a set of related behaviors, not necessary about locating them. This request really wasn't a huge deal for me and, honestly, I don't think the development cost is worth it, at the moment.

9 - I'll sneak in one more request. I don't feel too bad about sneaking it, because I meant to write it yesterday, and I frigging forgot. Plus, I think it will complete that particular feature of the editor: Properties can be defined as having the types (bool, number, string, and enum). Request: add the ability to have 'int' and also 'regex' as types:

3 - At least for me, that way of editing has a certain amount of cognitive cost. The flow is like: -- Mouse -> keyboard -> mouse -- (without keyboard): right-click -> left-click -> scroll + find -> click It's cumbersome. It breaks a certain flow that you get into when messing around creating trees.

It occurred to me that drag & drop is not necessary. In fact, it's not even the optimal solution. Instead, you can click a node to select it, and then you click a node on the left panel that has the list of available nodes, and it would add the new node on top of the selected node. That's just 2 left clicks, and it's good flow.

Having a panel on the left side with the available nodes has benefits other than streamlining the editing process.

I'm not suggesting to remove the current way of doing it. This would be an additional way to add nodes.

Damn, I just realized this is a wall of text. Sorry.

Thanks again for considering these suggestions. I really appreciate that you did.

pruttned commented 6 years ago

Hi, I have released a new version of owl-bt targeting several of your suggestions:

  1. I have added support for inheritance of node items and also to specify abstract items. This should solve you requirement because for instance you can create base service with your common properties. And you may also create more then one base service with this feature. (see https://github.com/pruttned/owl-bt#inheritance)
  2. You are now able to specify color for each item type
  3. There is now item palette on the right side of the tree. You can add items to tree by clicking on item types in this palette
  4. see 6
  5. see 6
  6. I have added support to transform trees during save/load using plugins (see https://github.com/pruttned/owl-bt#plugins). I have made it like this, because I really don’t want to add this information to tree files by default. It would break functionality like resetting values to default and also it would make harder to change default values globally.
  7. Done
  8. ok
  9. I have added support to define custom types in the project file. See (https://github.com/pruttned/owl-bt#types). So in order to create e.g. int, you are now able to specify it like
    "types":{
    "int" : {
      "type" : "number",
      "pattern" : "/^[-]?\d+$/"
    }
    },

    and then you can use it in properties.

See https://github.com/pruttned/owl-bt#110 for full list of changes

I`m closing this issue.

If you are going to have another suggestions feel free to create new issues for them (pls. try to create one issue per request/bug) Thanks.

gamagan commented 6 years ago

You are, officially, the man!

I'm playing around with the new version and I already love the changes. I really appreciate the work you did. Owl-bt is really awesome.

I'll keep an eye on the game you're developing. I'll get myself a copy and I'll tell people I know about it. Good look with everything.

Regards

pruttned commented 6 years ago

:) thanks